从MatLab fit对象图中获取点

从MatLab fit对象图中获取点,matlab,model-fitting,Matlab,Model Fitting,我是Matlab业余爱好者,所以请容忍我- 我目前使用Matlab来拟合二维数据的复杂方程。现在我有一个程序,它使用f=fit(扩展数据、ydata、函数、选项)生成fit对象 然后,我可以使用confint(f)和f.parameter等来获得拟合系数和置信区间,我可以使用plot(f,x,y)来绘制数据和拟合 从那时起,我知道如何获得绘制的点的唯一方法是使用笔刷(?)工具并选择所有线条,然后将数据复制到剪贴板并粘贴到excel或类似的东西中。我更愿意直接从Matlab中获取这些点,或许可以将

我是Matlab业余爱好者,所以请容忍我-

我目前使用Matlab来拟合二维数据的复杂方程。现在我有一个程序,它使用
f=fit(扩展数据、ydata、函数、选项)
生成fit对象

然后,我可以使用
confint(f)
f.parameter
等来获得拟合系数和置信区间,我可以使用
plot(f,x,y)
来绘制数据和拟合

从那时起,我知道如何获得绘制的点的唯一方法是使用笔刷(?)工具并选择所有线条,然后将数据复制到剪贴板并粘贴到excel或类似的东西中。我更愿意直接从Matlab中获取这些点,或许可以将它们放入数组中,但我不知道如何获取


有谁能告诉我我想要的是不是可能的?由于方程的复杂性,我自己绘制这些点是非常困难的,但如果需要的话,我会这样做(这可能需要约30分钟的时间,我的计算机也不会没精打采)。

由于您没有共享任何代码或数据,我使用MATLAB文档中的一个示例:

load franke
f = fit([x, y],z,'poly23');
plot(f,[x,y],z)
因此,正如您所能做的,它首先加载一个数据集,包括
x,y,z
向量。然后使用“poly23”将曲面拟合到数据。在你的例子中,它可以是不同的向量集和函数集,正如你所说,你将得到
f
函数

现在我们可以看看函数
f

>> f

     Linear model Poly23:
     f(x,y) = p00 + p10*x + p01*y + p20*x^2 + p11*x*y + p02*y^2 + p21*x^2*y 
                    + p12*x*y^2 + p03*y^3
     Coefficients (with 95% confidence bounds):
       p00 =       1.118  (0.9149, 1.321)
       p10 =  -0.0002941  (-0.000502, -8.623e-05)
       p01 =       1.533  (0.7032, 2.364)
       p20 =  -1.966e-08  (-7.084e-08, 3.152e-08)
       p11 =   0.0003427  (-0.0001009, 0.0007863)
       p02 =      -6.951  (-8.421, -5.481)
       p21 =   9.563e-08  (6.276e-09, 1.85e-07)
       p12 =  -0.0004401  (-0.0007082, -0.0001721)
       p03 =       4.999  (4.082, 5.917)

它向您展示了函数的形式和系数。因此,您可以按如下方式使用它:

zz = f(x,y);
#Fit your data
f = fit([xdata, ydata],'poly2');

#Print name of coefficients (Just for Verification)
coeffnames(f)

#Fetch values of coefficients like p1, p2, ...
p = coeffvalues(c) 

#Compute output points from min(xdata) to max(xdata) spaced at deltaX
deltaX = 0.1;
x = [min(xdata):deltaX:max(xdata)];
Y = p(1)*x^2+p(2)*x+p(3);            #This is equation for function
要确保可以再次打印数据,请执行以下操作:

figure;
scatter3(x,y,zz,'.k');
hold on
scatter3(x,y,z,'.');

当您调用
f=fit(扩展数据、ydata、函数、选项)
时,函数名决定方程式。看

简单地迭代数据点,并使用相应的多项式计算结果。因此,在您的例子中,假设如果function=poly2,您将进行如下计算:

zz = f(x,y);
#Fit your data
f = fit([xdata, ydata],'poly2');

#Print name of coefficients (Just for Verification)
coeffnames(f)

#Fetch values of coefficients like p1, p2, ...
p = coeffvalues(c) 

#Compute output points from min(xdata) to max(xdata) spaced at deltaX
deltaX = 0.1;
x = [min(xdata):deltaX:max(xdata)];
Y = p(1)*x^2+p(2)*x+p(3);            #This is equation for function
我知道可以使用其他复杂的Java代码来迭代matlab图形上的对象并绘制其值,但使用公式是一种快速有效的方法