2017-04-05 10 views
2

Ich möchte einige Testdaten in eine implizite Funktion passen.FindFit für implizite Funktionen - Mathematica

Ich möchte ein paar Parameter an eine elliptische Gleichung f (x, y) = a anpassen, wobei a eine bekannte Variable ist. Meine Testdaten und die Funktion sind komplexer, allerdings habe ich mehr Datenpunkte als Variablen. Es ist irgendwie nicht möglich, die Gleichung, die ich einfügen möchte, in eine explizite Form wie f (x) = y zu konvertieren. Daher habe ich einen Code angehängt, um die Grundidee zu erhalten.

Test = {{0, 1}, {0.1, 0.9}, {1.1, 0}}; 

Ftest = a*x^2 + b*y^2 

FindFit[Test, Ftest == 2, {a, b}, {x, y}]; 

Jedoch führt dies zu einem Fehler: Anzahl der Koordinaten (1) zur Anzahl der Variablen \ nicht gleich ist (2). >>

Antwort

1

Sie können als kleinsten Quadrate Minimierung stellen diese:

data = {{0, 1}, {0.1, 0.9}, {1.1, 0}} 
Ftest[x_, y_] := a*x^2 + b*y^2 
fit = FindMinimum[ Total[(Ftest @@@ data - 2)^2] , {a, b}] 
ContourPlot[ (Ftest[x, y] /. fit[[2]]) == 2 , {x, 0, 1.5}, {y, 0, 
    1.5}, Epilog -> {Red, Point /@ data}] 

enter image description here

fit Funktionen, die Sie für y und Sie am Ende mit bis zu lösen verwenden müssen:

fit = NonlinearModelFit[data, Sqrt[2 - a*x^2]/Sqrt[b], {a, b}, x] 

Plot[fit[x], {x, 0, 1.2}, Epilog -> {Red, Point /@ data}, 
AspectRatio -> 1] 

enter image description here