我制作了一个节目,
function bisection;
x1=input('enter the first value=')
x2=input('enter the second value=')
%f3=[];
for x=1:20
%x=1;
x3=(x1+x2)/2;
while x3-x1 >= 0.001
f3(x)=x3^3 + x3^2 - 3*x3 - 3;
f1(x)=x1^3 + x1^2 - 3*x1 - 3;
if ((f3(x)*f1(x)) < 0)
x2=x3;
else
x1=x3;
end
break
end
format long
f3'
disp('The root is found to be =');
x3
end
。 。 。 。 。 程序计算用户给出的区间(x1,x2)的函数,
我的程序编译并执行但很少重复,直到循环完成,我想在使用条件时实现所需的值时停止进一步打印循环。
答案 0 :(得分:3)
Bisection method在以下方法中实现。要分析的函数以及间隔边界作为参数传递。
function bisection(f, x1, x2)
if f(x1)*f(x2) < 0 % check precondition sign(f(x1)*f(x2)) = -1
while abs(x2-x1) >= 0.001
x3=(x1+x2)/2;
if ((f(x1)*f(x3)) < 0)
x2 = x3;
elseif ((f(x2)*f(x3)) < 0)
x1 = x3;
else
break
end
end
fprintf('The root is found to be = %.3f\n', x3);
else
fprintf('f(x1) and f(x2) must have opposite signs!\n')
end
Runner 是您的根查找任务的一部分。
format long
f = @(x) x^3 + x^2 - 3*x - 3;
x1=input('enter the first value=');
x2=input('enter the second value=');
bisection(f, x1, x2)