2013-12-03 2 views
0

Я пытаюсь закодировать функцию, вычисляющую разностные отношения. Мне нужно это для полиномиальной интерполяции. Данные узлы x = linspace(a,b,n+1), значения функций в узлах y = func(x) Я хочу найти значения разностных коэффициентов f[x0], f[x_0,x_1], ..., f[x_0,x_1,...,x_n]. Для расчета f[x_0,x_1,...,x_n] мне понадобится f[x_0,x_1,...,x_(n-1)] и т. Д., Поэтому было бы неплохо сохранить промежуточные шаги на моем пути до f[x_0,x_1,...,x_n], так что на моем пути к f[x_0,x_1,...,x_n] я сохраню предыдущие разностные факторы как элементы вектора.Сохранение промежуточных значений переменных рекурсивной функции

Может ли кто-нибудь сказать мне, как исправить мой код, чтобы сохранить соответствующие значения коэффициентов разности? Вот код:

function [fx, all_fx] = ilo2(a,b,x,y,fx,all_fx) 
    if a == b 
     fx(end+1) = y(a); 
     if a == 1 
      all_fx(end+1) = fx(end); 
     end 
     return 
    end 
    a; 
    b; 
    [c, all_fx] = ilo2(a+1,b,x,y,fx,all_fx); 
    [d, all_fx] = ilo2(a,b-1,x,y,fx,all_fx); 
    fx(end+1) = (c-d)/(b-a); 
    if a == 1 
     all_fx(end+1) = fx(end); 
    end 
end 

В разностных отношениях мне нужно находятся под «if a == 1» состоянием.

ответ

0

Хорошо, я думаю, что я установил его:

function [all_fx,fx] = ilo(a,b,x,y,all_fx,fx) 
    if a == b 
     fx(end+1) = y(a); 
     if a == 1 
      all_fx(end+1) = fx(end); 
     end 
     return 
    end 
    [all_fx,c] = ilo(a+1,b,x,y,all_fx,fx); 
    [all_fx,d] = ilo(a,b-1,x,y,all_fx,fx); 
    fx(end+1) = (c-d)/(b-a); 
    if a == 1 
     all_fx(end+1) = fx(end); 
    end 
end 
Смежные вопросы