隐式函数的 FindFit - mathematica
FindFit for implicit functions - 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). >>
您可以将其作为最小二乘最小化:
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]
我想将一些测试数据拟合到一些隐式函数中。
我想将一些参数拟合到椭圆方程 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). >>
您可以将其作为最小二乘最小化:
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]