Loop does not work

7 vues (au cours des 30 derniers jours)
Mehmet
Mehmet le 30 Déc 2023
Commenté : Torsten le 31 Déc 2023
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 commentaires
Torsten
Torsten le 30 Déc 2023
Modifié(e) : Torsten le 30 Déc 2023
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 le 31 Déc 2023
If I is a matrix, then why do you work with it as a vector ?

Connectez-vous pour commenter.

Réponse acceptée

Hassaan
Hassaan le 30 Déc 2023
Modifié(e) : Hassaan le 30 Déc 2023
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 commentaire
Mehmet
Mehmet le 30 Déc 2023
thank you for answering. but i couldn't understand that why the truncation of the matrix made it work?

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by