从MatLab拟合对象图中获取点

时间:2017-03-01 02:03:00

标签: matlab model-fitting

我是Matlab业余爱好者所以请耐心等待我 -

我目前使用Matlab将复杂方程拟合到二维数据中。现在我有一个使用f = fit(xdata, ydata, function, options)来生成拟合对象的程序。

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

从那时起,我知道如何获得绘制的点的唯一方法是使用画笔(?)工具并选择所有行,然后将数据复制到剪贴板并将其粘贴到excel或其他类似的事情。我更愿意直接从Matlab获得这些点,也许是一个数组,但我不知道如何。

任何MatLab老手都可以告诉我,我想要的是否可能?由于我的等式的复杂性,我自己绘制这些点是非常困难的,但是如果需要的话,我会这样做(这可能需要大约30分钟才能完成,而我的计算机并不懈怠)。

2 个答案:

答案 0 :(得分:0)

由于您尚未共享任何代码或数据,因此我使用MATLAB文档中的示例:

ontext.getFilesDir()

因此,您可以缝制,它首先加载包含load franke f = fit([x, y],z,'poly23'); plot(f,[x,y],z) 向量的数据集。然后使用' poly23'将表面拟合到数据中。在你的情况下,它可以是不同的向量和函数集,但仍然如你所说,你将获得x,y,z函数。

现在我们可以看一下函数f

f

enter image description here

它显示了函数和系数的形式。所以你可以按如下方式使用它:

>> 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);

enter image description here

答案 1 :(得分:0)

当您致电f = fit(xdata, ydata, function, options)时,功能名称决定等式。见list of official equations

简单地遍历数据点并使用相应的多项式计算结果。因此,在您的情况下,假设 function = poly2 ,您将按如下方式进行计算:

#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图形上的对象并绘制其值,但使用方程式是一种快速有效的方法。