matlab中的嵌套函数错误

时间:2016-01-18 05:25:57

标签: matlab

我试图在MATLAB中使用连续替换来求解2个方程。但是,我得到一个嵌套函数错误(函数NLSS),即使该函数没有嵌套。这是代码:

X=[0.75 0.25]; %N-dimensional array, first guess then solution

Y=[0 0];

G(1)=(sqrt(1-(X(2))^2)); %right hand side functions
G(2)=1-X(1); %right hand side functions

MAXIT=10;

ITEST=1;

function [X,counter] =NLSS(X,Y);
    while ITEST==1
        counter=0;
        counter=counter+1;
        X(1)=(sqrt(1-(X(2))^2));
        X(2)=1-X(1);

            if abs(Y(1)-X(1))<0.00000001
                ITEST=3;
            end

            if counter>MAXIT
                ITEST=2;
            end

        Y(1)=X(1);
        Y(2)=X(2);        

    end;
end;

fprintf('answer for X1 is %d  and X2 is %d and ITEST is %d.\n',X(1),X(2),ITEST);
fprintf('number of interations is %d.\n',counter);

1 个答案:

答案 0 :(得分:3)

该函数是嵌套的,因为在使用function关键字之前有代码。在MATLAB中,您无法在脚本中使用函数。您可以将函数嵌套在另一个函数中,并且可以使用本地函数,该函数在另一个函数之后声明。函数必须位于文件中(强烈建议文件名与函数名称匹配),该文件的第一行是function ... = ...(...)行。 See the docs了解更多信息。

要修复错误,请使用以下代码创建名为 NLSS.m 的文件

function [X,ITEST,counter] =NLSS(X,Y,ITEST,MAXIT);
    while ITEST==1
        counter=0;
        counter=counter+1;
        X(1)=(sqrt(1-(X(2))^2));
        X(2)=1-X(1);

            if abs(Y(1)-X(1))<0.00000001
                ITEST=3;
            end

            if counter>MAXIT
                ITEST=2;
            end

        Y(1)=X(1);
        Y(2)=X(2);        

    end
end

然后将原始脚本更改为

X=[0.75 0.25]; %N-dimensional array, first guess then solution

Y=[0 0];

G(1)=(sqrt(1-(X(2))^2)); %right hand side functions
G(2)=1-X(1); %right hand side functions

MAXIT=10;

[X,ITEST,counter] =NLSS(X,Y,ISTEST,MAXIT);

fprintf('answer for X1 is %d  and X2 is %d and ITEST is %d.\n',X(1),X(2),ITEST);
fprintf('number of interations is %d.\n',counter);

请注意,您的函数必须位于当前工作目录中,即运行脚本的目录。