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

1 回表示 (過去 30 日間)
omar alqubori
omar alqubori 2019 年 7 月 6 日
コメント済み: omar alqubori 2019 年 7 月 8 日
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 件のコメント
Walter Roberson
Walter Roberson 2019 年 7 月 7 日
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 2019 年 7 月 7 日
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
infinity 2019 年 7 月 7 日
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.
  1 件のコメント
omar alqubori
omar alqubori 2019 年 7 月 8 日
Dear,
Thank you so much.
You are too smart

サインインしてコメントする。

その他の回答 (1 件)

Walter Roberson
Walter Roberson 2019 年 7 月 7 日
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.

カテゴリ

Help Center および File ExchangeDesign Condition Indicators Interactively についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by