Index in position 1 exceeds array bounds (must not exceed 1).
Show older comments
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 Comments
infinity
on 6 Jul 2019
Hello,
Several variables are missing in your code, for example m, x, y, trap. Can you show us the code that we can understand welll?
omar alqubori
on 7 Jul 2019
infinity
on 7 Jul 2019
Hello,
It is clearly that you declare "x = zeros(1,m)" i.e, x is vector having 1 row and m column, but in the loop for, you try to acess x(i+1,j) with i = 1:T. Therefore, if i = 1, then i + 1 = 2 and you will not able to acess the element x(2,j) since x has only 1 row.
omar alqubori
on 7 Jul 2019
infinity
on 7 Jul 2019
Hello,
What do you mean "cancell the condition"? In your code, there was no condition by using "if" statement. Can you also show your code without errors?
Walter Roberson
on 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
on 7 Jul 2019
Accepted Answer
More Answers (1)
Walter Roberson
on 7 Jul 2019
0 votes
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.
Categories
Find more on Creating and Concatenating Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!