Hallo und vielen Dank für die schnelle Aufklärung. Ich habe natürlich die Abschirmung von x übersehen. Gesten abend
lief auf einmal alles wie gedacht (MMA halt neu gestartet und mit aufgeräumtem Workspace gestartet), trotzdem habe ich
das (fehlende) x wieder übersehen. Das kommt davon, wenn man ewig auf den Monitor starrt und an einer ganz anderen Ecke
nach einem Fehler sucht.
Viele Grüße
Michael
Am 18.05.2010 um 20:19 schrieb Udo und Susanne Krause:
> Hallo Michael,
>
>> Natürlich könnte man schnell ein
>> Bisektionsverfahren oder so programmieren,
>
> oder
>
> In[15]:= Clear[gamerCircleIntersect]
> gamerCircleIntersect[z1_Circle, z2_Circle] :=
> Block[{x, y, x1, y1, r1, x2, y2, r2},
> {x1, y1} = z1[[1]];
> r1 = z1[[2]];
> {x2, y2} = z2[[1]];
> r2 = z2[[2]];
> If[(x1 - x2)^2 + (y1 - y2)^2 >= (r1 + r2)^2, 0,
> Integrate[
> Boole[(x1 - x)^2 + (y1 - y)^2 <=
> r1^2 && (x2 - x)^2 + (y2 - y)^2 <= r2^2],
> {x, Min[x1 - r1, x2 - r2], Max[x1 + r1, x2 + r2]},
> {y, Min[y1 - r1, y2 - r2], Max[y1 + r2, y2 + r2]}]]]
>
> tippen und wunderhübsche analytische Resultate
>
> In[19]:= gamerCircleIntersect[Circle[{1, 2}, 1/Sqrt[\[Pi]]],
> Circle[{3/9, 2}, 1/Sqrt[\[Pi]]]]
> Out[19]= -((2 (Sqrt[(9-\[Pi]) \[Pi]]-9 ArcSec[3/Sqrt[\[Pi]]]))/(9 \[Pi]))
>
> erhalten.
>
>> zu Demonstrationszwecken habe ich die Berechnung des Schnittes zweier Kreise via numerischer Integration
>> dargestellt. Dazu dient mir die Funktion A, definiert durch:
>>
>> A[r_, R_, d_] := Module[{h, s = (R^2 - r^2 - d^2)/(2 d)},
>> h = Abs[Sqrt[r^2 - s^2]];
>> 2 NIntegrate[ d + Sqrt[r^2 - x^2] - Sqrt[R^2 - x^2], {x, 0, h}]
>> A berechnet einfach die Schnittfläche der Kreise.
>>
>> ]
>> Um nun den Punkt zu bestimmen, an dem aus dem kleinen Kreis ein bestimmter Wert ausgeschnitten wird wollte ich diese
>> Fläche etwa mit
>>
>> FindRoot[A[r, R, x] == 0.14, {x, R}]
>>
>> das geht nicht (FindRoot hat Attribut HoldAll, dann klappt das mit der Integrationsgrenze nicht). Wie kann ich es
>> denn anstellen, eine derartige Gleichung zu lösen.
>
> In dem Module[], der A definiert, wurde die Variable x von der ausserhalb ebenfalls verwendeten Variablen x nicht
> abgeschirmt, mit anderen Worten
>
> In[67]:= Clear[gA]
> Off[NIntegrate::nlim];
> gA[r_, R_, d_] := Module[{h, s = (R^2 - r^2 - d^2)/(2 d), x, res},
> h = Abs[Sqrt[r^2 - s^2]];
> res = 2 NIntegrate[d + Sqrt[r^2 - x^2] - Sqrt[R^2 - x^2], {x, 0, h}];
> res
> ]
>
> In[71]:= FindRoot[gA[1, 2, x] == 0.88, {x, 2}]
> Out[71]= {x -> 1.56701}
>
> In[73]:= gA[1, 2, 1.56701]
> Out[73]= 0.879995
>
> Gruss
> Udo.
>
>
>