我试图在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);
答案 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);
请注意,您的函数必须位于当前工作目录中,即运行脚本的目录。