I have encountered this special error message many times before and still don't know, what is wrong with my general approach to loops.
Index in position 2 exceeds array bounds
1 回表示 (過去 30 日間)
古いコメントを表示
Hello,
i'm trying to add values to an already existing array (Profile_y). The last value of Profile_x is lager than the last value of Profile_y. I am calculating the difference and divide it by the average step size of the values to get the number of how many steps i need to add. After that i try to add the average stepsize MissingSteps-times to the vector, so that Profile_x and Profile_y should have the same endvalue after all.
Instead i'm getting the error:
Index in position 2 exceeds array bounds
The end operator must be used within an array index expression.
My code:
MissingSteps = floor((Profile_x(1,end) - Profile_y(1,end)) ./ (mean(diff(Profile_y))));
Profile_Y_new = [Profile_Y];
% Profile_Y_new(1,end+1:numel(Profile_Y_new) + MissingSteps) = 0;
k = 1;
for i = 1:MissingSteps
Profile_Y_new(1,end+k) = Profile_Y_new(1,end+k-1) + (mean(diff(Profile_Y)));
while k <= MissingSteps
k = k + 1;
end
end
8 件のコメント
Walter Roberson
2021 年 2 月 15 日
Those look okay.
When you are stopped at the error line, please command
Profile_Y_new(1,end+k-1)
(mean(diff(Profile_Y)))
Profile_Y_new(1,end+k) = 12345
and see where the error comes up. If it does not come up at all, try putting in the full line
Profile_Y_new(1,end+k) = Profile_Y_new(1,end+k-1) + (mean(diff(Profile_Y)));
and seeing what happens.
I'm wondering whether you have a syntax error in your program somewhere, an extra end statement, a [ opened that is not closed, something like that.
採用された回答
Jan
2021 年 2 月 15 日
編集済み: Jan
2021 年 2 月 15 日
Profile_Y_new(1,end+k) = Profile_Y_new(1,end+k-1) + (mean(diff(Profile_Y)));
This line must fail, because Profile_Y_new(1,end) is the last element of Profile_Y_new already. Then Profile_Y_new(1,end+k-1) tries to read an element behind the last element.
Remember that " end " is an abbreviation for the length of the concerned dimension. Then reading the element at end+k must fail for k > 0.
I assume you mean:
endIndex = size(Profile_Y_new, 2);
for i = 1:MissingSteps
Profile_Y_new(1,endIndex + k) = Profile_Y_new(1, endIndex + k - 1) + ...
(mean(diff(Profile_Y)));
Now endIndex is fixed before the loop, while the keyword "end" is adjusted dynamically to the current size.
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Creating and Concatenating Matrices についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!