Ziege-Weide Aufgabe
https://de.wikipedia.org/wiki/Ziegenproblem_(Geometrie) (meine Loesung schaut aehnlich aus)
Das symbolischen Paket von Matlab wird benutzt so weit es geht und zum Schluss muss numerisch geloest werden.
Contents
Variablen
symbolisch (gesuchte Groessen)
clc; clear all; %clf; % 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 = 10; % Wiesenradius assumeAlso(l<2*R);
Die beiden Kurven (symbolisch)
yR = R - sqrt(R^2-x^2); yL = sqrt(l^2-x^2);
bestimme den Schnittpunkt
X = solve(yL - yR, x); % Ausgabe disp('Schnittpunkt der beiden Kurven') pretty(yR); pretty(yL) disp('ist') pretty(X)
Schnittpunkt der beiden Kurven
2
10 - sqrt(100 - x )
2 2
sqrt(l - x )
ist
/ (l - 20) (l + 20) \
l sqrt| - ----------------- |
\ 100 /
-----------------------------
2
unbestimmtes Integrieren
I = int(yL - yR, x);
Einsetzen der Integrationsgrenzen
==> abgegraste Flaeche, symbolische Funktion A(l)
A = 2*int(yL - yR, x, 0,X); % Ausgabe disp('abgegrasten Flaeche, Funktion A(l)') pretty(A)
abgegrasten Flaeche, Funktion A(l)
3
/ l #1 \ l #1 2
asin| ---- | 100 + ----- - 10 l #1 + l
\ 20 / 40
/ 4 \
| l 2 |
l #1 sqrt| --- - l + 100 |
/ #1 \ \ 400 /
asin| -- | + ---------------------------
\ 2 / 2
where
/ 2 \
| l |
#1 == sqrt| 4 - --- |
\ 100 /
Aufstellen der Gleichung, sodass die halbe Flaeche abgegrast wurde
Hier konvertieren wir eine symbolische Funktion in eine numerische Funktion.
Fs= A - pi*R^2/2; % symbolische Funktion F = matlabFunction(Fs); % 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') fplot(Fs,[0,2*R]) hold on plot([0,2*R],[0 0 ],'b') hold off stringFs=strjoin(arrayfun(@char, Fs, 'uniform', 0)); title('Area = A(L)-pi*R^2/2'); xlabel('L')
numerisches Bestimmen der Nullstelle (= Loesung)
Hier wird nicht exakt gelöst !!
options = optimset('Display','iter'); L = fzero(F, R, options) % only with optimization package %options = optimoptions(@fsolve,'Display','iter') % Wie geht das genau? % options = optimoptions(optimoptions(fsolve),'Display','iter') % L = fsolve(F,R)
Search for an interval around 10 containing a sign change:
Func-count a f(a) b f(b) Procedure
1 10 -34.2427 10 -34.2427 initial interval
3 9.71716 -40.1279 10.2828 -28.2823 search
5 9.6 -42.5422 10.4 -25.7928 search
7 9.43431 -45.932 10.5657 -22.2528 search
9 9.2 -50.6744 10.8 -17.2101 search
11 8.86863 -57.2728 11.1314 -10.0123 search
13 8.4 -66.3711 11.6 0.280816 search
Search for a zero in the interval [8.4, 11.6]:
Func-count x f(x) Procedure
13 11.6 0.280816 initial
14 11.5865 -0.0169335 interpolation
15 11.5873 -2.35373e-06 interpolation
16 11.5873 3.90799e-14 interpolation
17 11.5873 3.90799e-14 interpolation
Zero found in the interval [8.4, 11.6]
L =
11.5873
Grafik
n = 100; % Leinenkurve xxL = linspace(-L, L, n); yyL = subs(subs(yL,l,L),x,xxL); % Wiesenkurve xxR = linspace(-R, R, n); yyR = subs(yR,xxR); plot(xxL,yyL,'r'); hold on; plot(xxR,yyR,'b'); plot(xxR,2*R-yyR); plot(xxL,R); axis equal title(['Weidenradius ',num2str(R),' m und Leinenlaenge ',num2str(L),' m']); legend('Leine','Weide'); % publish('ziege_wiese.m');