# Turning my function into an infinite loop

조회 수: 3 (최근 30일)
Faris Sulam 2021년 1월 4일
댓글: Faris Sulam 2021년 1월 4일
Hi guys,
I wanted to ask of you about this code. I made a Simpson's rule code that does work when i place in the variables but now i want to edit it so that instead of placing iterations as a variable, the function would continuously iterate until it reaches a certain accpetable error.
function [ s ] = Simpson13( f,a,b,M)
h=(b-a)/(2*M);
s1=0;
s2=0;
for k=1:M;
x=a+h*(2*k-1);
s1=s1+f(x);
end
for k=1:(M-1);
x=a+h*2*k;
s2=s2+f(x);
end
s=h*(f(a)+f(b)+4*s1+2*s2)/3;
disp(s)
end
My plan is to replace all of the M into 'inf' and then putting an error statement afterwards to stop the infinite loop
TolMax=0.01; %the acceptable error
TolCur= abs(s(k)-s(k-1))/(s(k)); %I assume this is how one would calculate the error of the current value with the previous
if TolCur < TolMax
break
end
But according to matlab, i cant do this. Can someone give me any pointers to do this?

댓글을 달려면 로그인하십시오.

### 채택된 답변

Mischa Kim 2021년 1월 4일
편집: Mischa Kim 2021년 1월 4일
Hi Faris, instead of a for loop use a while loop with a condition like
while abs(s_k - s_k1) > TolMax
end
Above the loop you need to assign values to s_k and s_k1 so that you enter the loop.
##### 댓글 수: 3이전 댓글 1개 표시이전 댓글 1개 숨기기
Mischa Kim 2021년 1월 4일
My assumption was that your idea was to decrease the step size (by increasing M) until a certain accuracy is achieved. In this case you could simply do something like the below. The while loop continuously calls your function until TolMax is reached.
f = @(x) cos(x); % this is just an example equation
a = 0;
b = pi/2;
M = 10;
TolMax = 1e-10;
while (Simpson13(f,a,b,M)-Simpson13(f,a,b,M+1)) > TolMax
M = M + 1;
end
fprintf('Integral = %10.6e with tol = %10.6e reached with %d steps\n',...
Simpson13(f,a,b,M),TolMax,M);
Faris Sulam 2021년 1월 4일
Ah ok, your idea is way better, thanks

댓글을 달려면 로그인하십시오.

### 카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

### Community Treasure Hunt

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

Start Hunting!

Translated by