2017-03-01 24 views
0

我是一個Matlab業餘,所以請忍受我 -從MatLab擬合對象圖得到點

我目前使用Matlab來擬合複雜的方程到二維數據。現在我有一個程序,它使用f = fit(xdata, ydata, function, options)來生成一個合適的對象。

然後,我可以使用confint(f)f.parameter等來獲得擬合係數和置信區間,我可以使用plot(f,x,y)來繪製數據和擬合圖。

從這一點,我知道如何獲得繪製的點的唯一方法是使用畫筆(?)工具並選擇所有行,然後將數據複製到剪貼板並將其粘貼到Excel或某些這樣的事情。我寧願直接從Matlab獲得這些點,也許是到一個數組中,但我不知道如何。

任何MatLab老兵都可以告訴我,我想要的東西甚至可能嗎?由於我的方程很複雜,所以我自己來繪製這些要點會非常困難,但是如果需要的話,我會這麼做(這可能需要大約30分鐘才能完成,而我的計算機也不是懶散)。

回答

0

由於您沒有共享任何代碼或數據,我使用的示例從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) 

enter image description here

它顯示的功能和係數的形式來看看。所以,你可以按如下方式使用它:

zz = f(x,y); 

爲了確保您可以再次繪製數據:

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

enter image description here

0

當你調用f = fit(xdata, ydata, function, options)功能名決定方程。見list of official equations

簡單地遍歷數據點並使用相應的多項式計算結果。所以你的情況可以說,如果功能= 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數字並繪製其價值,但使用方程式是一種快速且有效的方法。