Filter löschen
Filter löschen

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

2 Ansichten (letzte 30 Tage)
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
  7 Kommentare
Walter Roberson
Walter Roberson am 7 Jul. 2019
Suppose you delete entry 5 out of 7. Then afterwards the array would be only 6 long. But you did not adjust the loop bounds, so when you reach the original 7 your index would be out of range. Also if you think about the situation more closely you will see that the entry that was in location 6 and which falls down to occupy location 5, is not having its value examined.
omar alqubori
omar alqubori am 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.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

infinity
infinity am 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.

Weitere Antworten (1)

Walter Roberson
Walter Roberson am 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.

Kategorien

Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by