Trying to use a for loop to calculate years with an IF statement but it seems to ignore it.
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
So the program is meant to stop if balance >= 500000 but it seems to soldier on until it runs out of months. Use of a for loop is required.
clear; close all; clc
balance(1) = 1000;
contribution = 1200;
M = 1; % month ticker
years = 12/M;
interest = 0.0025;
for M = 1:300
if balance(M) >= 50000 %balance(M)
end
M = M + 1; % you need to increment months + 1 every cycle
balance(M) = balance(M-1) + interest*balance(M-1) + contribution;
end
%Balance %This will display the final Balancefprintf('%g Months until $500000 reached\n', M);
fprintf('%g Years until $500000 reached\n', years);
format bank
plot(balance);
grid on
ytickformat('usd')
title('Saving 3% compound')
xlabel('Months')
ylabel('Saving balance')
0 Kommentare
Antworten (1)
Jan
am 13 Sep. 2021
Bearbeitet: Jan
am 13 Sep. 2021
Either
for M = 2:300
if balance(M) >= 50000 %balance(M)
break; % Leave the for M loop
end
% NOPE ! M = M + 1; % you need to increment months + 1 every cycle
balance(M) = balance(M-1) + interest*balance(M-1) + contribution;
end
or
for M = 2:300
if balance(M) < 50000 %balance(M)
% NOPE ! M = M + 1; % you need to increment months + 1 every cycle
balance(M) = balance(M-1) + interest*balance(M-1) + contribution;
end
end
If you do not know in advanve how log a loop runs, a while loop is nicer:
M = 2;
while M <= 300 && balance(M) < 50000
balance(M) = balance(M-1) + interest*balance(M-1) + contribution;
M = M + 1;
end
While the counter M must be increased in the while loop, this is done in the for loop automatically.
[EDITED] M starts at 2 now.
4 Kommentare
Jan
am 13 Sep. 2021
This looks strange:
M = 1; % month ticker
years = 12/M; % Are you sure that 12/1 is the number of years?!
% The usual definition is Months / 12
for M = 1:300
if balance(M) >= 500000 %balance(M)
break; % Leave the for M loop
end
% No! Do not increase the loop counter inside the
% body of a FOR loop:
% M = M + 1;
My code failed, because accessing balance(M - 1) requires the loop to start at M=2. I've edited my answer.
Label = max(balance) is not useful before the loop, because balance contains 1 value only.
Siehe auch
Kategorien
Mehr zu Labels and Annotations finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!