第一部分:问题分析
(1)实验题目:拉格朗日插值算法
具体实验要求:要求学生运用拉格朗日插值算法通过给定的平面上的n个数据点,计算拉格朗日多项式Pnx)的值,并将其作为实际函数fx)的估计值。用matlab编写拉格朗日插值算法的代码,要求代码实现用户输入了数据点xi,fxi))、插值点之后,程序能够输出插值点对应的函数估值。
(2)实验目的:让同学们进一步掌握拉格朗日插值算法的原理以及运算过程,并且通过matlab编程培养实际的上机操作能力和代码能力。
第二部分:数学原理
要估计任一点ξ,ξ≠xi,i=0,1,2,…,n,则可以用Pn(ξ)的值作为准确值fξ)的近似值,此方法叫做“插值法”。
称式(*)为插值条件(准则),含xii=0,1,…,n)的最小区间[a,b],其中a=min{x0,x1,…,xn},b=max{x0,x1,…,xn}。
具体实现形式:
第三部分:程序设计流程
(1)langrange插值函数(被调用者):
(2)执行函数(面向用户:调用者):
第四部分:代码实现
拉格朗日插值函数实现:
(每次最外层的for循环,打印一次插值点以及其期望值)
function[] = Lagrangex,f,x0)
%得出数据点的个数
n = lengthx) ;
%得出插值点的个数
m = lengthx0);
for i = 1:m
D = x0i);
y = 0.0;
for k = 1:n
%置lx)的初值
l = 1.0;
for j = 1:n
%迭代表示出lxj)
%记住,第k个是取不到的!!!!
if j~=k
l = l*D-xj))/xk)-xj));
end
end
%Pnx)
y = y + l*fk);
end
xx = num2strD,'%.4f');
y =num2stry,'%.4f');
disp'fx)的近似值点坐标为:');
disp['',xx,',',y,')']);
end
end
Jetbrains全家桶1年46,售后保障稳定
用户调用部分:
(1)情形一:
实现结果:给定插值函数的区间,给定原函数fx),给定插值点–>实现拉格朗日估值的计算)
注意:
1.拉格朗日坐标点的x坐标向量,通过区间加步长实现:所以用户只需修改区间端点,程序便可以根据输入的区间等分次数n,自行合成
2.通过syms x将原函数fx)表示出来(由用户自己输入),程序便可以根据输入的fx)自动计算出对应数据节点的函数值
%根据插值要求,自行算出所需要输出的坐标值
n = input"插值等分的次数n=");
X = -5:10/n):5;
m = lengthX);%获取节点的个数
Y = zeros1,m);%创造全0向量为插值点函数值做铺垫
syms x;
%在此输入测试的函数fx)
fx) = 1+x^2)^-1);
for i = 1:m
Yi) = fXi));
end
x0 = input'请输入插值点x0数组:');
LagrangeX,Y,x0);
(2)情形二:
实现结果:针对给定的无规律离散数据点,且未给定对应的原函数fx))
%输入数据点的坐标
x = input"输入数据点x坐标的向量:");
y = input"输入数据点y坐标的向量:");
%输入所要估值的插值点的x坐标向量
x0 = input'请输入插值点x0数组:');
LagrangeX,Y,x0);