Using symbolic Matlab-output from functions 'abs' and 'angle' as input for the 'solve'-function

2 Ansichten (letzte 30 Tage)
clear; clc;
J = 152e-6; % moment of inertia
W = 200*pi; % desired crossover freq
K = 0.1; % torque constant
syms Ki Kp real
assumeAlso(Ki>0);
assumeAlso(Kp>0);
G = Ki/(i*W)*(1 + i*W/(Ki/Kp))*K/(i*W*J); % transfer-function
F = [abs(G) == 1; angle(G) == - 120*pi/180]; % symbolic output (2 equations)
[Ki,Kp] = solve(F,Ki,Kp);
The code produces output:
Warning: Explicit solution could not be found.

Antworten (1)

Ronny Landsverk
Ronny Landsverk am 12 Feb. 2015
I found a solution.
clear; clc;
J = 152e-6; % moment of inertia
W = 200*pi; % desired crossover freq
K = 0.1; % torque constant
syms Ki Kp real
assumeAlso(Ki>0);
assumeAlso(Kp>0);
G = Ki/(i*W)*(1 + i*W/(Ki/Kp))*K/(i*W*J); % transfer-function
F = [abs(G), angle(G)]; % symbolic output
H = [rewrite(F(1),'sqrt') == 1, simplify(F(2)) == -120*pi/180]; % 2 equations
[Ki,Kp] = solve(H,Ki,Kp);
So 'rewrite' and 'simplify' made the equations more managable for 'solve'

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by