Ниже приведен простой пример для обобщения и иллюстрации проблемы, которую я имею.Нарушение рекурсивных вызовов функций в 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
предотвращает выход от назначения.
Output argument "out" (and maybe others) not assigned
Некоторые идеи у меня есть для решения используют глобалам или 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);
Благодарим за помощь!