Trying to use a for loop to calculate years with an IF statement but it seems to ignore it.
    조회 수: 7 (최근 30일)
  
       이전 댓글 표시
    
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
답변 (1개)
  Jan
      
      
 2021년 9월 13일
        
      편집: Jan
      
      
 2021년 9월 13일
  
      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
  Jan
      
      
 2021년 9월 13일
				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.
참고 항목
카테고리
				Help Center 및 File Exchange에서 Axis Labels에 대해 자세히 알아보기
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


