False position infinite loop
Ältere Kommentare anzeigen
Hi there.
This function gets stuck in an infinite loop. Do you all have any suggestions for me?
function [R, E] = myFalsePosition(f, xL, xR, tol)
if sign (f(xL)) == sign(f(xR))
error 'you are arrested!!!'
end
yL = f(xL);
yR = f(xR);
new_x = ((xR*yL) - (xL*yR))/(yL - yR);
new_y = f(new_x);
e = abs(new_y);
E = e;
while e > tol
if f(xL)*f(new_x) > 0
xL = new_x;
yL = f(xL);
else
xR = new_x;
yR = f(xR);
end
end
new_x = ((xR*yL) - (xL*yR))/(yL - yR);
new_y = f(new_x);
R = [R new_x];
e = abs(new_y);
E = [E e];
end
Akzeptierte Antwort
Weitere Antworten (2)
per isakson
am 18 Nov. 2014
Bearbeitet: per isakson
am 19 Nov. 2014
0 Stimmen
I reformatted your function.
Neither e nor tol is changed in the while-loop. If   e > tol   is true when entering the loop it will remain true.
Possible, the end of the loop is not in the position, which you intended.
My
am 21 Dez. 2025
function p = myfalseposition(f,p0,p1,TOL,N0)
q0 = f(p0);
q1 = f(p1);
for i = 1:N0
% False Position formülü
p = p1 - q1*(p1-p0)/(q1-q0);
if abs(p-p1) < TOL
return
end
q = f(p);
if q*q1 < 0
p0 = p1;
q0 = q1;
end
p1 = p;
q1 = q;
end
disp('Method failed');
end
%Main
clear; clc;
f = @(x) cos(x) - x;
p0 = 0.5;
p1 = pi/2;
TOL = 1e-3;
N0 = 100;
p = myfalseposition(f,p0,p1,TOL,N0)
Kategorien
Mehr zu Physics finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!