Matlab 牛顿法非线性插值

Matlab 牛顿法非线性插值,matlab,interpolation,numerical-methods,newtons-method,Matlab,Interpolation,Numerical Methods,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); dis

给定一组数据点,我试图在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

结果是不正确的,我还没有成功地发现错误。感谢所有的帮助

雅可比矩阵错误。使用牛顿的方法,你试图找到
a
b
的值,它们将解方程
8-ax^b-y=0
。因此,雅可比应该是
f
相对于
a
b
的导数。即
J=[df/da-df/db]
,导致:

J = [-x.^b -a.*x.^b.*log(x)]
您将得到5次迭代的以下曲线:

请注意,您可以使用

Log(8 - U(x)) = Log(a) + b Log(x)
这不会对点进行插值(即,生成的曲线不会通过给定点)。它将逼近最接近这些点的曲线(使曲线与给定点之间的差异最小化)。