我试图编写一个使用二分法找到函数根的代码。
我遇到的问题是,当我运行该功能时,我收到错误:
bisect(第3行)出错。
我不确定为什么定义y是错误的?我在线看,它说我可能会混淆函数和脚本,但我不确定为什么在其他代码中我可以为此定义一个新变量,但在这个特定的一个中,我不能。
任何帮助?
function [flag,root] = bisect(a,b,c,d,A,B)
y = a*A^3 + b*A^2 + c*A + d;
z = a*B^3 + b*B^2 + c*B + d;
% Opposite Signs
if y < 0 && z > 0
flag = ['There exists a root in [',num2str(A),',',num2str(B),'].'];
m = (A+B)/2;
testm = a*m^3 + b*m^2 + c*m + d;
while testm < 0
m = (A+m)/2;
testm = a*m^3 + b*m^2 + c*m + d;
if testm == 0
root = m;
break
end
end
elseif ((a*A^3 + b*A^2 + c*A + d) < 0 && (a*B^3 + b*B^2 + c*B + d) > 0)
flag = ['There exists a root in [',num2str(A),',',num2str(B),'].'];
m = (A+B)/2;
testm = a*m^3 + b*m^2 + c*m + d;
while testm < 0
m = (B+m)/2;
testm = a*m^3 + b*m^2 + c*m + d;
if testm == 0
root = m;
break
end
end
elseif ((a*A^3 + b*A^2 + c*A + d) > 0 && (a*B^3 + b*B^2 + c*B + d) > 0)
flag = ['There does not exist a root in [',num2str(A),',',num2str(B),'].'];
root = 'Does not Exist';
elseif ((a*A^3 + b*A^2 + c*A + d) < 0 && (a*B^3 + b*B^2 + c*B + d) < 0)
flag = ['There does not exist a root in [',num2str(A),',',num2str(B),'].'];
root = 'Does not Exist';
end
end
我正在输入(0,1,0, - 2,0,4)因为我知道该函数的根源并且我正在尝试测试它。
答案 0 :(得分:1)
我试过
bisect(0,1,0,-2,0,4)
得到了:
ans =
There exists a root in [0,4].
这基本上意味着代码本身可以工作。
然而,当我尝试
时[flag,root] = bisect(0,1,0,-2,0,4)
我收到错误,因为root
未定义。解决方案是确保始终定义它。一种简单的方法是在顶部附近添加一条线,如
root = NaN;