2016-12-23 52 views
0

我一直在尋找一個Matlab功能,可以做一個總的非線性最小二乘法擬合,基本擬合自定義函數數據,在所有尺寸的誤差。最簡單的情況是x和y數據點在x和y上具有不同的給定標準偏差,對於每個單點。這是所有自然科學中非常常見的情況,僅僅因爲大多數人只知道如何在y中出現錯誤的最小二乘擬合併不意味着它不會非常有用。我知道這個問題比簡單的y錯誤要複雜得多,這也許就是爲什麼大多數(甚至連我自己的物理學家都沒有)學會如何用多維錯誤正確地做到這一點的原因。Matlab的:適合的自定義功能,XY-數據給定XY錯誤

我希望,像MATLAB軟件能做到這一點,但除非我在讀,否則大多是有益的幫助頁面太壞,我想即使是「全」 Matlab的許可證並沒有提供這樣的配件功能。其他工具如Origin,Igor,Scipy使用免費的Fortran包「ODRPACK95」。關於文件交換中總體最小二乘法或戴明適合度的貢獻很少,但它們僅適用於線性擬合,這對我來說幾乎沒有用處。

我很樂意爲任何提示,可以幫助我走出

親切的問候

+0

首先,我建議堅持到Matlab。當然在那裏有一個算法。 – hyprfrcb

+0

也許[本FEX提交](https://nl.mathworks.com/matlabcentral/fileexchange/31109-total-least-squares-method)和[此伴隨的論文](http://actamont.tuke.sk/pdf /2010/n2/8petras.pdf)將有所幫助。 –

+0

好吧......我想應該有一個算法在Matlab中實現考慮x和y錯誤,但我還沒有找到任何東西。 我查看了FileExchange上可用的內容,但線性擬合只有兩種實現。我需要能夠擬合非線性模型。 – wolfgang

回答

0

首先,我要指出,我沒有練過MATLAB很多,因爲我去年(也畢業了作爲一個物理學家)。這就是說,我記得在MATLAB中使用

lsqcurvefit() 

執行非線性曲線擬合。現在,這可能會或可能無法正常工作,具體取決於您的意思是自定義函數?我假設你要適應一些知道類似的這些一個表達,

y = A*sin(x)+B 
    y = A*e^(B*x) + C 

這是非常很難不knowning形式進行配合,例如如上。最終,所有的數學函數可以通過多項式近似得到足夠小的間隔。這是你可能要考慮的事情,因爲MATLAB確實有很多用於多項式迴歸的工具。

最後,我想實際上可以reccomend你寫你自己的裝修功能。網上有很多例子。我們的想法是要知道真正的解決方案的形式之上,猜對的參數,A,B,C ...。創建一個錯誤(或成本)函數,它會在數據和猜測的解決方案之間產生一個定量誤差(偏差)。然後將問題簡化爲,最大限度地減少了的錯誤,因爲MATLAB具有許多內置功能。

+0

當然我知道lsqcurvefit和耶,我們在這裏達成一致。我知道如何做到這一點,而Matlab提供了大量的曲線擬合功能,但是:我的問題是圍繞x變量中y AND中已知錯誤的一組數據進行的。 – wolfgang