Contents
- Ziege-Weide Aufgabe
- Variablen
- Die beiden Kurven (symbolisch)
- bestimme den Schnittpunkt
- unbestimmtes Integrieren
- Einsetzen der Integrationsgrenzen im bestimmten Integral
- Aufstellen der Gleichung, sodass die halbe Flaeche abgegrast wurde
- numerisches Bestimmen der Nullstelle (= Loesung) (sym numbers)
- numerisches Bestimmen der Nullstelle (= Loesung) via fzero
- numerisches Bestimmen der Nullstelle (= Loesung) via fsolve
- Grafik
Ziege-Weide Aufgabe
Problemstellung und Loseung (meine Loesung schaut aehnlich aus)
Das symbolischen Paket von Matlab wird benutzt so weit es geht und zum Schluss muss numerisch geloest werden.
clc; clear all; close all disp(datetime)
26-Nov-2024 12:43:27
Variablen
symbolisch (gesuchte Groessen)
% syms l real positive; l = sym('l','positive'); % Leinenlaenge % syms x real positive; x = sym('x','positive'); % x-wert des Schnittpunktes Wiesenkreis mit Leinenkreis % gegebene Groessen, hier als Zahlenwert R = sym('R','positive'); % Wiesenradius assumeAlso(l<2*R); Rval = 10; %
Die beiden Kurven (symbolisch)
yR(x,R,l) = R - sqrt(R^2-x^2); yL(x,R,l) = sqrt(l^2-x^2); % yR(x,y,R,l) = x^2+(y-R)^2-R^2; % yL(x,y,R,l) = x^2+ x^2-l^2;
bestimme den Schnittpunkt
X(R,l) = solve(yL==yR, x); % Ausgabe disp('Schnittpunkt der beiden Kurven') pretty(yR); pretty(yL) disp('ist') pretty(X)
Schnittpunkt der beiden Kurven 2 2 R - sqrt(R - x ) 2 2 sqrt(l - x ) ist l sqrt((2 R + l) (2 R - l)) --------------------------- 2 R
unbestimmtes Integrieren
I = int(yL - yR, x); pretty(I)
2 / x \ 2 / x \ l asin| - | 2 2 2 2 R asin| - | \ l / x sqrt(R - x ) x sqrt(l - x ) \ R / ------------ - R x + --------------- + --------------- + ------------ 2 2 2 2
Einsetzen der Integrationsgrenzen im bestimmten Integral
==> abgegraste Flaeche, symbolische Funktion A(R,l)
A = 2*int(yL - yR, x, 0,X); % Ausgabe disp('abgegraste Flaeche, Funktion A(R,l)') pretty(A)
abgegraste Flaeche, Funktion A(R,l) / / 4 \ \ | | 2 2 l | | | R l #1 sqrt| R - l + ---- | | | 3 | 2 | | | l #1 \ 4 R / | | ----- + ----------------------------- | 2 \ 8 4 / 2 / #1 \ ------------------------------------------- + l asin| --- | - l #1 2 \ 2 R / R 2 / l #1 \ + R asin| ---- | | 2 | \ 2 R / where 2 2 #1 == sqrt(4 R - l )
Aufstellen der Gleichung, sodass die halbe Flaeche abgegrast wurde
Hier konvertieren wir eine symbolische Funktion in eine numerische Funktion.
Area_half(R,l) = A - pi*R^2/2; % symbolische Funktion pretty(Area_half) F = matlabFunction(Area_half); % numerische Funktion % Grafik % xx=linspace(0,2*R,1001); % plot(xx,F(xx),[xx(1) xx(end)],[0 0 ],'b') % title('A(L)-pi*R^2/2'); xlabel('L') % R_vek=linspace(0.1,20,101); fplot(Area_half(Rval,l),[0,2*Rval]) hold on plot([0,2*Rval],[0 0 ],'b') hold off stringFs=strjoin(arrayfun(@char, Area_half(Rval,l), 'uniform', 0)); title('Area = A(L)-pi*R^2/2'); xlabel('L')
/ / 4 \ \ | | 2 2 l | | | R l #1 sqrt| R - l + ---- | | | 3 | 2 | | | l #1 \ 4 R / | | ----- + ----------------------------- | 2 2 \ 8 4 / pi R ------------------------------------------- - ----- 2 2 R 2 / #1 \ 2 / l #1 \ + l asin| --- | - l #1 + R asin| ---- | \ 2 R / | 2 | \ 2 R / where 2 2 #1 == sqrt(4 R - l )
numerisches Bestimmen der Nullstelle (= Loesung) (sym numbers)
L = solve( Area_half(R,l) == 0, l) % keine Lösung L = solve( Area_half(Rval,l) == 0, l) % keine Lösung
L = vpasolve( Area_half(Rval,l) == 0, l, Rval) Lval = eval(L);
L = 11.587284730181215178282335099335
numerisches Bestimmen der Nullstelle (= Loesung) via fzero
% Hier wird näherungsweise gelöst !! options = optimset('Display','iter'); L_fzero = fzero(matlabFunction(Area_half(Rval,l)), Rval, options) % only with optimization package
numerisches Bestimmen der Nullstelle (= Loesung) via fsolve
% Hier wird näherungsweise gelöst !! options = optimoptions(@fsolve,'Display','iter') % Wie geht das genau? L_fsolve = fsolve(matlabFunction(Area_half(Rval,l)),Rval)
Grafik
n = 100; % Leinenkurve xxL = linspace(-Lval, Lval, n); yyL = eval(yL(xxL,Rval,Lval)); % Wiesenkurve xxR = linspace(-Rval, Rval, n); yyR = eval(yR(xxR,Rval,Lval)); plot(xxL,yyL,'r'); % Leinenbogen hold on; plot(xxR,yyR,'b'); % unterer Kreisbogen plot(xxR,2*Rval-yyR); % oberer Kreisbogen plot(xxL,Rval); axis equal title(['Weidenradius ',num2str(Rval),' m und Leinenlaenge ',num2str(Lval),' m']); legend('Leine','Weide'); % publish('ziege_wiese.m');