Guten Morgen Richard,
das Problem liegt nicht bei FixedPoint[], sondern in einer vorgängigen
Konfusion. So, wie Ihr Beispiel daherkommt, ist immer b1 === b2 (da
beide in g[B_] gleich F[a1, a2] gesetzt werden). FixedPoint[] erwartet,
dass Urbild und Bild (Argumente und Werte) dieselbe Struktur haben.
Welche Struktur das ist, ist FixedPoint[] schnuppe.
Also zum Beispiel ist lt. Manual:
In[7]:= FixedPoint[Log, 1. + I]
Out[7]= 0.3181315052047643 + 1.3372357014306893*I
Das lässt sich als Listeninput einfach nachbilden:
In[12]:= Remove[unCoolLog];
unCoolLog[{b1_Real, b2_Real}] := {Re[Log[b1 + I*b2]],
Im[Log[b1 + I*b2]]}
In[14]:= FixedPoint[unCoolLog, {1., 1.}]
Out[14]= {0.3181315052047643, 1.3372357014306893}
Natürlich funktioniert weder FixedPoint[Log, {1., 1.}] noch
FixedPoint[unCoolLog, 1. + I]. FixedPoint[Log, 1 + I] does not return
too because it nests unevaluated and SameQ does correctly not find
Log[Log[1 + I]] being the same as Log[1 + I], for example.
Wenn B immer sicher eine zweielementige Liste ist, dann ist Ihre
Funktion g nichts weiter als:
g[B_] := {F[f1 @@ B, f2 @@ B], F[f1 @@ B, f2 @@ B]} /; Length[B] == 2
das Referenzproblem (B[i] oder B[[i]]) besteht also nicht wirklich für
g, denn
In[17]:= laber @@ {x, y, y}
Out[17]= laber[x, y, y]
wobei f1, f2 und F in der Session bekannt sein müssen, sonst geht es
auch wieder nicht. Über das F müsste nachgedacht werden und welcherart
f1 und f2 zusammengebaut werden, dort sollte ein Struktur- oder
einfacher gesagt, ein Verschachtelungsproblem vorliegen.
Mit den besten Grüssen
Udo.
RGollreiter@XXXXXXX.de wrote:
Hallo Demug,
lassen Sie mich bitte meine Frage am konkreten
Problem darstellen. Hierzu abstrahiere ich meine
Aufgabenstellung, um die Form deutlich zu machen.
Ich möchte eine Fixpunkt-Gleichung g:R^2 -> R^2
lösen. Ich formuliere sie in MMA so
In[1]:=
g[B_]:=Module[{b1,b2},
a1=f1[B[[1]],B[[2]]];
a2=f2[B[[1]],B[[2]]];
b1=F[a1,a2];
b2=F[a1,a2];
Return[{b1,b2}];
];
Zur Funktion F:R^2->R existiert keine geschlossene
Lösung, diese wird ebenfalls in MMA numerisch
ermittelt.
Die Funktionen f1, f2 :R^2->R möchte ich dynamisch,
also erst zur Laufzeit berechnen. Es sind rationale
Funktionen in den Variablen B[[1]] und B[[2]].
Zur Lösung der Fixpunktgleichung verwende ich die MMA
Funktion FixedPoint[] mit geeigneten Anfangsbedingungen
B0.
In[2]:=
B0 ={0,0};
FixedPoint[g, B0]
Nun zum aktuellen Diskussionsstand. Ersetze ich B[[i]]
durch B[i] in der MMA-Definition von g so verweigert
die Funktion FixedPoint ihre Arbeit.
Wie sollte ich das richtig definieren?
Gruss
Richard Gollreiter