簡體   English   中英

如何在Matlab中求解符號方程組

[英]How to solve a symbolic system of equations in Matlab

我知道這一定是一個愚蠢的錯誤,但是我真的無法解決這種類型的系統:

b =

 a2*cos(q1 + q2) + a1*cos(q1)
 a2*sin(q1 + q2) + a1*sin(q1)
                 d1 + d4 + q3

>> solve(b,[q1,q2,q3,q4])
Warning: The solutions are parametrized by the symbols:
z1 = C_

> In solve at 190 

ans = 

    a1: [1x1 sym]
    d1: [1x1 sym]
    d4: [1x1 sym]
    q1: [1x1 sym]
    q2: [1x1 sym]
    q3: [1x1 sym]
    q4: [1x1 sym]

基本上我希望我的程序將a1,d1,d4視為參數,並將q1,q2,q3,q4視為變量。 這就是為什么我以這種形式調用resolve(b,[q1,q2,q3,q4])的原因,但是它甚至試圖解決我未放入向量中的符號值。

請為您提供幫助。

根據提示solve

...調用[b,a] = solve(eqns,b,a)分配給a的解決方案和分配給b的b的解決方案。

但是,您可能只想求解b - [e1 e2 e3]' = 0 ,僅用於3個變量(比方說q1 q2 q3 ),您無法求解4個變量,即3個方程和4個變量,沒有道理。

由於我認為它與某些機械系統有關,因此您可能只想求解實際值。 您可以執行此solve (eqn, 'Real', true)或聲明實數值: syms a1 a2 ... real

但是,除非在這種情況下使用'IgnoreAnalyticConstraints'選項,否則您仍然不會獲得很好的結果:

syms q1 q2 q3 d1 d4 a1 a2 e1 e2 e3 real

b = [...
    a2*cos(q1 + q2) + a1*cos(q1)
    a2*sin(q1 + q2) + a1*sin(q1)
    d1 + d4 + q3];

res = solve(b-[e1 e2 e3]', q1, q2, q3, 'IgnoreAnalyticConstraints', true);

輸出:(簡體)

>> simplify(res.q1)

ans =

 2*atan((2*a1*e2 + (- a1^4 + 2*a1^2*a2^2 + 2*a1^2*e1^2 + 2*a1^2*e2^2 - a2^4 + 2*a2^2*e1^2 + 2*a2^2*e2^2 - e1^4 - 2*e1^2*e2^2 - e2^4)^(1/2))/(a1^2 + 2*a1*e1 - a2^2 + e1^2 + e2^2))
 2*atan((2*a1*e2 - (- a1^4 + 2*a1^2*a2^2 + 2*a1^2*e1^2 + 2*a1^2*e2^2 - a2^4 + 2*a2^2*e1^2 + 2*a2^2*e2^2 - e1^4 - 2*e1^2*e2^2 - e2^4)^(1/2))/(a1^2 + 2*a1*e1 - a2^2 + e1^2 + e2^2))

>> res.q2

ans =

 -2*atan(((- a1^2 + 2*a1*a2 - a2^2 + e1^2 + e2^2)*(a1^2 + 2*a1*a2 + a2^2 - e1^2 - e2^2))^(1/2)/(- a1^2 + 2*a1*a2 - a2^2 + e1^2 + e2^2))
  2*atan(((- a1^2 + 2*a1*a2 - a2^2 + e1^2 + e2^2)*(a1^2 + 2*a1*a2 + a2^2 - e1^2 - e2^2))^(1/2)/(- a1^2 + 2*a1*a2 - a2^2 + e1^2 + e2^2))

>> res.q3

ans =

 e3 - d4 - d1
 e3 - d4 - d1

如所寫,您當前正在嘗試求解兩組方程。 第一個是等於零的三個b方程。 第二個是矢量[q1,q2,q3,q4]等於零。 由於您的第一個方程式不是向量的函數,而不僅僅是向量的分量,因此solve將第二個參數視為方程式,而不是要求解的變量。 要解決所需的變量,只需按照文檔列出它們:

s = solve(b,q1,q2,q3,q4)

要么

[q1,q2,q3,q4] = solve(b,q1,q2,q3,q4)

現在您將獲得非零解。 但是,您仍然會收到警告,因為您顯然具有三個方程,並且正試圖求解四個未知數,並且實數上可能有無數個解。 實際上,這些方程式中根本沒有使用q4

正確的語法是:

 b=[a2*cos(q1 + q2) + a1*cos(q1)==0;
    a2*sin(q1 + q2) + a1*sin(q1)==0;
    d1 + d4 + q3==0]

暫無
暫無

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

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