2013-01-10 17 views
0

使用普通LSM(最小二乘法)解決方程組(多項式10度)的數值問題。我獲得了具有巨大和非常小的值的參數 - 因此我無法在此方法中構建逆矩陣 - 即使在擴展變量中精度也很低。我試圖在C++,Matlab,Delphi中做到這一點。 有人可以知道應用儀器,我可以用足夠的準確性或數字提示做到這一點,並獲得良好效果。矩陣的標準計算是不幸難以捉摸的。使用10次多項式解決方程組,LSM

+0

你的問題是關於使用最小二乘法擬合一個給定數據的10階多項式嗎?你有沒有嘗試用低階多項式來使用你的代碼?它工作嗎?你有同樣的問題嗎? –

+0

具有較低階多項式的代碼工作正常。但我必須使用更復雜的功能模型,因此我嘗試使用10階多項式。 – Artik

+0

你的數據是什麼?一個函數,你試圖代表或雲點? –

回答

1

我覺得你的問題來自於一個事實,即使用的是第10次多項式,這往往導致數值問題:

所有的
  • 首先,他們可以因爲大振盪是不合適的。即使內插一個簡單的功能,這些振盪也可以出現,請參閱着名的Runge's example。其次,高階多項式的擬合可以導致山形線性系統,這就是爲什麼你不能反轉矩陣(你應該反過來不這樣做)。我做了一個簡單的實驗:我取11個等距點(在區間[0,1]上)並組裝線性系統的矩陣來求解。 Matlab給我一個約爲1e8的condition number,所以最小二乘矩陣的條件數爲1e16。所以你的矩陣'接近單數',這意味着所有的數值精度都會丟失。

所以,擺脫你的問題的最好方法是擺脫10階多項式。您應該考慮低階多項式,樣條或分段多項式近似。

如果您確實需要10階多項式(例如,如果您知道您的數據是由這樣的多項式生成的),則不要反轉矩陣。使用一個好的預處理器和一個迭代方法來解決這個系統而不需要反轉矩陣。

+0

謝謝你的回答。 – Artik