How to solve exceed number of array element (1) problem?
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Hi
As I try to run the bellow code, I will encounter the Index exceeds the number of array elements (1). As I tried the Time_Delay_Bra as a constant, the problem will be solved. However as I use it as "Time_Delay_Bra=0.1:0.05:0.2", it causes problem for me.
Could you please help me with this mattter.
Thank youo in advance
%%
tic
clear all
clc
close all
%%
Mass=60;Lenght=1;Ja=60;g=9.81;beta2=411.67;
Kp_Bra=2.15;Kd_Bra=0.75;
alpha=(Mass*Lenght*g)/Ja;Zeta3=beta2/Ja;
N=7;
Time_Delay_Bra=0.1:0.05:0.2;
Time_Delay_Exo=0.1:0.05:0.2;
AreaCount=1;
AreaVector=zeros(1,AreaCount);
AreaMatrix=zeros(length(Time_Delay_Exo),length(Time_Delay_Bra));
for j=1:length(Time_Delay_Bra)
for jj=1:length(Time_Delay_Exo)
%% Legendre Polynomial
s1=0;
s2=-Time_Delay_Bra(j);
s3=-Time_Delay_Exo(jj);
[Phi_0_s,Phi_BTD_s,Phi_ETD_s]=Shape_Function(N,s1,s2,s3);
%%
Time_Delay_Bra=Time_Delay_Bra(j);
[M,C]=M_C(N,Time_Delay_Bra);
%%
count=1;
KP_Exo=0:20:800;
KD_Exo=0:20:800;
x=zeros(1,count);
y=zeros(1,count);
MaximunEigenValuesMatrix=zeros(length(KP_Exo),length(KD_Exo));
WantedEigenValuesforDefinedGaines=zeros(1,1);
for ii=1:length(KP_Exo)
KP_Exo(ii)
for i=1:length(KD_Exo)
KP1=KP_Exo(ii)/Ja;
KD1=KD_Exo(i)/Ja
Final_Matirx=Evaluation(KP1,KD1,alpha,Phi_0_s,Phi_BTD_s,Phi_ETD_s,M,C,Zeta3,Kp_Bra,Kd_Bra);
Max_Real_EignValues=max(real(eig(Final_Matirx)));
if Max_Real_EignValues<0
MaximunEigenValuesMatrix(ii,i)=max(real(eig(Final_Matirx)));
x(1,count)=KP1*Ja;
y(1,count)=KD1*Ja;
count=count+1;
end
hold on
end
end
k = boundary(x',y');% generate boundary of data points
plot(x(k),y(k))
Area= polyarea(x,y);
AreaMatrix(jj,j)=Area;
end
end
toc
%%
function [Phi_0_s,Phi_BTD_s,Phi_ETD_s]=Shape_Function(N,s1,s2,s3)
% % Shape Function for the Zero PArt
Phi_0_s(1)=1;
Phi_0_s(2)=1+2*s1/(-s2);
for k=3:N
Phi_0_s(k)=((2*k-3)*Phi_0_s(2)*Phi_0_s(k-1)-(k-2)*Phi_0_s(k-2))/(k-1);
end
Phi_0_s=Phi_0_s';
%% Shape Function for the Brain TimeDelay Part
Phi_BTD_s(1)=1;
Phi_BTD_s(2)=1+2*s2/(-s2);
for k=3:N
Phi_BTD_s(k)=((2*k-3)*Phi_BTD_s(2)*Phi_BTD_s(k-1)-(k-2)*Phi_BTD_s(k-2))/(k-1);
end
Phi_BTD_s=Phi_BTD_s';
%% Shape Function for the Exo TimeDelay Part
Phi_ETD_s(1)=1;
Phi_ETD_s(2)=1+2*s3/(-s2);
for k=3:N
Phi_ETD_s(k)=((2*k-3)*Phi_ETD_s(2)*Phi_ETD_s(k-1)-(k-2)*Phi_ETD_s(k-2))/(k-1);
end
Phi_ETD_s=Phi_ETD_s';
end
function [M,C]=M_C(N,Time_Delay_Bra)
Delta=zeros(N,N);
M=zeros(N,N);
C=zeros(N,N);
for i=1:N
for j=1:N
if i==j
Delta(i,j)=1;
else
Delta(i,j)=0;
end
end
end
for i=1:N
for j=1:N
M(i,j)=(Time_Delay_Bra*Delta(i,j))/(2*i-1);
if i<j
if rem(i+j, 2) == 1
C(i,j)=2;
else
C(i,j)=0;
end
end
end
end
end
function [L]=Evaluation(KP1,KD1,alpha,Phi_0_s,Phi_BTD_s,Phi_ETD_s,M,C,Zeta3,Kp_Bra,Kd_Bra)
kp_exo=KP1;
kd_exo=KD1;
kp_bra=Zeta3*Kp_Bra;
kd_bra=Zeta3*Kd_Bra;
%% G1&G2
G1=alpha*Phi_0_s'-kp_exo*Phi_ETD_s'-kp_bra*Phi_BTD_s';
G2=-kd_bra*Phi_BTD_s'-kd_exo*Phi_ETD_s';
%% C3
C3=Phi_0_s'*inv(M)*Phi_0_s;
%% X Matrix
X1=(Phi_0_s*Phi_0_s')/C3;
X2=-((Phi_0_s*Phi_0_s'/M)*C)/C3;
X3=(Phi_0_s*G1)/C3;
X4=(Phi_0_s*G2-(Phi_0_s*Phi_0_s'/M)*C)/C3;
%% L Matrix
L1=C/M+X2/M;
L2=X1/M;
L3=X3/M;
L4=C/M+X4/M;
L=[L1 L2;L3 L4];
end
0 comentarios
Respuesta aceptada
darova
el 5 de Ag. de 2021
Here is the problem. You are redefining the variable inside for loop and it has (1) element again
Más respuestas (0)
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!