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