以下只是一个简单的例子来概括和说明我遇到的问题。
如果我有如下功能:
function newtraph(initialguess,funct,dfunct)
ht = funct(initialguess);
if abs(ht) < 10^(-6)
disp(initialguess); return
elseif abs(ht) > 10^6
disp('Fix Guess'); return
end
newtraph(initialguess-(ht/dfunct(initialguess)), funct, dfunct);
退出的唯一方法(我知道)是通过使用这些 return 语句。但是,我想将此类函数的输出分配给基础工作区中的变量。我想做一些类似的事情:
function out = newtraph(initialguess,funct,dfunct)
ht = funct(initialguess);
if abs(ht) < 10^(-6)
out = initialguess; return
elseif abs(ht) > 10^6
disp('Fix Guess'); return
end
newtraph(initialguess-(ht/dfunct(initialguess)), funct, dfunct);
这不起作用,return
阻止分配。
Output argument "out" (and maybe others) not assigned
我对解决方案的一些想法是使用全局变量或evalin
. 但是有没有我想念的更简单的方法。我只想将这种风格的函数的输出传递回基本工作区?
一个测试用例,以防万一:
funct=@(x) -x-cos(x); dfunct=@(x) sin(x)-1; initialguess=1;
谢谢你的时间。
好吧,我是个白痴。这只是忘记了最终分配的情况:
function out = newtraph(initialguess,funct,dfunct)
ht = funct(initialguess);
if abs(ht) < 10^(-6) %Tolerance
out = initialguess; return
elseif abs(ht) > 10^6
out=0; return
end
out = newtraph(initialguess-(ht/dfunct(initialguess)), funct, dfunct);
感谢您的快速帮助!