Can you help me ? Indexing error

5 次查看(过去 30 天)
Y_beta=Yv;
N_beta=Nv;
Delta_r = [s-Y_beta / u0, 1-Yr / u0; -1*N_beta, s- Nr];
D_beta = [YdeltaR/u0, 1- Yr/u0; NdeltaR, s- Nr];
dr_appro=vpa(det(D_beta) ./ det(Delta_r) , 3);
disp('Beta transfer function:')
disp(dr_appro)
%ROLL DYNAMICS
RDra=vpa(LdeltaA ./ (s .*(s-Lp)) ,3);
disp('Roll angle transfer function:')
disp(RDra)
This is the error I obtained:
Error using sym/subsindex (line 853)
Invalid indexing or function definition. Indexing must follow MATLAB indexing. Function arguments must be symbolic variables, and function body must be sym expression.
Error in sym/subsref (line 898)
R_tilde = builtin('subsref',L_tilde,Idx);
Error in Nicolas_Moujon_new (line 192)
dr_appro=vpa(det(D_beta) ./ det(Delta_r) , 3);
I don't know how to solve it ! I just have seen that it happens few times ago. I tried by myself but unsuccessfully.
Thank you very much in advance for your help !!
Nicolas
  2 个评论
darova
darova 2020-5-29
Can you attach the whole code?
Nicolas MOUJON
Nicolas MOUJON 2020-5-29
编辑:Nicolas MOUJON 2020-5-29
Thanks for your reply.
You will find it below:
clear all; clc;
% PARAMETERS
m=7392;
g=9.81;
Xcg=0.07;
Ixx=4480.8;
Iyy=73999.5;
Izz=75390.8;
z=10668;
rho=0.379;
u0=267;
mach=0.9;
theta0=2.86*0.0174533;
q=(1/2)*(rho)*(u0)^2;
S=18.22;
b=6.69;
c=2.91;
a=2.45;
O=0.92;
CL0=0.735;
CD0=0.263;
CTx0=0.025;
Cm0=0;
Cmt0=0;
Clb=-0.175;
Clp=-0.285;
Clr=0.265;
CldeltaA=0.039;
CldeltaR=0.045;
Cnb=0.5;
Cnp=-0.14;
Cnr=-0.75;
CndeltaA=0.0042;
CndeltaR=-0.16;
Cyb=-1.17;
Cyp=0;
Cyr=0;
CydeltaA=0;
CydeltaR=0.208;
Q=(1/2)*rho*u0^2;
Yv=(Q*S*Cyb)/(m*u0);
Yp=(Q*S*b*Cyp)/(2*m*u0);
Yr=(Q*S*b*Cyr)/(2*m*u0);
Lv=(Q*S*b*Clb)/(Ixx*u0);
Lp=(Q*S*b^2*Clp)/(2*Ixx*u0);
Lr=(Q*S*b^2*Clr)/(2*Ixx*u0);
Nv=(Q*S*b*Cnb)/(Izz*u0);
Np=(Q*S*b^2*Cnp)/(2*Izz*u0);
Nr=(Q*S*b^2*Cnr)/(2*Izz*u0);
YdeltaR=((q*S)/(m*u0))*CydeltaR;
YdeltaA=((q*S)/(m*u0))*CydeltaA;
LdeltaR=((q*S*b)/(Ixx*u0))*CldeltaR;
LdeltaA=((q*S*b)/(Ixx*u0))*CldeltaA;
NdeltaR=((q*S*b)/(Izz*u0))*CndeltaR;
NdeltaA=((q*S*b)/(Izz*u0))*CndeltaA;
% MATRIX
A=[Yv Yp -u0+Yr g*cosd(theta0); Lv Lp Lr 0; Nv Np Nr 0; 0 1 0 0];
print(A)
% CHARACTERISTIC EQUATION
P=charpoly(A);
print(P)
% EIGENVALUES OF THE SYSTEM
[vect_p,val_p]=eig(A);
[Wn,Zeta]=damp(A);
% CURVES
n=10;
n1=80000;
n2=1200;
% ROLLING MODE
figure(1);
R=@(t) vect_p(1,3)*exp(val_p(3,3)*t);
R2=@(t) vect_p(2,3)*exp(val_p(3,3)*t);
R3=@(t) vect_p(3,3)*exp(val_p(3,3)*t);
R4=@(t) vect_p(4,3)*exp(val_p(3,3)*t);
fplot(R,[0 n]); hold on;
fplot(R2,[0 n]);
fplot(R3,[0 n]);
fplot(R4,[0 n]);
legend('Side velocity','roll rate','Yaw rate','Side angle')
title('Rolling mode');
xlabel('Time (s)')
ylabel('State variable')
% SPIRAL MODE
figure(2);
S=@(t) vect_p(1,4)*exp(-val_p(4,4)*t);
S2=@(t) vect_p(2,4)*exp(-val_p(4,4)*t);
S3=@(t) vect_p(3,4)*exp(-val_p(4,4)*t);
S4=@(t) vect_p(4,4)*exp(-val_p(4,4)*t);
fplot(S,[0 n1]); hold on;
fplot(S2,[0 n1]);
fplot(S3,[0 n1]);
fplot(S4,[0 n1]);
legend('Side velocity','roll rate','Yaw rate','Side angle')
title('Spiral mode');
xlabel('Time (s)')
ylabel('State variable')
% DUTCH ROLL MODE
figure(3);
DR=@(t) vect_p(1,1)*exp(val_p(1,1)*t)+vect_p(1,2)*exp(val_p(2,2)*t);
DR2=@(t) vect_p(2,1)*exp(val_p(1,1)*t)+vect_p(2,2)*exp(val_p(2,2)*t);
DR3=@(t) vect_p(3,1)*exp(val_p(1,1)*t)+vect_p(3,2)*exp(val_p(2,2)*t);
DR4=@(t) vect_p(4,1)*exp(val_p(1,1)*t)+vect_p(4,2)*exp(val_p(2,2)*t);
fplot(DR,[0 n2]); hold on;
fplot(DR2,[0 n2]);
fplot(DR3,[0 n2]);
fplot(DR4,[0 n2]);
legend('Side velocity','roll rate','Yaw rate','Side angle')
title('Dutch Roll mode');
xlabel('Time (s)')
ylabel('State variable')
%TRANSFERT FUNCTION
I=eye(4); %matrice identite 4x4
syms s
det=det(s*I-A); %determinant
adj=adjoint(s*I-A); %adjacent
%AILERON
Ai=[YdeltaA; LdeltaA; NdeltaA; 0]; %matrice aileron
TfAi=adj/det * Ai;
aiss=vpa(TfAi(3),3); %Side Slip
airr=vpa(TfAi(4),3); %Roll Rate
aira=vpa(TfAi(1),3); %Roll Angle
aiyr=vpa(TfAi(2),3); %Yaw Rate
disp('Side slip function for the control of ailerons:')
disp(aiss)
disp('Roll rate function for the control of ailerons:')
disp(airr)
disp('Roll angle function for the control of ailerons:')
disp(aira)
disp('Yaw rate function for the control of ailerons:')
disp(aiyr)
%RUDDER
Ru=[YdeltaR; LdeltaR; NdeltaA; 0];
TfRu = adj/det * Ru;
russ=vpa(TfRu(3),3); %Side Slip
rurr=vpa(TfRu(4),3); %Roll Rate
rura=vpa(TfRu(1),3); %Roll Angle
ruyr=vpa(TfRu(2),3); %Yaw Rate
disp('Side slip function for the control of the rudder:')
disp(russ)
disp('Roll rate function for the control of the rudder:')
disp(rurr)
disp('Roll angle function for the control of the rudder:')
disp(rura)
disp('Yaw rate function for the control of the rudder:')
disp(ruyr)
%DUTCH ROLL APPRO
Y_beta=Yv;
N_beta=Nv;
Delta_r = [s-Y_beta / u0, 1-Yr / u0; -1*N_beta, s- Nr];
D_beta = [YdeltaR/u0, 1- Yr/u0; NdeltaR, s- Nr];
dr_appro=vpa(det(D_beta) ./ det(Delta_r) , 3);
disp('Beta transfer function:')
disp(dr_appro)
%ROLL DYNAMICS
RDra=vpa(LdeltaA ./ (s .*(s-Lp)) ,3);
disp('Roll angle transfer function:')
disp(RDra)

请先登录,再进行评论。

采纳的回答

Steven Lord
Steven Lord 2020-5-29
You've defined a variable named det in your code. Because of this you cannot use the det function. Attempting to call det (the function) will instead be interpreted as an attempt to index into det (the variable.)
Rename that variable.

更多回答(1 个)

darova
darova 2020-5-29
THe problem
  3 个评论
darova
darova 2020-5-29
I don't see any difference
Nicolas MOUJON
Nicolas MOUJON 2020-5-29
So, what do I have to change ?
Thanks

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Symbolic Variables, Expressions, Functions, and Preferences 的更多信息

产品


版本

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by