Loop does not work

7 ビュー (過去 30 日間)
Mehmet
Mehmet 2023 年 12 月 30 日
コメント済み: Torsten 2023 年 12 月 31 日
format long
tolerance = 10^-15;
y=0.1;
h=[y,y/2,y/4,y/8,y/16];
x=0;
I = (exp(x+h)-exp(x))./h;
z = length(h);
for n = 1:z-1 ;
while m < z-n
I(m) = (4/3) * I(m+1) - (1/3) * I(m);
m = m+1;
end
end
I
This is the code and i expected that the I matrix should go into the loop several times and as a result I should see 1x1 matrix but the loop stops after first iteration. What could be the problem?
  3 件のコメント
Torsten
Torsten 2023 年 12 月 30 日
編集済み: Torsten 2023 年 12 月 30 日
Is this Richardson extrapolation ? Or what are you trying to do in your code ?
Shouldn't I be a lower triangular matrix in this case instead of a vector ?
Torsten
Torsten 2023 年 12 月 31 日
If I is a matrix, then why do you work with it as a vector ?

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

採用された回答

Hassaan
Hassaan 2023 年 12 月 30 日
編集済み: Hassaan 2023 年 12 月 30 日
You haven't initialized m before the loop starts, and you're using it as a loop index. This can lead to unexpected behavior or errors. Furthermore, your while loop condition m < z-n might not be behaving as expected, especially if m is not properly initialized and updated. Here's are some suggestions:
  1. Initialize m: Before entering the while loop, you should initialize m to a starting value. Typically, for MATLAB indexing, you would start with m = 1.
  2. Reset m in each iteration: You need to reset the value of m for each iteration of your n loop. If you don't reset it, m will eventually exceed z-n, and the inner loop won't run in subsequent iterations of the outer loop.
  3. Adjust the loop conditions: Ensure that the loop runs as many times as you expect and that the indices used inside the loop do not exceed the dimensions of your I array.
format long
tolerance = 10^-15;
y = 0.1;
h = [y, y/2, y/4, y/8, y/16];
x = 0;
I = (exp(x + h) - exp(x)) ./ h;
z = length(h);
for n = 1:(z-1)
m = 1; % Initialize m at the beginning of each n loop
while m <= (z - n) % Ensure m doesn't exceed the updated length of I
I(m) = (4/3) * I(m + 1) - (1/3) * I(m);
m = m + 1;
end
I = I(1:end-1); % After updating I, truncate the last element
end
disp(I)
1.000617319458443
------------------------------------------------------------------------------------------------------------------------------------------------
If you find the solution helpful and it resolves your issue, it would be greatly appreciated if you could accept the answer. Also, leaving an upvote and a comment are also wonderful ways to provide feedback.
  1 件のコメント
Mehmet
Mehmet 2023 年 12 月 30 日
thank you for answering. but i couldn't understand that why the truncation of the matrix made it work?

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

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeLoops and Conditional Statements についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by