# Index in position 1 exceeds array bounds (must not exceed 1).

24 views (last 30 days)
omar alqubori on 6 Jul 2019
Commented: omar alqubori on 8 Jul 2019
Hello,
I have the Brownian motion model and I added In the plot a circle with radus R and center (X,Y). However I have two for loops for x and y to calcualte the model and I want to delete some points if they staisfies this condition:
(x(i)-X)^2 +(y(i)-Y)^2<r^2
When I run the code always gave this massage (Index in position 1 exceeds array bounds (must not exceed 1).) Sometimes is change the number such as ( ndex in position 20 exceeds array bounds (must not exceed 29).)
How I let inside the circle empty.
That what I wrote
please anyone help me for my problem with explain how I can solve this problems if I have simoilar in the future.
T=100;
Np=10000;
DX=20;
%Circle --------------------
A=10;
B=10;
R=30;
th=0:pi/100:2*pi;
X=R*cos(th)+A;
Y=R*sin(th)+B;
%Models
for j=1:m
for i=1:T
x(i+1,j)=x(i,j)+DX*randn();
y(i+1,j)=y(i,j)+DX*randn();
% Condition--------
COND= (x(i+1,j)-X).^2+(y(i+1,j)-Y).^2;
CONDD=int16(trap);
if trap <r^2
x(i+1,j)=[];
y(i+1,j)=[];
end
end
end
omar alqubori on 7 Jul 2019
I means by ""cancell the condition"?" If I delete
COND= (x(i+1,j)-X).^2+(y(i+1,j)-Y).^2;
CONDD=int16(COND);
CONDD<=R^2;
x(i,:)=[];
y(i,:)=[];
This means that if my code like this
T=100;
m=10;
A=10;
B=10;
R=30;
th=0:pi/100:2*pi;
X=R*cos(th)+A;
Y=R*sin(th)+B;
x = zeros(1,m);
y = zeros(1,m);
DX=20;
for j=1:m %Number of particle
for i=1:T %Number of steps
x(i+1,j)=x(i,j)+DX*randn();
y(i+1,j)=y(i,j)+DX*randn();
end
end
plot(x,y,'k.');
hold on;
plot(X,Y,'r');
title (['Time = ', num2str(T),', Particles = ', num2str(m)]);
xlabel("space x");
ylabel("space y");
hold off;
It works but I want appliy this conditin (x(i+1,j)-X)^2-(y(i+1,j)-Y)^2<=R^2 if the condition is satisfies I want delete the points insdie the cyrcle.

infinity on 7 Jul 2019
Hello,
There are several approaches that you can try to eleminate the point inside the circle. Here, I can show you a solution
T=100;
m=10;
A=10;
B=10;
R=30;
th=0:pi/100:2*pi;
X=R*cos(th)+A;
Y=R*sin(th)+B;
x = zeros(1,m);
y = zeros(1,m);
DX=20;
for j=1:m %Number of particle
for i=1:T %Number of steps
xnext = x(i,j)+DX*randn();
ynext = y(i,j)+DX*randn();
cond = norm([xnext-A,ynext-B]);
while (cond < R)
xnext = x(i,j)+DX*randn();
ynext = y(i,j)+DX*randn();
cond = norm([xnext-A,ynext-B]);
end
x(i+1,j)=xnext;
y(i+1,j)=ynext;
end
end
plot(x(2:end,:),y(2:end,:),'k.');
hold on;
plot(X,Y,'r');
title (['Time = ', num2str(T),', Particles = ', num2str(m)]);
xlabel("space x");
ylabel("space y");
hold off;
Now, you will get rid of the previous error.
omar alqubori on 8 Jul 2019
Dear,
Thank you so much.
You are too smart

Walter Roberson on 7 Jul 2019
The only way matlab has to delete a single entry out of a multidimensional array is to convert the array to a column vector through linear indexing and do the deletion, leaving a column vector behind. A second index greater than 1 would then be out of range.