线性插值: 线性插值是最简单的插值函数,就是两点决定一条直线,用两点式表示了而已。
现在看这道题可能有点简单,到了后面再做的时候就明白这道题的霸道啦~
抛物插值: 抛物插值就是线性插值的进阶版,给出三个点,求出来的插值多项式就是所谓的抛物插值。
从线性插值中推理过来:
很明显,这个结果比线性插值精度高一些~
一般的:
对于我们的 lᵢ :
实际上吧,我觉得这里没有太大必要这样表示,但是为了后续的理解,姑且先记一下叭~绕了个小弯。
啥是余项
通俗来讲,余项就是误差,所以插值多项式的余项可以表示成:
快看这里的w眼熟不!就是上面那个展开奇奇怪怪的东西~
具体的证明不需要记,但是要记住,余项表达式只有在 f(x) 的 高阶导数存在 时才能用。
通常,我们求函数的 n+1 阶导数 max|fⁿ⁺¹(x)| = Mₙ₊₁ ,从而将误差放缩:
这里方法有一个 局限性 ,就是必须要知道导函数的上界,属于事前误差估计,那如果上界不知道呢?
事后误差估计是个怎么回事儿呢?通俗来讲,就是多算一位,分别把 Lₙ 和 Lₙ₊₁ 的式子算出来,近似相等,可以得到结果和误差:
定义: 一阶差商就是,函数值之差比上自变量之差:
计算: 使用差商表最方便
实际上牛顿和拉格朗日插值是等价的,拉格朗日插值有 高度的对称性 ;牛顿插值多项式来自于差商,其意义在于具有 承袭性 ,即增加一项可以从上一项推出来。
Newton插值余项
龙格现象: 所谓龙格现象,就是当插值多项式的次数随着节点个数增加时,有可能产生激烈的震荡从而不符合原函数。
分段插值: 分段插值就是将被插值函数分成一小段一小段,在每个小段里面逼近,从而达到比较好的效果。
分段线性插值: 将一个区间化为n个小区间,记 h 是所有区间长度的最大值,则 Ih 在[a,b]上连续、存在且在每一段上都是线性多项式,即为 分段线性差值函数 。
为了克服拉格朗日插值中,分段点处不可导的问题
样条函数 的特点是。充分光滑,即导数连续;又有一定的间断性,即分段的特性。
接下来讲讲三次样条插值函数的 计算方法
这里就不过多证明,直接上例题寻找考点吧
书后题:
后记
这一章太难了,太难了,加油兄弟们
程序代码如下。
希望能帮助到你!
牛顿插值法
#include<stdioh>
#include<mathh>
#define
n
4
void
difference(float
x,float
y,int
n)
{
float
f;
int
k,i;
f=(float
)malloc(nsizeof(float));
for(k=1;k<=n;k
)
{
f[0]=y[k];
for(i=0;i<k;i
)
f[i
1]=(f[i]-y[i])/(x[k]-x[i]);
y[k]=f[k];
}
return;
}
main()
{
int
i;
float
varx=0895,b;
float
x[n
1]={04,055,065,08,09};
float
y[n
1]={041075,057815,069675,088811,102652};
difference(x,(float
下面代码直接考入matlab运行即可:
syms f x lx;
f=1/(1+x^2);
N=input('请输入插值节点数N=');
xx=-5:10/N:5;
ff=zeros(1,length(xx));
for i=1:(N+1)
x=xx(i);
ff(i)=eval(f);
end
M = -5:001:5;
output = zeros(1,length(M));
n = 1;
for i=2:N+1
for x=-5:001:5
if x<xx(i) && x>=xx(i-1)
lx(1)=ff(i-1)(x-xx(i))/(xx(i-1)-xx(i));
lx(2)=ff(i)(x-xx(i-1))/(xx(i)-xx(i-1));
output(n) = lx(1)+lx(2);
n = n+1;
end
end
end
ezplot(f,[-5,5])
hold on
A =-5:001:5;
plot(A,output,'r');
分段越多,拟合曲线越接近原始曲线,可以调节N的值看一下
以上就是关于第一章:插值方法全部的内容,包括:第一章:插值方法、牛顿的插值法用C语言怎么编写怎么编啊、求matlab分段线性插值代码 目的消除f=1/(1+x^2);-5=<x<=5;插值产生的Runge现象等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)