[英]Solving a non-polynomial equation numerically
我的方程式遇到問題,我想同時使用MATLAB和Symbolic Toolbox進行數值求解。 我一直在尋找MATLAB幫助的多個原始頁面,選擇了一些技巧並嘗試了其中的大多數技巧,但結果仍不令人滿意。
我的目標是求解具有q1
, q2
和q3
角的三個非多項式方程組。 這些變量代表我的工業機械手中的關節角度,而我試圖實現的是解決該模型的逆運動學問題。 我的方程組如下所示: 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, q2
和q3
偏離〜0.01 rad。 我沒有數值求解的豐富經驗,所以我只需要信息,應該看起來像這樣嗎?
而且,如果沒有,您建議我接下來采取什么有效的選擇? 也許使用不同的工具箱將此方程式轉換為多項式?
或者,如果嘗試在Matlab中執行此操作,那么在使用resolve()時如何限制解決方案? 我正在考慮一個等效於Symbolic Toolbox的assumeAlso
assume()
和assume()
assumeAlso
。
謝謝您的幫助。
非線性方程組的數值解通常被視為迭代最小化過程,該迭代最小化過程涉及方程式左右手邊之差的范數的最小化(即,找到全局最小值)。 例如, fsolve本質上使用牛頓迭代。 這些方法執行“確定性”優化:它們從初始猜測開始,然后基本上根據梯度的相反方向在未知空間中移動,直到找不到解。
然后,您遇到兩種問題:
局部極小值 :迭代的停止規則與函數的梯度有關。 當梯度變小時,迭代將停止。 但是,除了所需的全局梯度之外,與局部最小值相對應的梯度可能變小。 當最初的猜測離實際解決方案很遠時,您就會陷入一個錯誤的解決方案中。
病態 :未知數的大變化可以反映為數據的大變化。 因此,數據上的小數值誤差(例如,機器取整)會導致未知數的較大變化。
由於上述問題,您的數值算法找到的解可能會與實際解不同(甚至相關)。
我建議您通過選擇一個開始猜測來進行一致性測試,例如,在使用fsolve
,應非常接近實際解決方案,並驗證最終結果是否正確。 然后,您會發現,通過使初始猜測距離實際解決方案更遠,您的結果可能會顯示一些(甚至很大)錯誤。 當然,誤差的實體取決於方程組的性質。 在某些幸運的情況下,這些錯誤也可以保持很小的比例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.