拉格朗日插值函数计算机实现流程图,拉格朗日插值实验报告.doc

实验名称: 实验一 拉格朗日插值

引言

我们在生产生活中常常会遇到这样的问题:某个实际问题中,函数f(x)在区间[a,b]上存在且连续,但找到其表达式,只能通过实验和观测得到有限点上的函数表。有些情况虽然可以写出表达式,但结构复杂,使用不方便。所以简单函数P(x)作为f(x)的近似值。插值法是解决此类问题的一种方法。

实验目的和要求

运用Matlab编写m文件,要求一次性输入整张函数表,并利用计算机选择在插值计算中所需的节点。分别通过分段线性插值、分段二次插值和全区间上拉格朗日插值计算f(0.15),f(0.31),f(0.47)的近似值。f(x)0.398940.396950.391420.381380.368120.35206算法原理与流程图

(1)原理

设函数y=在插值区间[a,b]上连续,且在n+1个不同的插值节点a≤x0,x1,…,xn≤b上分别取值y0,y1,…,yn。目的是要在一个性质优良、便于计算的函数类Φ中,求一简单函数P(x),P(xi)=yi(i=0,1,…,n),而在其他点x≠xi上,作为f(x)近似值P(x)的方法称为插值法。在本实验中,采用拉格朗日插值法。

①分段低次插值

当给定了n+1个点x0

这种分段低次插值叫分段线性插值

类似地,我们可以选取距离x最近的三个节点xi-1,xi与xi+1,然后进行二次插值,即得

这种分段低次插值叫分段二次插值②全区间上拉格朗日插

对节点xi(i=0,1,…,n)中任一点xk(0≤k≤n),作一n次多项式lk(x),使它在该点上的取值为1,在其余点xi(i=0,1,…,k-1,k+1,…,n)上取值为零。对应于每一节点xk(k=0,1,…,n),都能写出一个满足此条件的多项式,这样写出n+1个多项式l0(x),l1(x),…,ln(x);

由条件可得

于是我们可以得出如下的拉格朗日n次插值多项式(对于全区间上的插值,n取函数表的长度)

流程图

分段线性插值分段二次插值 全区间拉格朗日插值

程序代码及注释

1、分段线性插值

%分段线性插值

function y=piece_linear(x0,y0,x)

% x0,y0为已知点,x为待求点

n=length(x0);p=length(y0);m=length(x);

% n,p,m分别为x0,y0,x长度

if n~=p

fprintf('Error! Please input again!\n');

% x0和y0长度不等时,报错

else

for i=1:m

z=x(i);

sum=0.0;

l=0;

%给l赋初值,根据x的值确定l

if zx0(n)

fprintf('Error!x(%d) is out of range!\n',i);

break;

end

%当插值点超出范围时,报错

for j=2:n

if z

l=j;

end

if l~=0

break;

end

end

%一旦l有非零值,则终止循环,选出合适的l

for k=l-1:l

a=1.0;

for s=l-1:l

if s~=k

a=a*(z-x0(s))/(x0(k)-x0(s));

end

end

sum=sum+y0(k)*a;

end

y(i)=sum;

fprintf('y(%d)=%f\nx1=%.3f y1=%.5f,x2=%.3f y2=%.5f\n\n',i,y(i),x0(l-1),y0(l-1),x0(l),y0(l));

%输出插值结果和所需节点

end

end

end

2、分段二次插值

%分段二次插值

function y=piece_square(x0,y0,x)

% x0,y0为已知点,x为待求点

n=length(x0);p=length(y0);m=length(x);

% n,p,m分别为x0,y0,x长度

if n~=p

fprintf('Error! Please input again!\n');

% x0和

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值