[英]How to solve for a system of equations in MATLAB when the variables are actually symbolic functions?
[英]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.