Нелинейная интерполяция методом Ньютона

Учитывая набор точек данных, я пытаюсь аппроксимировать коэффициенты a, b в функции U (x) = 8-ax ^ b, используя метод Ньютона в MATLAB.

x = [150 200 300 500 1000 2000]';
y = [2 3 4 5 6 7]';
a=170; b=-0.7; iter = 0; 
for iter=1:5
    f=8-a*x.^(b) -y;
    J = [-x.^b -a*b*x.^(b-1)]; %Jacobis matrix
    h=J\f;
    a=a-h(1); b=b-h(2);
    disp(norm(f))
    iter = iter+1;
end

Результаты неверны, и мне не удалось найти ошибку. Вся помощь приветствуется.


person bullbo    schedule 19.01.2018    source источник
comment
Это не будет интерполировать точки (т. е. результирующая кривая не будет проходить через заданные точки). Он будет аппроксимировать ближайшую кривую к этим точкам (минимизировать разницу между кривой и заданными точками).   -  person Aziz    schedule 20.01.2018


Ответы (2)


Матрица Якоби неверна. Используя метод Ньютона, вы пытаетесь найти значения a и b, которые решат уравнения 8-ax^b - y = 0. Таким образом, ваши Якоби должны быть производными от f по отношению к a и b. Это J = [df/da df/db], в результате чего:

J = [-x.^b -a.*x.^b.*log(x)]

и вы получите следующую кривую для 5 итераций:

person Aziz    schedule 20.01.2018

Обратите внимание, что вы можете легко линеаризовать свою модель с помощью

Log(8 - U(x)) = Log(a) + b Log(x)
person Yves Daoust    schedule 31.01.2018