簡體   English   中英

數值求解非多項式方程

[英]Solving a non-polynomial equation numerically

我的方程式遇到問題,我想同時使用MATLAB和Symbolic Toolbox進行數值求解。 我一直在尋找MATLAB幫助的多個原始頁面,選擇了一些技巧並嘗試了其中的大多數技巧,但結果仍不令人滿意。

我的目標是求解具有q1q2q3角的三個非多項式方程組。 這些變量代表我的工業機械手中的關節角度,而我試圖實現的是解決該模型的逆運動學問題。 我的方程組如下所示: 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中執行此操作,那么在使用resolve()時如何限制解決方案? 我正在考慮一個等效於Symbolic Toolbox的assumeAlso assume()assume() assumeAlso

謝謝您的幫助。

非線性方程組的數值解通常被視為迭代最小化過程,該迭代最小化過程涉及方程式左右手邊之差的范數的最小化(即,找到全局最小值)。 例如, fsolve本質上使用牛頓迭代。 這些方法執行“確定性”優化:它們從初始猜測開始,然后基本上根據梯度的相反方向在未知空間中移動,直到找不到解。

然后,您遇到兩種問題:

局部極小值 :迭代的停止規則與函數的梯度有關。 當梯度變小時,迭代將停止。 但是,除了所需的全局梯度之外,與局部最小值相對應的梯度可能變小。 當最初的猜測離實際解決方案很遠時,您就會陷入一個錯誤的解決方案中。

病態 :未知數的大變化可以反映為數據的大變化。 因此,數據上的小數值誤差(例如,機器取整)會導致未知數的較大變化。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM