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

 채택된 답변

Image Analyst
Image Analyst 2014년 11월 18일

0 개 추천

Well you could tell us the values you used for f, xL, xR, tol when you called it. And you can use the debugger to figure out why "e" never falls below "tol". Using the debugger yourself will be your fastest course of action , rather than trying to debug it via back-and-forth Answers forum postings, which can take hours.

추가 답변 (2개)

per isakson
per isakson 2014년 11월 18일
편집: per isakson 2014년 11월 19일

0 개 추천

I reformatted your function.
Neither e nor tol is changed in the while-loop. If &nbsp e > tol &nbsp 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
My 2025년 12월 21일

0 개 추천

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)

카테고리

도움말 센터File Exchange에서 Physics에 대해 자세히 알아보기

질문:

2014년 11월 18일

답변:

My
2025년 12월 21일

Community Treasure Hunt

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

Start Hunting!

Translated by