Guten Abend Richard,
Ihrer erneut mit nahezu identischen Worten gestellten Frage
"Wie kann ich jetzt genau die gleiche Aufgabe mit symbolischen Variablen formulieren, also b[i] statt b[[i]] ?"
glaubt man entnehmen zu dürfen, dass Sie Funktionsausdrücke an
FixedPoint[] übergeben wollen. Unter Beachtung der für FixedPoint[]
notwendigen Strukturgleicheit kann das anhand des Log-Beispiels
folgendermassen geschehen:
In[113]:=
Remove[doubleOne, doubleTwo];
doubleOne[x_, y_] := Cos[x] + Sin[y]
doubleTwo[x_, y_] := -Sin[x] + Cos[y]
Diese beiden Funktionen doubleOne und doubleTwo kann man bei autLog
abliefern, das neben den numerischen Argumenten z noch funktionale
Argumente aut bekommt:
In[120]:=
Remove[autLog];
autLog[{(aut_List)?VectorQ, (z_List)?VectorQ}] :=
{aut, {Re[Log[First[aut][Sequence @@ z] + I*Last[aut][Sequence @@ z]]],
Im[Log[First[aut][Sequence @@ z] + I*Last[aut][Sequence @@ z]]]}} /;
Length[aut] == 2 && Length[z] == 2
Probieren wir das aus mit den in der Session bekannten Funktionen und
zwei Argumenten:
In[122]:=
autLog[{{doubleOne, doubleTwo}, {paul, klee}}]
Out[122]=
{{doubleOne, doubleTwo}, {Re[Log[Cos[paul] + Sin[klee] + I*(Cos[klee] -
Sin[paul])]],
Im[Log[Cos[paul] + Sin[klee] + I*(Cos[klee] - Sin[paul])]]}}
Bingo. Eentsprechend FixedPoint[autLog, {{doubleOne, doubleTwo}, {1.,
1.}}], wobei sich daraus kein Fixpunkt ergeben sollte, weil doubleOne
und doubleTwo auf z eine Drehung von z ergeben, aber funktional ist es
korrekt.
Beachten Sie, was bei einer falschen funktionalen Formulierung geschieht:
In[126]:=
Remove[autFalseFunctionalLog];
autFalseFunctionalLog[{(aut_List)?VectorQ, (z_List)?VectorQ}] :=
{aut, {Re[Log[Through[(First[aut] + I*Last[aut])[Sequence @@ z]]]],
Im[Log[Through[(First[aut] + I*Last[aut])[Sequence @@ z]]]]}} /;
Length[aut] == 2 && Length[z] == 2
In[128]:=
autFalseFunctionalLog[{{doubleOne, doubleTwo}, {paul, klee}}]
Out[128]=
{{doubleOne, doubleTwo}, {Re[Log[Cos[paul] + (I*doubleTwo)[paul, klee] +
Sin[klee]]],
Im[Log[Cos[paul] + (I*doubleTwo)[paul, klee] + Sin[klee]]]}}
doubleTwo wird nicht erkannt sondern als neuer Funktionhead
(I*doubleTwo) gesehen, die Definition für doubleTwo kommt nicht zur
Anwendung. Sie würden in dem Fall wegen der stehenbleibenden Argumente
kein brauchbares Resultat erzielen und FixedPoint[] würde die Arbeit
verweigern müssen. Das ist der Punkt. Bei Ihren Versuchen mit rationalen
Funktionen f1, f2 muss es eine Stelle geben, an der die Anwendung der
Funktionen auf die Argumente nicht gelingt.
Mit den besten Grüssen
Udo.
RGollreiter@XXXXXXX.de wrote:
Hallo Demug,
lassen sie mich das Beispiel von Udo Krause aufgreifen und weiterführen.
Ich schreibe jetzt die Funktion unCoolLog[ ] etwas um und löse
erfolgreich die Fixpunktgleichung:
In[1]:=
Remove[unCoolLog];
unCoolLog[b_]:={Re[Log[b[[1]]+I*b[[2]]]],Im[Log[b[[1]]+I*b[[2]]]]};
FixedPoint[unCoolLog,{1.,1.}]
Out[1]=
{0.318132,1.33724}
Wie kann ich jetzt genau die gleiche Aufgabe mit symbolischen Variablen
formulieren, also b[i] statt b[[i]] ?
Mit freundlichen Gruessen
Richard Gollreiter