DMUG-Archiv 2010

Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

Re: Problem mit FindRoot

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.
> 
> 
> 


Verweise:
Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

DMUG DMUG-Archiv, http://www.mathematica.ch/archiv.html