代数插值实验
- 格式:doc
- 大小:43.50 KB
- 文档页数:3
第5章插值方法5.1 插值问题概述假设f(x)是某个表达式很复杂,甚至根本写不出来的实函数,且已知f(x)在某个区间[a,b]上的n+1个互异的点x0,x1,…,x n处的函数值f(x0),f(x1),…,f(x n),我们希望找到一个简单的函数y=P(x),使得P(x k)=f(x k),k=0,1,…,n.这就是插值问题。
如果我们找到了这样的函数y=P(x),我们就可以在一定范围内利用P(x)近似表示f(x),从而解决了相应的计算问题。
1.利用函数值列表来表示插值问题对于一个插值问题来说,我们的已知条件就是n+1个互异的点处的函数值.回顾高等数学中学习过的函数的表示方法,我们可用下面表1的形式列出已知的函数值,并简称为由表1给出的插值问题。
表1:插值问题的函数值列表2.重要术语对于n+1个基点的插值问题,我们称:f(x) 为被插值函数;P(x)为插值函数;x0,x1,…,x n为插值基点或插值节点;P(x k)=f(x k),k=0,1,…,n为插值条件;[a,b]为插值区间。
注释:对于早期的插值问题来说,f(x)通常是已知的,比如对数函数,指数函数,三角函数等这些问题现在已经不用插值法来计算了;对于现在的许多实际问题来说,我们并不知道f(x)的具体形式,所对应的函数值可能是由测量仪器或其他物理设备中直接读出来的,f(x)只是一个概念中的函数。
3.多项式插值对于n+1个基点的插值问题,如果要求插值函数是次数不超过n 的多项式,记为P n(x),则相应的问题就是多项式插值,并且把P n(x)称为插值多项式。
实际上,我们所考虑的插值函数通常都是多项式函数或分段多项式函数。
由于次数不超过n的多项式的一般形式为P n((x)=a 0+a 1x+a 2x 2+…+a n x n (1)所以只要确定了n+1个系数a 0,a 1,a 2,a n ,我们便确定了一个插值多项式。
4.多项式插值的一般方法对于n+1个基点的多项式插值问题,我们完全可以用上一章中的办法来求插值多项式P n (x)的系数,a 0,a 1,a 2,a n ,它们可表为下面的线性方程组的解,所以多项式插值相对说来是很简单的。
python 牛顿插值法摘要:1.牛顿插值法概述2.牛顿插值法的基本原理3.牛顿插值法的应用实例4.Python 中实现牛顿插值法的方法5.总结正文:一、牛顿插值法概述牛顿插值法是一种常用的代数插值方法,它引入了差商的概念,使其在插值节点增加时便于计算。
牛顿插值法广泛应用于数值分析、工程计算等领域,是求解函数值和导数值的一种有效手段。
二、牛顿插值法的基本原理牛顿插值法的基本原理是利用差商的性质来逼近函数值。
差商是指函数在某一点的导数值,可以用以下公式表示:f[x] = f[x0] + f[x1] * (x - x0) / (x1 - x0)其中,f[x0] 和f[x1] 分别是函数在x0 和x1 两点的值,x 是待求的点。
通过不断增加插值节点,可以逐渐提高插值精度。
三、牛顿插值法的应用实例牛顿插值法在实际应用中有很多实例,例如在计算机图形学中,可以用牛顿插值法求解光线与物体的交点,从而实现光线追踪;在数值计算中,可以用牛顿插值法求解微分方程的数值解等。
四、Python 中实现牛顿插值法的方法Python 中可以使用SciPy 库实现牛顿插值法。
以下是一个简单的示例:```pythonimport numpy as npfrom scipy.interpolate import newton# 设置插值点x = np.array([1, 3, 2])y = np.array([1, 2, -1])# 使用牛顿插值法求解y 值的导数y_derivative = newton(x, y)print(y_derivative)```五、总结牛顿插值法是一种常用的插值方法,它具有较高的插值精度和较好的稳定性。
在Python 中,可以使用SciPy 库方便地实现牛顿插值法。
数值分析实验报告实验一、解线性方程组的直接方法——梯形电阻电路问题利用追赶法求解三对角方程组的方法,解决梯形电阻电路问题:电路中的各个电流{1i ,2i ,…,8i }须满足下列线性方程组:R V i i =- 22 210 252321=-+-i i i 0 252 432=-+-i i i 0 252 543=-+-i i i 0 252 654=-+-i i i 0 252 765=-+-i i i 0 252 876=-+-i i i 052 87=+-i i设V 220=V ,Ω=27R ,运用追赶法,求各段电路的电流量。
问题分析:上述方程组可用矩阵表示为:⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡--------------00000001481.8522520000002520000002520000002520000002520000002520000002287654321i i i i i i i i问题转化为求解A x b =,8阶方阵A 满足顺序主子式(1,2...7)0i A i =≠,因此矩阵A存在唯一的Doolittle 分解,可以采用解三对角矩阵的追赶法!追赶法a=[0 -2 -2 -2 -2 -2 -2 -2]; b=[2 5 5 5 5 5 5 5];c=[-2 -2 -2 -2 -2 -2 -2 0]; d=[220/27 0 0 0 0 0 0 0];Matlab 程序function x= zhuiganfa( a,b,c,d )%追赶法实现要求:|b1|>|C1|>0,|bi|>=|ai|+|ci| n=length(b); u=ones(1,n); L=ones(1,n); y=ones(1,n); u(1)=b(1); y(1)=d(1); for i=2:nL(i)=a(i)/u(i-1);u(i)=b(i)-c(i-1)*L(i); y(i)=d(i)-y(i-1)*L(i); endx(n)=y(n)/u(n); for k=n-1:-1:1x(k)=(y(k)-c(k)*x(k+1))/u(k); end endMATLAB 命令窗口输入:a=[0 -2 -2 -2 -2 -2 -2 -2]; b=[2 5 5 5 5 5 5 5];c=[-2 -2 -2 -2 -2 -2 -2 0] d=[220/27 0 0 0 0 0 0 0];x= zhuiganfa(a,b,c,d )运行结果为:x =8.1478 4.0737 2.0365 1.0175 0.5073 0.2506 0.1194 0.0477存在问题根据电路分析中的所讲到的回路电流法,可以列出8个以回路电流为独立变量的方程,课本上给出的第八个回路电流方程存在问题,正确的应该是78240i i -+=;或者可以根据电路并联分流的知识,同样可以确定78240i i -+=。
插值法实验要求:
1.编写多项式插值程序(Lagrange插值或Newton插值均可)和三次
样条插值程序(三转角或三弯矩法均可,配合端点处一阶导函数和二阶导函数值作为边值条件)。
2.利用编写的程序,完成P50页计算实习题1-2.
3.利用编写的程序,完成附件中野鸭的背部曲线的描绘。
最后比较不同插值方法对以上三个问题的不同数值表现。
实验指导:可以将三次样条插值问题分解为如下几个小模块进行分析:
1.实验数据的读取:在插值算法中,要考虑插值点的信息和这些点
处的函数值信息的获取。
常用的方式有:键盘输入、文件读取、函数计算得出等方式。
2.三次样条函数S(x) 在[x_{k}, x_{k+1}] 区间上满足三次Hermite插
值。
因此,需要编写在区间上的三次Hermite插值函数。
3.上述S(x)的构造需要依赖于m_{k} 或M_{k}.这就要求求解三对角
线性代数方程组。
以及的计算可以在主函数内实现。
方程组
的右端项需要用到一阶差商,这部分需要进行计算。
4.计算函数f(x)及样条插值函数S(x)在非插值结点处的值。
5.比较插值方法与原方法的误差时,可以采用多重方式,如列表或
画图等。
实验最后的结果以实验报告的形式提交。
内容包含实验步骤、实验结
果和结论等。
实验6 代数插值实验(1)
实验类型:●验证性实验 ○综合性实验 ○设计性实验 实验目的:进一步熟练掌握Lagrange 插值算法,提高编程能力和解决插值问题的实践技能。
实验内容:依照Lagrange 算法编写基于N+1个点的{}N
k k k y x 0),(= 的N
次Lagrange 插值多项式系数计算的程序,以p163例4.7为例进行调试并画出y=f(x)=cox(x)及插值多项式P 2(x)和P 3(x)的图像。
实验原理
已知N+1个点的{}N
k k k y x 0),(=
计算Lagrange
插值基函数,00()(())/(()N N
N K j k j j j j k
j k
L x x x x x ==≠≠=--∏∏
(k =0,…,N)
计算 N 次Lagrange 插值多项式函数 P(x)=∑=N
k k N k x L y 0
,)(
实验说明
需要建立两个数组X ,Y 分别存放(1x ,…,)n x ,(1y ,…,)n y 需要考虑多项式乘积运算的算法或者函数。
实验步骤
1 要求上机实验前先编写出程序代码
2 编辑录入程序
3 调试程序并记录调试过程中出现的问题及修改程序的过程
4 经反复调试后,运行程序并验证程序运行是否正确。
5 记录运行时的输入和输出。
实验总结 :
熟悉应用Lagrange 算法,并利用其求解方程,解决实际问题; 实验报告:根据实验情况和结果撰写并递交实验报告。
运行结果:
(a)
>> X=[0.0 0.6 1.2]; >> Y=cos(X) Y =
1.0000 0.8253 0.3624 >> plot(X,Y,'r*')
>> [C,L]=lagran(X,Y)
C =
-0.4004 -0.0508 1.0000
L =
1.3889 -
2.5000 1.0000
-2.7778 3.3333 0
1.3889 -0.8333 0
>> x=0.0:0.1:1.2;
>> y=polyval(C,x);
>> plot(X,Y,'r+',x,y,'b')
(b)
>> X=[0.0 0.4 0.8 1.2];
>> Y=cos(X);
[C,L]=lagran(X,Y)
C =
0.0922 -0.5651 0.0139 1.0000 L =
-2.6042 6.2500 -4.5833 1.0000 7.8125 -15.6250 7.5000 0 -7.8125 12.5000 -3.7500 0 2.6042 -3.1250 0.8333 0 >> x=0.0:0.01:1.2;
>> y=polyval(C,x);
>> polt(X,Y,'b*',x,y,'b')
参考程序(MATLAB程序)
function [C,L]=lagran(X,Y)
w=length(X);
n=w-1;
L=zeros(w,w);
for k=1:n+1
V=1;
for j=1:n+1
if k~=j
V=conv(V,poly(X(j)))/(X(k)-X(j));
end
end
L(k,:)=V;
end
C=Y*L;。