Guten Morgen Markus,
Ich habe die Aufgabe eine (nicht-Analytische) Funktion mit Mathematica zu
Fitten.
Dann lösen wir doch diese Hausaufgabe schnell.
Die Funktion die ich habe sieht folgendermaßen aus.
f(x)=a*(Exp[K1*(x-y*b) ] )+c*(Exp[K2*(x-y*b) ] )+((x-y*b))⁄d
Ja schlecht, ist das eine Funktion von einer Veränderlichen x, oder von
zwei Veränderlichen x, y?
Mein Datensatz hat die folgende Form.
dataset = {{x1, y1},{x2,y2}, ..., {xn,yn}}
Ja schlecht, wenn f ein f(x, y) ist, dann fehlen die Funktionswerte,
jedoch falls f ein f(x) ist, dann weiss keiner hier in dieser Gruppe,
warum y als Parameter in den Dataset geschrieben wird. So please, explain.
Wenn ich jetzt FindFit[] ausführe,
FindFit[dataset, f, {a, b, c, d}, {x,y}]
bekomme ich immer den folgenden Fehler
FindFit::fitc : Number of coordinates (1) is not equal tot he number of
variables (2). >>
Sicher. Also: Es sei folgende Funktion f zweier Veränderlicher gegeben
In[41]:= Clear[K1, K2, f]
K1 = 2/3; K2 = 7/5;
f[x_, y_] :=
a Exp[K1*(x - y*b)] + c Exp[K2*(x - y*b)] + Abs[x - y*b]^d;
In[44]:= f[1, 2] /. {a -> 1.4, b -> 3.2, c -> 2.6, d -> 2.}
Out[44]= 29.1996
Punkte erzeugen und verrauschen
In[45]:= Clear[pts]
pts = Flatten[
Table[{i, j, (f[i, j] /. {a -> 1.4, b -> 3.2, c -> 2.6, d -> 2}) +
RandomReal[{-0.15, 0.2}]},
{i, 0, 2, 0.2}, {j, 0, 2, 0.25}], 1];
kurz einen Blick draufwerfen
In[47]:= ListPlot3D[pts]
und rasch gefittet
In[48]:= FindFit[pts,
a Exp[(2/3)*(x - y*b)] + c Exp[(7/5)*(x - y*b)] + Abs[x - y b]^d,
{{a, 1}, {b, 3}, {c, 3}, {d, 1}}, {x, y}]
Out[48]= {a -> 1.42471, b -> 3.19667, c -> 2.59148, d -> 2.002}
Oder habe ich da ein Funktion an der sich Mathematica die "Zähne"
ausbeißt.
Ja, weil Mathematica in Ihrer Notation keine Funktion erkennen konnte, es
hat sich mit Verlaub die Zähne am User ausgebissen.
Mit den besten Grüssen
Udo.