mathematica一组数据非拟合成椭圆方程

1个回答

  • 其实这是个二元隐式函数,要拟合就要将 y 解出来,但是那样会出问题,所以最好的办法就是将 data 的每个点换成三元的 就是后面添一个 z 的值 0,这样拟合免去了解 y 的麻烦.另外你的 FindFit 用法不对,详情看下面的吧.输入data = {{565.454, 528.012}, {562.058, 525.544}, {561.39, 521.447}, {563.782, 518.108}, {567.941, 517.407}, {571.255, 519.857}, {571.938, 523.953}, {569.5, 527.356}};sol = FindFit[PadRight[data1, {Length@data1, 3}, 0], ((x - m)/a)^2 + ((y - n)/b)^2 - 1, {a,  b, {m, 565}, {n, 522}}, {x, y}]输出 {a -> 5.40952, b -> 5.44587, m -> 566.665, n -> 522.709} 可以做出图像来比较拟合的效果Show[ListPlot[data, PlotStyle -> Directive[Red, PointSize[Large]]],ContourPlot[Evaluate[((x - m)/a)^2 + ((y - n)/b)^2 - 1 == 0 /. sol], {x, 560, 575}, {y, 515, 530}]]