Index in position 1 exceeds array bounds (must not exceed 1).
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
omar alqubori
am 6 Jul. 2019
Kommentiert: omar alqubori
am 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
7 Kommentare
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.
Akzeptierte Antwort
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
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.
0 Kommentare
Siehe auch
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!