我是Matlab业余爱好者所以请耐心等待我 -
我目前使用Matlab将复杂方程拟合到二维数据中。现在我有一个使用f = fit(xdata, ydata, function, options)
来生成拟合对象的程序。
然后我可以使用confint(f)
和f.parameter
等来获取拟合系数和置信区间,我可以使用plot(f,x,y)
来绘制数据和拟合图。
从那时起,我知道如何获得绘制的点的唯一方法是使用画笔(?)工具并选择所有行,然后将数据复制到剪贴板并将其粘贴到excel或其他类似的事情。我更愿意直接从Matlab获得这些点,也许是一个数组,但我不知道如何。
任何MatLab老手都可以告诉我,我想要的是否可能?由于我的等式的复杂性,我自己绘制这些点是非常困难的,但是如果需要的话,我会这样做(这可能需要大约30分钟才能完成,而我的计算机并不懈怠)。
答案 0 :(得分:0)
由于您尚未共享任何代码或数据,因此我使用MATLAB文档中的示例:
ontext.getFilesDir()
因此,您可以缝制,它首先加载包含load franke
f = fit([x, y],z,'poly23');
plot(f,[x,y],z)
向量的数据集。然后使用' poly23'将表面拟合到数据中。在你的情况下,它可以是不同的向量和函数集,但仍然如你所说,你将获得x,y,z
函数。
现在我们可以看一下函数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);
答案 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图形上的对象并绘制其值,但使用方程式是一种快速有效的方法。