2013-05-02 61 views
0

我試着用MATLAB和Symbolic Toolbox解決數值問題,我的方程出現了問題。我在MATLAB的幾個源代碼頁幫助後,拿起了一些技巧,並嘗試了大部分技巧,仍然沒有得到滿意的結果。數值求解非多項式方程

我的目標是用q1,q2q3角度求解一組三個非多項式方程。這些變量表示我的工業操縱器中的關節角度,我試圖實現的是解決此模型的逆運動學。我的方程組看起來是這樣的:http://imgur.com/bU6XjNP

我與

numeric::solve([z1,z2,z3], [q1=x1..x2,q2=x3..x4,q3=x5..x6], MultiSolutions) 

根據我的需要更改xn不斷解決它。然而,我仍然得到一些奇怪的結果,q1 var關閉大約0.1 rad,q2q3關閉大約0.01 rad。我沒有太多的數字解決經驗,所以我只需要信息,應該看起來像這樣?

而且,如果不是,你建議我應該採取什麼有效的選擇?也許把這個方程轉換成多項式,也許使用不同的工具箱?或者,如果試圖在Matlab中做到這一點,如何在使用solve()時限制您的解決方案?我正在考慮與Symbolic Toolbox的assume()assumeAlso等效。

我會很感激您的幫助。

回答

1

非線性方程的系統的數值解通常取爲涉及方程的左手和右手邊的差值的範數的最小化(即,找到全局最小值)的迭代最小化過程。例如,fsolve實質上使用牛頓迭代。這些方法執行「確定性」優化:它們從初始猜測開始,然後基本上根據梯度的相反方向移動到未知空間中,直到找不到解。

然後,您有兩種問題:

局部極小:迭代的停止規則與功能的梯度。當梯度變小時,迭代停止。但是,除了期望的全球範圍之外,梯度可以根據當地最小值變小。當最初的猜測與實際的解決方案相差甚遠時,你就會陷入一種錯誤的解決方案。

病情調整:未知數的大變化可以反映到數據的大變化中。因此,數據上的小數字錯誤(例如機器舍入)會導致未知數的巨大變化。

由於上述問題,您的數值算法找到的解決方案可能會與實際解決方案(甚至相關)有所不同。

我建議您通過選擇一個開始的猜測進行一致性測試,例如使用fsolve時,非常接近實際解決方案並驗證您的最終結果是否準確。然後你會發現,通過將最初的猜測與實際解決方案相距甚遠,你的結果可能會顯示出一些(甚至很大的)錯誤。當然,錯誤的實體取決於方程組的性質。在一些幸運的情況下,這些錯誤可能會保持很小。