FindFit для неявных функций - mathematica

Я хотел бы поместить некоторые тестовые данные в какую-то неявную функцию.

Я хотел бы подогнать несколько параметров к эллиптическому уравнению f(x,y)=a, где a - известная переменная. Мои тестовые данные и функция более сложны, однако я получил больше точек данных, чем переменных. Отчасти невозможно преобразовать уравнение, которое я хочу вписать, в явную форму, такую ​​как f(x)=y. Поэтому я приложил некоторый код, чтобы получить основную идею.

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}];

Однако это приводит к ошибке: количество координат (1) не равно количеству переменных \ (2). >>

1 ответ

Решение

Вы можете представить это как минимизацию наименьших квадратов:

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}]

чтобы использовать функции подгонки, которые нужно решить для y, вы получите:

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] 

Другие вопросы по тегам