Matlab:解决从Matlab函数'abs'和'angle'派生的符号方程(最初的复杂表达式)

时间:2015-02-10 18:41:46

标签: matlab symbolic-math

我有两个方程和两个未知数。尝试使用matlab函数的符号输出。

clear; clc;
J = 152e-6; % moment of inertia
W = 200*pi; % desired crossover freq
K = 0.1;    % torque constant
syms Ki Kp real
assume(Ki>0);
assume(Kp>0);
G = Ki/(i*W)*(1 + i*W/(Ki/Kp))*K/(i*W*J)
F = [abs(G) == 1; angle(G) == - 120*pi/180]
[Ki,Kp] = solve(F,Ki,Kp);
  

警告:找不到明确的解决方案。

2 个答案:

答案 0 :(得分:1)

无法找到解决方案,因为您使用的输入不准确。例如,-120*pi/180被评估为double,这意味着精度错误。请改用sym

我还将你的方程重新排列成一个复杂的表达式。您必须使用assume而不是assumeAlso,否则将覆盖KiKp为真的假设。

J = sym('152e-6'); % moment of inertia
W = sym('200')*pi; % desired crossover freq
K = sym('0.1');    % torque constant
syms Ki Kp real
assumeAlso(Ki>0);
assumeAlso(Kp>0);
S=sym('-120')*pi/sym('180');
C=cos(S)+1i*sin(S);

F = Ki/(1i*W)*(1 + 1i*W/(Ki/Kp))*K/(1i*W*J)-C;
sol = solve(F,Ki,Kp);

答案 1 :(得分:0)

clear; clc;
J = 152e-6;
W = 200*pi;
K = 0.1;
syms Ki Kp real
assumeAlso(Ki>0);
assumeAlso(Kp>0);
G = Ki/(i*W)*(1 + i*W/(Ki/Kp))*K/(i*W*J);
phi = -120*pi/180;
eq1 = abs(G);
eq1 = rewrite(eq1,'sqrt');
eq2 = angle(G);
eq2 = simplify(eq2);
sol = solve([eq1 == 1,eq2 == phi],Ki,Kp);

我找到了解决方案。

'重写'和'简化',使方程更易于解决。