Converting Symbolic State Space to Transfer Function

22 visualizaciones (últimos 30 días)
Josh Bingham
Josh Bingham el 11 de Oct. de 2018
Respondida: Walter Roberson el 11 de Oct. de 2018
Hey guys,
So I've been trying for ages to solve this problem...
syms chord S aw mtdot xf e EI v rho ac bc GJ m A B C D;
%%Wing Parameters %%
chord = 2;
S = 7.5;
aw = 2*pi;
EI = 2e7;
GJ = 2e6;
E = [(4*EI)/((S^3)) 0; 0 GJ/5];
EC = 0.2
bc = -(aw/pi)*(1-EC)*sqrt(EC*(1-EC));
ac = (aw/pi)*((acos(1-(2*EC)))+(2*sqrt(EC*(1-EC))));
xf = 0.48*chord;
e = 0.8;
m = 100;
mtdot = -1.2;
rho = 1.225;
v
%%Parameters Contained In Matrices %%
a = [(m*S*chord/5) (m*(S/4)*((chord^2)/2 - chord*xf)); ...
m*(S/4)*((chord^2)/2 - chord*xf) m*((S/3)*((chord^3)/3 ...
- (chord^2)*xf + (chord*xf)^2))];
b = [(chord*S*aw)/10 0;-((chord^2)*S*aw*e)/8 -((chord^3)*S*mtdot)/24];
c = [0 ((chord*S*aw)/8);0 -((chord^2)*e*S*aw)/6];
I = eye(2);
g = (rho*v^2)*[-(S*ac*chord)/6; ((chord^2)*bc*S)/4];
%%Define State Space System %%
A = [zeros(2) I;(-a^-1)*(rho*(v^2)*c + E) (-a^-1)*(rho*v*b)];
B = [[0;0];(a^-1)*g];
C = [1 -xf 0 0];
D = 0;
%%Create Transfer Function %%
[n,d]=ss2tf(A,B,C,D)
mySys_tf=tf(n,d)
However this error message is displayed:
Error using ss2tf (line 26)
The following error occurred converting from sym to double:
DOUBLE cannot convert the input expression into a double array.
If the input expression contains a symbolic variable, use VPA.
Error in Flutter_Model (line 39)
[n,d]=ss2tf(A,B,C,D)
How can I go about fixing this? Your help would be greatly appreciated!

Respuestas (2)

Star Strider
Star Strider el 11 de Oct. de 2018
Your ‘A’ matrix and ‘B’ vector contain symbolic variable ‘v’:
A =
[ 0, 0, 1.0, 0]
[ 0, 0, 0, 1.0]
[ -632.85, 31.872 - 0.050616*v^2, -0.04037*v, 0.00029282*v]
[ 15.11, 0.050213*v^2 - 637.43, 0.037717*v, -0.0058564*v]
B =
0
0
-0.034839*v^2
-0.0085273*v^2
You can either define them with a value for ‘v’ in your symbolic code, or create an anonymous function from each of them (the easiest way is to use the matlabFunction (link) function), pass the appropriate value of ‘v’ to the functions, and then use the evaluated matrices (then with only double values) in ss2tf.

Walter Roberson
Walter Roberson el 11 de Oct. de 2018
If you are deliberately trying to create a transfer function with a parameter in it, then see https://www.mathworks.com/matlabcentral/answers/305339-how-to-create-a-transfer-function-with-gain-k#answer_236890 for the discussion of what is possible in MATLAB.

Categorías

Más información sobre Symbolic Math Toolbox en Help Center y File Exchange.

Productos


Versión

R2015b

Community Treasure Hunt

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

Start Hunting!

Translated by