Can you help me ? Indexing error

5 visualizzazioni (ultimi 30 giorni)
Nicolas MOUJON
Nicolas MOUJON il 28 Mag 2020
Commentato: Nicolas MOUJON il 29 Mag 2020
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 Commenti
darova
darova il 29 Mag 2020
Can you attach the whole code?
Nicolas MOUJON
Nicolas MOUJON il 29 Mag 2020
Modificato: Nicolas MOUJON il 29 Mag 2020
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)

Accedi per commentare.

Risposta accettata

Steven Lord
Steven Lord il 29 Mag 2020
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 Commento
Nicolas MOUJON
Nicolas MOUJON il 29 Mag 2020
Thank you very much for your reply ! The code is working now.

Accedi per commentare.

Più risposte (1)

darova
darova il 29 Mag 2020
THe problem
  3 Commenti
darova
darova il 29 Mag 2020
I don't see any difference
Nicolas MOUJON
Nicolas MOUJON il 29 Mag 2020
So, what do I have to change ?
Thanks

Accedi per commentare.

Prodotti


Release

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by