使用牛顿法的非线性插值

Nonlinear interpolation using Newtons method

给定一组数据点,我尝试使用 MATLAB 中的牛顿法逼近函数 U(x)=8-ax^b 中的系数 a、b。

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

结果不正确,我没有成功找到失误。感谢所有帮助。

jacobi 矩阵 错误。使用牛顿法,您试图找到 ab 的值来求解方程 8-ax^b - y = 0。因此,您的雅可比应该是 f 关于 ab 的导数。即 J = [df/da df/db],导致:

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

你将得到以下 5 次迭代的曲线:

请注意,您可以使用

轻松地线性化您的模型
Log(8 - U(x)) = Log(a) + b Log(x)