Index exceeds the number of array elements. Index must not exceed 0.

조회 수: 6 (최근 30일)
Yogesh Kumar
Yogesh Kumar 2022년 4월 19일
댓글: Torsten 2022년 4월 19일
clc
close all
R=0.05; % radius of the bearing
X=2*pi*R; % circumference of the bearing
Z=0.1; % length of the bearing
M=200;
N=64;
delx=1/M;
delz=1/N;
xbar=0:delx:1;
zbar=0:delz:1;
theta=xbar*2*pi;
C=0.0001; %clearence
E=0.3; %eccentricity ratio
Ha=0.00009;
nx=6;
nz=6;
const=(R^2)/(Z^2);
fun_hbar = @(theta,z)(1+E*cosd(theta))-((Ha/C)*sind(pi*((theta*nx/2*pi)-1)).^2*sind(pi*(z*nz-1)).^2);
deltheta=theta(end)-theta(end-1);
h_bar=fun_hbar;
for theta=1:M
for z=1:N
H(theta,z)=(1+E*cosd(theta))-((Ha/C)*sind(pi*((theta*nx/2*pi)-1)).^2*sind(pi*(z*nz-1)).^2);
end
end
fun_hhalf = @(h)(-((h(2)-h(1))/2) + h(2));
fun_hhalf2 = @(h)(((h(2)-h(1))/2) + h(1));
h_halfminus=zeros(size(xbar,2),1);
for i=2: length(h_bar)-1
h_halfminus(i)=fun_hhalf([h_bar(i-1) h_bar(i)]);
end
h_halfplus=zeros(size(xbar,2),1);
for i=2: length(h_bar)-1
h_halfplus(i)=fun_hhalf2([h_bar(i) h_bar(i+1)]);
end
h_halfmius=zeros(size(zbar,2),1);
for j=2: length(h_bar)-1
h_halfminus(j)=fun_hhalf([h_bar(j-1) h_bar(j)]);
end
h_halfplus=zeros(size(zbar,2),1);
for j=2: length(h_bar)-1
h_halfplus(j)=fun_hhalf2([h_bar(j) h_bar(j+1)]);
end
hm1=h_halfminus(i).^3;
hp1=h_halfplus(i).^3;
hm2=h_halfminus(j).^3;
hp2=h_halfplus(j).^3;
const1=((hp1+hm1)*delz^2+const*deltheta^2*(hp2+hm2));
ITER=1000;
p_bar=zeros(length(xbar),length(zbar));
A1_fun=@(hm1,hp1,hm2,hp2)(hp1*delz^2/const1);
A2_fun=@(hm1,hp1,hm2,hp2)(hm1*delz^2/const1);
A3_fun=@(hm1,hp1,hm2,hp2)(hp2*deltheta^2*const/const1);
A4_fun=@(hm1,hp1,hm2,hp2)(hm2*const*deltheta^2/const1);
A5_fun=@(hm1,hp1,hm2,hp2)(E*sin(theta)*deltheta^2*delz^2/const1);
p_init=p_bar;
error_target = 0.0000001;
h = waitbar(0,'Please wait...');
for k=1:ITER
for j=2:size(p_bar,2)-1
for i=2:size(p_bar,2)-1
p_bar(i,j)=A1_fun(hp1(i),hm1(i),hp2(j),hm2(j))*p_bar(i+1,j)+.....
A2_fun(hp1(i),hm1(i),hp2(j),hm2(j))*p_bar(i-1,j)+.....
A3_fun(hp1(i),hm1(i),hp2(j),hm2(j))*p_bar(i,j+1)+.....
A4_fun(hp1(i),hm1(i),hp2(j),hm2(j))*p_bar(i,j+1)-.....
A5_fun(theta(i),hp1(i),hm1(i),hp2(j),hm2(j));
end
end
error = (sum(p_bar(:)) - sum(p_init(:)))/sum(p_bar(:));
p_init = p_bar;
if error < error_target
break;
end
waitbar(k / ITER)
end
close(h);
in this at line where p_bar(i,j) starts it gives the error Index exceeds the number of array elements. Index must not exceed 0.
  댓글 수: 4
Walter Roberson
Walter Roberson 2022년 4월 19일
The error is indexing an empty vector according to the error message, but theta would not be empty as a result of the loop. But hp1 would be empty for the reasons that I described in my answer.
Torsten
Torsten 2022년 4월 19일
Ok, then theta(i) would be the next error after repairing hm1,hm2,hp1,hp2.
And unfortunately, many errors follow according to my tests.

댓글을 달려면 로그인하십시오.

답변 (1개)

Walter Roberson
Walter Roberson 2022년 4월 19일
fun_hbar = @(theta,z)(1+E*cosd(theta))-((Ha/C)*sind(pi*((theta*nx/2*pi)-1)).^2*sind(pi*(z*nz-1)).^2);
deltheta=theta(end)-theta(end-1);
h_bar=fun_hbar;
fun_hbar is an anonymous function. h_bar is assigned a copy of the pointer to the anonymous function.
for i=2: length(h_bar)-1
The length() of an anonymous function is 1, so you are asking for i=2:1-1 which is i=2:0 .
In MATLAB, when the increment is positive and the upper bound is less than the lower bound, the loop control variable is assigned [] (the empty vector); the same is true for negative increment when the upper bound is greater than the lower bound.
hm1=h_halfminus(i).^3;
i is the last value it was assigned by the for loop; as indicated above, that means that i will be [] because of the bounds issue. So you are indexing some variables at the empty vector, i and getting out empty vectors.

카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by