Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MatLab函数-第一行中的错误,没有原因吗?_Matlab - Fatal编程技术网

MatLab函数-第一行中的错误,没有原因吗?

MatLab函数-第一行中的错误,没有原因吗?,matlab,Matlab,我正在尝试编写一个代码,使用二分法查找函数的根 我遇到的问题是,当我运行该函数时,会出现以下错误: 对分错误(第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;

我正在尝试编写一个代码,使用二分法查找函数的根

我遇到的问题是,当我运行该函数时,会出现以下错误:

对分错误(第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
函数[flag,root]=对分(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;
%相反的符号
如果y<0&&z>0
flag=['在[',num2str(a),',',,num2str(B),'].]中存在根目录;
m=(A+B)/2;
testm=a*m^3+b*m^2+c*m+d;
而testm<0
m=(A+m)/2;
testm=a*m^3+b*m^2+c*m+d;
如果testm==0
根=m;
打破
结束
结束
其他((a*a^3+b*a^2+c*a+d)<0&(a*b^3+b*b^2+c*b+d)>0)
flag=['在[',num2str(a),',',,num2str(B),'].]中存在根目录;
m=(A+B)/2;
testm=a*m^3+b*m^2+c*m+d;
而testm<0
m=(B+m)/2;
testm=a*m^3+b*m^2+c*m+d;
如果testm==0
根=m;
打破
结束
结束
其他((a*a^3+b*a^2+c*a+d)>0&(a*b^3+b*b^2+c*b+d)>0)
flag=['在[',num2str(a),',',,num2str(B),'].]中不存在根目录;
根='不存在';
其他((a*a^3+b*a^2+c*a+d)<0&(a*b^3+b*b^2+c*b+d)<0)
flag=['在[',num2str(a),',',,num2str(B),'].]中不存在根目录;
根='不存在';
结束
结束
编辑: 我正在输入(0,1,0,-2,0,4),因为我知道该函数的根,并且正在尝试测试它。

我尝试了

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 = NaN;

调用函数的参数
a、b、c、d、a、b
是什么?确切的错误是什么(从行号上看)?我写的错误正是我从中得到的,这就是为什么我如此困惑。我也会遇到一些错误,没有定义输出变量,但这只是因为代码无法运行足够长的时间来定义它们!我正在输入(0,1,0,-2,0,4),因为我知道该函数的根,并且正在尝试测试它。它对我有效!尝试清理工作空间。你有可能有两个同名的函数吗?我试图清除所有内容,但它仍然没有运行。。。我所在的目录中没有其他同名函数。你试过丹尼斯说的吗?在MATLAB的命令提示符中键入
edit bisect
?你能试着去掉前两行,看看它是否运行吗?只要做
y=1;z=1。你得到了什么?如果删除函数中的所有内容,也是一样的。如果将函数中的所有内容复制粘贴到新脚本中,重命名并保存,会发生什么情况?这可能是最好的办法。