Неопределенная функция или переменная Matlab

Мне нужно написать алгоритм итерации с фиксированной точкой, и он в основном закодирован, но я сталкиваюсь с этой ошибкой:

Неопределенная функция или переменная 'g'.

Я хочу определить g как g(x) = 1/2*(1+5/x). Однако я Matlab n00b и не знаю, как это сделать. Любая помощь будет высоко оценена, спасибо.

  function [y,k] = fixedpoint(g,p0,tol,max1)
          for k=1:max1
          p = g(p0);
          err = abs(p-p0);
          abserr = abs(sqrt(5)-p);
          ratioerr = abserr/(abs(sqrt(5)-p0));

          if (err<tol)
             break
          end
          p0 = p;

  end
  if (k==max1)
      disp('The algorithm did not converge')
  end
  y = p;

person user2803016    schedule 21.09.2013    source источник


Ответы (1)


Вы можете определить g как анонимную функцию

g = @(x)1/2*(1+5/x)

Затем вызовите свою функцию fixedpoint обычным способом.

person P0W    schedule 21.09.2013
comment
Вы также можете передать дескриптор функции M-файла, передав @funcname. - person chappjc; 22.09.2013
comment
Будьте ОЧЕНЬ, ОЧЕНЬ осторожны, следуя этому совету. Обратите внимание, что код P0W показывает использование / not ./ поэтому, если он вызывается с вводом вектора или массива, он даст совершенно неожиданные результаты. Тогда следующим мучительным вопросом будет вопрос, почему ваш код не работает. Гораздо лучшая техника программирования - использовать ./ для подобных вещей, даже если вы обычно ожидаете передать скалярный ввод, потому что однажды вы этого не сделаете. - person ; 22.09.2013