다음은 일반적인 문제를 일반화하고 설명하기위한 간단한 예입니다. 나는 다음과 같은 기능이있는 경우matlab에서 재귀 함수 호출 중단
:
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);
유일한 방법 (내가 알고 오전)을 종료하기를 그 반환 문을 사용하는 것입니다. 그러나,이 다양한 함수의 출력을 기본 작업 영역의 변수에 할당하려고합니다. 내가 좋아하는 어떤 일을 할 :
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
가 할당되는으로부터 방지 할 수 있습니다.
솔루션에 대한 아이디어 중 일부는 전역 또는 evalin
을 사용하고 있습니다. 그러나 제가 누락 된 간단한 방법이 있습니다. 이 스타일의 함수 출력을 기본 작업 영역으로 다시 전달하기 만하면됩니까? 다만 경우에
테스트 케이스 : 시간에 대한
[email protected](x) -x-cos(x); [email protected](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);
감사합니다.