2013-09-21 2 views
3

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

Неопределенная функция или переменная «г».

Я хочу определить 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; 

ответ

3

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

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

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

+0

Вы также можете передать дескриптор функции M файла пропускания @funcname , – chappjc

+0

Будьте VEWY, VEWY внимательно следите за этим советом. Обратите внимание, что код P0W показывает использование/not ./ so, если он вызван с вводом вектора или массива, это приведет к совершенно неожиданным результатам. Тогда вы следующий мучительный вопрос будет спрашивать, почему ваш код не работает. Намного лучше использовать технологию ./ на таких вещах, даже если вы обычно ожидаете передать ее скалярный ввод, потому что в один прекрасный день вы этого не сделаете. –

Смежные вопросы