我使用了二分法的代码,它应该是有效的,不幸的是它不是,我不知道是什么问题。此代码还包括用户定义的精度和迭代次数的计数器。我得到的错误是代码中的最后一行:未定义的函数或变量'c'。
a=-5;
b=0;
tol = input('What precision would you like? ','s')
fa=a^3-20+exp(a);
fb=b^3-20+exp(b);
counter=1
while abs(b-a) > tol
c=(a+b)/2;
fx = c*c-2;
if fa*fc<0
b=c;
fb=fc;
elseif fb*fc<0
a=c;
fa=fc;
else
break
end
fprintf('Just finished iteration #%d\n', counter);
counter=counter+1;
end
x=c;
答案 0 :(得分:1)
由于您将input
作为字符串加载(带有s
参数),因此tol
变量将是一个字符数组。例如,为当前脚本输入1E-10
会将tol
定义为字符数组,while
构造中对表达式的第一次评估将等同于
>> abs(0 - -5) > '1E-10'
ans =
0 0 0 0 0
因此完全跳过while
循环。
因此,请从s
来电中移除input
,或将input
来电换入str2double
。