21matlab数据分析牛顿插值(matlab程序)

1.简述

      

一、牛顿插值法原理
1.牛顿插值多项式
  定义牛顿插值多项式为:
N n ( x ) = a 0 + a 1 ( x − x 0 ) + a 2 ( x − x 0 ) ( x − x 1 ) + ⋯ + a n ( x − x 0 ) ( x − x 1 ) ⋯ ( x − x n − 1 ) N_n\left(x\right)=a_0+a_1\left(x-x_0\right)+a_2\left(x-x_0\right)\left(x-x_1\right)+\cdots+a_n\left(x-x_0\right)\left(x-x_1\right)\cdots\left(x-x_{n-1}\right)


 其中a k ( k = 0 , 1 , 2 , ⋯   , n ) a_k\left(k=0,1,2,\cdots,n\right)a k

 (k=0,1,2,⋯,n)为待定系数

  可见,牛顿插值多项式N ( x ) N\left(x\right)N(x)是插值多项式P ( x ) P\left(x\right)P(x)的另一种表示形式, 与Lagrange多项式相比它不仅克服了“增加一个节点时整个计算工作重新开始”的缺点, 且可以节省乘除法运算次数, 同时在Newton插值多项式中用到差分与差商等概念,又与数值计算的其他方面有密切的关系.

2.差商
2.1 定义
  自变量之差与因变量之差之比叫差商
  定义: 函数y = f ( x ) y=f\left(x\right)y=f(x)在区间[ x i , x i + 1 ] \left[x_i,x_{i+1}\right][x 
上的平均变化率
f [ x i , x i + 1 ] = f ( x i + 1 ) − f ( x i ) x i + 1 − x i f\left[x_i,x_{i+1}\right]=\frac{f\left(x_{i+1}\right)-f\left(x_i\right)}{x_{i+1}-x_i}
 

2.2 性质
  性质1:函数f ( x ) f\left(x\right)f(x)的 n 阶差商f [ x 0 , x 1 , ⋯   , x n ] 可由函数值f ( x 0 ) , f ( x 的线性组合表示, 且
f [ x 0 , x 1 , ⋯   , x n ] = ∑ k = 0 n f ( x k ) ω ′ ( x k ) = ∑ k = 0 n f ( x k ) ( x k − x 0 ) ( x k − x 1 ) ⋯ ( x k − x k − 1 ) ( x − x k + 1 ) ⋯ ( x k − x n ) f\left[x_0,x_1,\cdots,x_n\right]=\sum_{k=0}^n\frac{f\left(x_k\right)}{\omega'\left(x_k\right)}\\=\sum_{k=0}^n\frac{f\left(x_k\right)}{\left(x_k-x_0\right)\left(x_k-x_1\right)\cdots\left(x_k-x_{k-1}\right)\left(x-x_{k+1}\right)\cdots\left(x_k-x_n\right)}

 

  性质2:差商具有对称性,即在k阶差商中f [ x 0 , x 1 , ⋯   , x n ] f\left[x_0,x_1,\cdots,x_n\right]f[x 

 的次序,其值不变。
  例如:
f [ x 0 , x 1 , x 2 ] = f [ x 1 , x 2 , x 0 ] = f [ x 0 , x 2 , x 1 ] = ⋯ f\left[x_0,x_1,x_2\right]=f\left[x_1,x_2,x_0\right]=f\left[x_0,x_2,x_1\right]=\cdots


 性质3:k阶差商f [ x 0 , x 1 , ⋯   , x k ] f\left[x_0,x_1,\cdots,x_k\right]f[x 
和k阶导数之间有下列关系
f [ x 0 , x 1 , ⋯   , x k ] = f ( k ) ( ξ ) k !                ξ ∈ ( m i n 0 ≤ i ≤ n x i , m a x 0 ≤ i ≤ n x i ) f\left[x_0,x_1,\cdots,x_k\right]=\frac{f^{\left(k\right)}\left(\xi\right)}


  将求得系数代入多项式中即可得到n次牛顿插值公式
N n ( x ) = f ( x 0 ) + f [ x 0 , x 1 ] ( x − x 0 ) + ⋯ + f [ x 0 , x 1 , ⋯   , x n ] ( x − x 0 ) ( x − x 1 ) ⋯ ( x − x n ) N_n\left(x\right)=f\left(x_0\right)+f\left[x_0,x_1\right]\left(x-x_0\right)+\cdots+f\left[x_0,x_1,\cdots,x_n\right]\left(x-x_0\right)\left(x-x_1\right)\cdots\left(x-x_n\right)
 

  

二、牛顿插值公式matlab代码
  友情提示:本人使用的是matlab2019b版本,并且个人很喜欢使用matlab中的实时在线脚本,很少使用脚本来编写程序。实时在线脚本脚本编译环境我个人非常喜欢,所以接下来的代码都是在实时在线脚本中实现。

2.代码

function Newton_main()
clc
x=0:1:10;
y=x./(tan(x)+1);
k=1;
for x0=0:0.01:10;
    y0(k)=Newton(x,y,x0);
    k=k+1;
end
x0=0:0.01:10;
plot(x0,y0)
hold on 
scatter(x,y,'ro')

end

function y0=Newton(x,y,x0)
n=length(x);
A=zeros(n);
A(:,1)=y';
for j=2:n
    for i=1:(n-j+1)
        A(i,j)=(A(i+1,j-1)-A(i,j-1))/(x(i+j-1)-x(i));
    end
end

N(1)=A(1,1);
for j=2:n
    T=1;
    for i=1:j-1
        T=T*(x0-x(i));
    end
    N(j)=A(1,j)*T;
end
y0=sum(N);
end
 

3.运行结果

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

素馨堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值