|
|
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] == 2Probieren 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] == 2In[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, |