我有两个方程和两个未知数。尝试使用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);
警告:找不到明确的解决方案。
答案 0 :(得分:1)
无法找到解决方案,因为您使用的输入不准确。例如,-120*pi/180
被评估为double,这意味着精度错误。请改用sym
。
我还将你的方程重新排列成一个复杂的表达式。您必须使用assume
而不是assumeAlso
,否则将覆盖Ki
和Kp
为真的假设。
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);
我找到了解决方案。
'重写'和'简化',使方程更易于解决。