필터 지우기
필터 지우기

index out of bounds error

조회 수: 2 (최근 30일)
soloby
soloby 2015년 7월 1일
답변: Brendan Hamm 2015년 7월 1일
Hey all, my code looks something like this.
clear
clc
x = -10:0.1:10;
f1 = trapmf(x,[-2 0 0 2]);
f2 = trapmf(x,[1 3 3 5]);
kvals = 0.05:0.05:1;
for kidx = 1 : length(kvals)
k = kvals(kidx);
index1 = find(abs(f1-k)<10^(-10));
Xidx1{kidx} = x(index1);
Xidx1{20} = [0 0];
index2 = find(abs(f2-k)<10^(-10));
Xidx2{kidx} = x(index2);
Xidx2{20} = [0 0];
A(kidx) = Xidx1{kidx}(1);
B(kidx) = Xidx1{kidx}(2);
C(kidx) = Xidx2{kidx}(1);
D(kidx) = Xidx2{kidx}(2);
end
It works perfectly for what it is, getting lower and upper bounds of my functions f1 and f2.
But for some reason if I change my f1 or f2 functions to something else, I am getting a number of elements error?
Like f2 = trapmf(x,[1 3 3 4])
will give me an error, and I can't seem to figure out why that is?
the exact error message is
Attempted to access Xidx2.%cell(2); index out of bounds because
numel(Xidx2.%cell)=1.
Error in (line 22)
D(kidx) = Xidx2{kidx}(2);

채택된 답변

Brendan Hamm
Brendan Hamm 2015년 7월 1일
You are using the find function and then assigning values based on that to the variable Xidx2{kidx}. If you use the debugger with the change you mentioned you will notice that on the first run there is exactly one return value for the line:
index2 = find(abs(f2-k)<10^(-10));
Therefore the value being passed in the following assignment is a scalar:
Xidx2{kidx} = x(index2);
Therefore you get an error in the indexing that follows:
D(kidx) = Xidx2{kidx}(2);
There is nothing in this code which will guarantee that there are multiple values which satisfy the inequality:
abs(f2-k)<10^(-10)
You could use an if statement or try-catch block to perform this check for you.
When you encounter these errors, use the debugger , it is your friend.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by