MatLab功能 - 第一行出错是没有理由的?

时间:2014-05-27 14:37:13

标签: matlab

我试图编写一个使用二分法找到函数根的代码。

我遇到的问题是,当我运行该功能时,我收到错误:

  

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)因为我知道该函数的根源并且我正在尝试测试它。

1 个答案:

答案 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;