如何解决在Matlab方程的一个符号系统(How to solve a symbolic syste

2019-10-19 03:47发布

我知道它必须是一个愚蠢的错误,但我真的解决不了这个类型的系统:

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为变量。 这就是为什么我把这种形式解决(B,[Q1,Q2,Q3,Q4]),但它试图解决甚至在我还没有把载体中的符号值。

泰在您的帮助的建议。

Answer 1:

据技巧solve

...呼叫并[b,A] =解决(数学式,B,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


Answer 2:

由于写的,你现在正在试图解决两套方程。 首先是三个b等于零方程。 第二个是向量[q1,q2,q3,q4]等于零。 因为你的第一等式是不是一个矢量的函数而是这个向量的唯一的元件, solve看到第二个参数为公式而不是变量来求解。 为了解决所需的变量,简单地列出它们按文档:

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

要么

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

现在,您将获得非零的解决方案。 不过,你还是会得到一个警告,你显然有三个方程式,并试图解决四个未知数并有可能在实数解无穷多个。 事实上q4没有在这些方程中使用的。



Answer 3:

正确的语法是:

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


文章来源: How to solve a symbolic system of equations in Matlab