我知道它必须是一个愚蠢的错误,但我真的无法解决这种类型的系统:
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作为变量。 这就是为什么我在这种形式中调用solve(b,[q1,q2,q3,q4]),但它试图解决我没有放入向量的符号值。
Ty建议你的帮助。
答案 0 :(得分:1)
根据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
答案 1 :(得分:1)
如上所述,您目前正在尝试解决两组方程式。第一个是等于零的三个b
方程。第二个是向量[q1,q2,q3,q4]
等于零。因为你的第一个方程不是一个向量的函数,而只是这个向量的组成部分,solve
将第二个参数视为方程而不是变量来解决。要解决所需的变量,只需按照文档列出它们:
s = solve(b,q1,q2,q3,q4)
或
[q1,q2,q3,q4] = solve(b,q1,q2,q3,q4)
现在您将获得非零解决方案。然而,你仍然会收到一个警告,因为你显然有三个方程式并试图解决四个未知数,并且可能存在无穷多个实数的解。实际上q4
根本没有在这些方程式中使用。
答案 2 :(得分:0)
正确的语法是:
b=[a2*cos(q1 + q2) + a1*cos(q1)==0;
a2*sin(q1 + q2) + a1*sin(q1)==0;
d1 + d4 + q3==0]