插值法-第二次程序题
- 格式:doc
- 大小:723.50 KB
- 文档页数:31
数值方法课后习题答案习题1:插值法给定一组数据点 \((x_1, y_1), (x_2, y_2), \ldots, (x_n, y_n)\),使用拉格朗日插值法构造一个多项式 \(P(x)\),使其通过所有给定的数据点。
答案:拉格朗日插值法的多项式 \(P(x)\) 可以表示为:\[ P(x) = \sum_{i=1}^{n} y_i \prod_{\substack{j=1 \\ j \neq i}}^{n} \frac{x - x_j}{x_i - x_j} \]习题2:数值积分使用梯形法则和辛普森法则分别计算定积分 \(\int_{0}^{1} x^2 dx\) 的近似值。
答案:- 梯形法则的近似值:\[ \text{Trapezoidal Rule} \approx \frac{h}{2}(y_0 + 2y_1 +2y_2 + \ldots + y_{n-1}) \]- 辛普森法则的近似值:\[ \text{Simpson's Rule} \approx \frac{h}{3}(y_0 + 4y_1 +2y_2 + 4y_3 + \ldots + y_{n-1}) \]习题3:微分方程数值解考虑常微分方程 \(y' = f(x, y)\),其中 \(f(x, y) = x^2 - y^2\),初始条件 \(y(0) = 1\)。
使用欧拉方法和改进的欧拉方法分别计算\(y(0.1)\) 的近似值。
答案:- 欧拉方法:\[ y_{n+1} = y_n + h \cdot f(x_n, y_n) \]- 改进的欧拉方法:\[ y_{n+1} = y_n + \frac{h}{2} \cdot (f(x_n, y_n) + f(x_{n+1}, y_{n+1})) \]习题4:线性方程组的数值解给定线性方程组 \(Ax = b\),其中 \(A\) 是一个 \(n \times n\)的矩阵,\(b\) 是一个 \(n \times 1\) 的向量。
插值法题目1:对Runge 函数22511)(xx R +=在区间[-1,1]作下列插值逼近,并和R(x)的图像进行比较,并对结果进行分析。
(1)用等距节点,200,1.0,-1≤≤=+=i h ih x i 绘出它的20次Newton 插值多项式的图像。
(2)用节点)20,,2,1,0(,)4212cos(⋅⋅⋅=+=i i x i π,绘出它的20次Lagrange 插值多项式的图像。
(3)用等距节点,200,1.0,-1≤≤=+=i h ih x i 绘出它的分段线性插值函数的图像。
(4)用等距节点,200,1.0,-1≤≤=+=i h ih x i 绘出它的三次自然样条插值函数的图像。
程序及分析:(1)用等距节点,200,1.0,-1≤≤=+=i h ih x i 绘出它的20次Newton 插值多项式的图像。
Matlab 程序如下:%计算均差x=[-1:0.1:1]; n=length(x); syms z for i=1:ny(i)=1/(1+25*x(i)*x(i)); endN=zeros(n,n); N(:,1)=y'; for j=2:n for k=j:nN(k,j)=(N(k,j-1)-N(k-1,j-1))/(x(k)-x(k-j+1)); end end for t=1:n c(t)=N(t,t) end%构造插值多项式 f=N(1,1); for k=2:n a=1;for r=1:(k-1) a=a*(z-x(r)); endf=f+N(k,k)*a; end%作图a=[-1:0.001:1]; n=length(a); for i=1:nb(i)=1/(1+25*a(i)*a(i)); endfx=subs(f,z,a); subplot(2,1,1);plot(a,b,'k',a,fx,'r'); c=[-0.6:0.001:0.6]; n=length(c); for i=1:nd(i)=1/(1+25*c(i)*c(i)); endfx=subs(f,z,c); subplot(2,1,2);plot(c,d,'k',c,fx,'r');结果与分析:由下图可以看出,在区间[-0.6,0.6]上,插值多项式可以很好的逼近被插值函数。
题目一:多项式插值某气象观测站在8:00(AM )开始每隔10分钟对天气作如下观测,用三次多项式插值函数(Newton )逼近如下曲线,插值节点数据如上表,并求出9点30分该地区的温度(x=10)。
二、数学原理假设有n+1个不同的节点及函数在节点上的值(x 0,y 0),……(x n ,y n ),插值多项式有如下形式:)())(()()()(n 10n 102010n x -x )(x -x x -x x P x x x x x x -⋯⋯-+⋯⋯+-++=αααα(1) 其中系数i α(i=0,1,2……n )为特定系数,可由插值样条i i n y x P =)((i=0,1,2……n )确定。
根据均差的定义,把x 看成[a,b]上的一点,可得f(x)=f (0x )+f[10x x ,](0x -x ) f[x,0x ]=f[10x x ,]+f[x,10x x ,](1x -x )……f[x,0x ,…x 1-n ]=f[x,0x ,…x n ]+f[x,0x ,…x n ](x-x n )综合以上式子,把后一式代入前一式,可得到:f(x)=f[0x ]+f[10x x ,](0x -x )+f[210x x x ,,](0x -x )(1x -x )+…+f[x,0x ,…x n ](0x -x )…(x-x 1-n )+f[x,0x ,…x n ,x ])(x 1n +ω=N n (x )+)(x n R 其中N n (x )=f[0x ]+f[10x x ,](0x -x )+f[210x x x ,,](0x -x )(1x -x )+ …+f[x,0x ,…x n ](0x -x )…(x-x 1-n )(2))(x n R =f(x)-N n (x )=f[x,0x ,…x n ,x ])(x 1n +ω(3) )(x 1n +ω=(0x -x )…(x-x n ) Newton 插值的系数i α(i=0,1,2……n )可以用差商表示。
第16章插值法Lagrange插值求n次Lagrange插值多项式算法1.输入n+1个插值点:(x i, y i),i=0,1,…,n2.计算插值基函数l0n(x), l1n(x) ,…, l nn(x)3.给出n次Lagrange插值多项式:L n(x)= y0 l0n(x)+ y1 l1n(x) +…+y n l nn(x)求Lagrange插值多项式程序Clear[lag,xi,x,yi];xi=Input["xi="]yi=Input["yi="]n=Length[xi]-1;p=Sum[yi[[i]]*(Product[(x-xi[[j]])/(xi[[i]]-xi[[j]]),{j,1,i-1}]*Product[(x-xi[[j]])/(xi[[i]]-xi[[j]]),{j,i+1,n+1}]),{i,1,n+1}];lag[x_]=Simplify[p]说明:本程序用于求n次Lagrange插值多项式。
程序执行后,按要求通过键盘输入插值基点xi:{x0 , x1, ... , x n }和对应函数值yi:{ y0 , y1, … , y n }后,程序即可给出对应的n次Lagrange插值多项式lag[x]。
程序中变量说明xi:存放插值基点{x0 , x1, ... , x n }yi: 存放对应函数值{y0 , y1, … , y n}lag[x]: 存放求出的n次Lagrange插值多项式Ln(x)注:语句lag[x_]=Simplify[p]用简化形式给出对应的n次Lagrange插值多项式。
例题与实验例1.给定数据表x 0 1 2 3y=f(x) 1 3 5 12用Lagrange插值法求三次插值多项式,并给出函数f(x)在x =1.4的近似值。
解:执行Lagrange插值程序后,在输入的两个窗口中按提示分别输入{0, 1, 2, 3}、{1, 3, 5, 12},每次输入后用鼠标点击窗口的“OK”按扭,得如下插值函数。
牛顿插值法是一种常用的数值分析方法,用于构造一个多项式函数,以便在给定的数据点上进行插值。
这个主题在数学和工程领域中有着广泛的应用,特别是在数据拟合和函数逼近方面。
牛顿插值法的核心思想是通过不断地添加新的数据点来构造一个多项式,并利用已知数据点来确定多项式的系数,从而实现对未知数据点的插值预测。
在Matlab中,实现牛顿插值法并不困难,我们可以利用已有的函数和工具来简化计算过程。
下面,我们将通过一个具体的例题来讲解如何使用Matlab编写牛顿插值法的程序,并分析其结果。
我们需要明确牛顿插值法的数学原理。
给定n个互不相同的节点\(x_0, x_1, ... , x_n\),以及在这些节点上的函数值\(f(x_0), f(x_1), ... , f(x_n)\),我们希望构造一个n次插值多项式p(x),满足p(x_i) = f(x_i),i=0,1,...,n。
牛顿插值多项式的一般形式为:\[p(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})\]其中,\[a_i\]表示插值多项式的系数。
通过牛顿插值法的迭代过程,可以逐步求解出这些系数,进而得到插值多项式的表达式。
接下来,我们将以一个具体的例题来演示如何在Matlab中实现牛顿插值法。
假设我们有如下的数据点和函数值:\(x = [1, 2, 3, 4]\)\(f(x) = [1, 4, 9, 16]\)我们希望利用这些数据点来构造一个插值多项式,并在给定的区间上进行插值计算。
在Matlab中,可以通过interp1函数来进行插值计算,该函数支持多种插值方法,包括牛顿插值法。
下面是一个简单的Matlab程序示例:```matlabx = [1, 2, 3, 4];y = [1, 4, 9, 16];xi = 2.5;yi = interp1(x, y, xi, 'spline');disp(['在x=',num2str(xi),'处的插值结果为:',num2str(yi)]);```在这段代码中,我们首先定义了给定的数据点x和对应的函数值y,然后利用interp1函数对x=2.5处的插值结果进行计算。
插值法的程序实现一实验目的1.熟悉Matlab编程;2.学习插值方法及程序设计算法二实验题目分别用拉格朗日插值、牛顿插值、自然样条函数对1910、1965、2002的人口进行估算。
三实验原理与理论基础1.拉格朗日插值算法设计①利用已知条件得到xi,yi,i=0,1,2,… ②由Lk(x)=((x-x0)*…*(x-x(k-1))*(x-x(k+1))…(x-xn))/ ((xk-x0)*…*(xk-x(k-1))*(xk-x(k+1))…(xk-xn))得出Li(x);③由Y=y1* L1(x)+…+yn*Ln(x)得出Y关于x的表达式。
④带值计算即可。
2. 牛顿插值算法设计①利用已知条件得到xi,yi,i=0,1,2,… ②利用差商公式f[x0,…xk]=(f[x0,…,x(k-2),xk]-f[x0,…,x(k-1)])/(xk-x(k-1))各阶差商。
③利用牛顿插值公式f(x)=f(x0)-f[x0,x1]*(x-x0)+…f[x0,x1,…xn]*(x-x0)*…(x-x(n-1)).④带值计算即可。
3. 自然样条函数算法设计①利用已知条件得到xi,yi,i=0,1,2,… ②利用公式求出h(i) u(i) k(i);di; ③利用h(i) u(i) k(i);di解出向量M;④ 将相关变量带入自然样条表达式中即可。
⑤带值计算即可。
四实验内容(一)问题重述:下面给出美国从1920年到1970年的人口表: 1920 1930 1940 1950 1960 1970 年份 105711 123203 131669 150697 179323 203212 人口 (千人) 1.用表中数据构造一个5次拉格朗日插值多项式,并用此估计1910,1965和2002年的人口。
在1910年的实际人口约为91772000,请判断插值计算得到的1965年和2002年的人口数据准确性是多少?2 用牛顿插值估计:(1)1965年的人口数;(2)2002年的人口数。
插值与拟合习题课一、已知sin x 在30,45,60的值分别为1,,222,分别用一次插值和二次插值求sin 50的近似值,并估计截断误差.解:一次插值时,取靠近50 的两个角度45,60作节点,将角度化为弧度为5,,1843πππ,此时有()134224334x x L x ππππππ--=+--55sin 50sin 0.7600801818L ππ⎛⎫=≈=⎪⎝⎭由截断误差公式()()()()()()()101...1!n n n f R x x x x x x xn ξ+=---+ 有()()()101"()2f R x x x x x ξ=--代入值即得5155()sin 0.006595161823184183R ππππππ⎛⎫⎛⎫⎛⎫≤---= ⎪⎪⎪⎝⎭⎝⎭⎝⎭二次插值时,取012,,643x x x πππ===,此时有214363()22646346433634x x x x L x ππππππππππππ⎛⎫⎛⎫⎛⎫⎛⎫---- ⎪⎪ ⎪⎪⎝⎭⎝⎭⎝⎭⎝⎭=++⎛⎫⎛⎫⎛⎫⎛⎫------ ⎪⎪ ⎪⎪ ⎪⎪⎝⎭⎝⎭⎝⎭⎝⎭⎝⎭⎝⎭55sin 50sin ()0.7654341818L ππ∴=≈=+其截断误差为351555()cos 183!618618418315550.767382103!186184183R ππππππππππππππ-⎛⎫⎛⎫⎛⎫≤---- ⎪⎪⎪⎝⎭⎝⎭⎝⎭⎛⎫⎛⎫⎛⎫≤---=⨯ ⎪⎪⎪⎝⎭⎝⎭⎝⎭()二、设2()[,]f x C a b ∈且()()0f a f b ==,求证:21max ()()max ()8a xb a x b f x b a f x ≤≤≤≤''≤-证:以a ,b 为插值节点进行线性插值,有1()()()()()(,)2!f f x L x x a x b a b ξξ''-=--∈因为1()()()0x b x aL x f a f b a b b a--=+=--,有进而1max ()max ()max ()()2a x b a x ba xb f x f x x a x b ≤≤≤≤≤≤''≤⋅--21()max ()8a xb b a f x ≤≤''=- 因为函数()()x a x b --在1()2x a b =+处取最大值。
试验二 插值法一、实验目的(1) 学会Lagrange 插值和牛顿插值等基本插值方法; (2) 讨论插值的Runge 现象,掌握分段线性插值方法;(3) 学会Matlab 提供的插值函数的使用方法,会用这些函数解决实际问题。
二、实验要求(1) 按照题目要求完成实验内容; (2) 写出相应的Matlab 程序;(3) 给出实验结果(可以用表格展示实验结果); (4) 分析和讨论实验结果并提出可能的优化实验。
(5) 写出实验报告。
三、实验步骤1、用编好的Lagrange 插值法程序计算书本P66 的例1、用牛顿插值法计算P77的例1。
2、已知函数在下列各点的值为:试用4次牛顿插值多项式4()P x 对数据进行插值,根据{(,),0.20.08,0,1,2,,10i i i x y x i i =+=},画出图形。
3、在区间[-1,1]上分别取10,20n =用两组等距节点对龙格函数21(),(11)125f x x x =-≤≤+作多项式和线性插值,对不同n 值,分别画出插值函数及()f x 的图形。
3、下列数据点的插值可以得到平方根函数的近似,在区间[0,64]上作图。
(1) 用这9个点作8次多项式插值8()L x 。
一、实验目的1、学会Lagrange 插值、牛顿插值和 分段线性插值等基本插值方法;2、讨论插值的Runge 现象,掌握分段线性插值方法3、学会Matlab 提供的插值函数的使用方法,会用这些函数解决实际问题。
二、实验原理1、拉格朗日插值多项式2、牛顿插值多项式3、分段线性插值三、实验步骤1、用MATLAB 编写独立的拉格朗日插值多项式函数2、用MATLAB 编写独立的牛顿插值多项式函数3、利用编写好的函数计算本章书本P66 的例1、用牛顿插值法计算P77的例1。
4、利用编写好的函数计算实验步骤中要求的各道题。
(注意:这里需将要做得的题目抄下来,仅以上机实习题2为例:)2、在区间[-1,1]上分别取10,20n =用两组等距节点对龙格函数21(),(11)125f x x x=-≤≤+作多项式和线性插值,对不同n 值,分别画出插值函数及()f x 的图形。
三点二次插值法例1. 用三点二次插值法求解:3min ()21t t t ϕ=-+,精度210ε-=。
解:首先找出满足123()()()t t t ϕϕϕ><且123t t t <<的1t ,2t ,3t ; 易知,10t =,20t =,30t =; 第一次迭代:1()1t ϕ=,2()0t ϕ=,3()22t ϕ=,代入公式,得:0.625μ=, 由于()()20.0060t ϕμϕ=-<=, 并且20.375t με-=>,则继续迭代;这时迭代点:123t t t μ<<<且12()()()t t ϕϕμϕ><, 则令:110t t ==,20.625t μ==,321t t == 第二次迭代:()11t ϕ=,()20.006t ϕ=-,()30t ϕ=,代入公式,得:0.808μ=, 由于2()0.089()0.006t ϕμϕ=-<=-, 并且 20.183t με-=>,则继续迭代; 这时迭代点:123t t t μ<<<且23()()()t t ϕϕμϕ><,则令:120.625t t ==,20.808t μ==,331t t == 第三次迭代:()10.006t ϕ=-,()20.089t ϕ=-,()30t ϕ=,代入公式,得:0.815μ=,由于2()0.089()0.006t ϕμϕ=-==-, 并且 20.007t με-=<,则停止迭代, 输出近似最优解为0.815μ=或0.808μ=。
例2 用三点二次插值法求:30min ()32t t t t ϕ≥=-+的近似最优解(精确极小点*1t =),设已确定其初始搜索区间为[]0,3,取初始插值点02t =,终止误差0.05ε=。
解:1t =,22t =,33t =,第一次迭代:()12t ϕ=,()24t ϕ=,()320t ϕ=,代入公式,得:0.9μ=, 由于2()0.029()4t ϕμϕ=-<=, 并且 2 1.1t με-=>,则继续迭代;这时迭代点:123t t t μ<<<且12()()()t t ϕϕμϕ><, 则令:110t t ==,20.9t μ==,322t t == 第二次迭代:()12t ϕ=,()20.029t ϕ=,()34t ϕ=,代入公式,得:0.82759μ=, 由于2()0.08405()0.029t ϕμϕ=>=, 并且 20.07241t με-=>,则继续迭代; 这时迭代点:123t t t μ<<<且23()()()t t ϕμϕϕ><,则令:10.82759t μ==,220.9t t ==,332t t == 第三次迭代:()10.08405t ϕ=,()20.029t ϕ=,()34t ϕ=,代入公式,得:0.96577μ=, 由于2()0.00347()0.029t ϕμϕ=-<=, 并且 20.06577t με-=>,则继续迭代; 这时迭代点:123t t t μ<<<且23()()()t t ϕϕμϕ><, 则令:120.9t t ==,20.96577t μ==,332t t == 第三次迭代:()10.029t ϕ=,()20.00347t ϕ=,()34t ϕ=,代入公式,得:0.98308μ=, 由于2()0.00086()0.00347t ϕμϕ=<=, 并且 20.01731t με-=<,则停止迭代, 输出近似最优解为0.98308μ=。
1、已知 f (x )=ln x 的数值表如下,分别用线性及二次 Lagrange 插值法计算f (0.54) 的近似值,并估计误差。
解:(1)线性插值法:因为()ln f x x = 时递增函数,所以取0.5和0.6为插值节点。
则线性插值多项式为:0011()()()()f x F x f l x f l x ==+0.540.60.540.5(0.54)(0.54)(0.5)(0.6)0.50.60.60.50.6930.6(0.510)0.40.6198f F f f --≈=+-- =-⨯+-⨯=-截断误差:101011()''()()(),(,)2R x f x x x x x x ξξ=--∈ 121(0.54)0.0012R ξ=11(0.5,0.6)110.0012(0.54)0.00120.360.25,0.0032(0.54)0.0048R R ξ∈∴⨯<<⨯<<即 (2)二次lagrange 插值法:A :若取0.4,0.5和0.6为插值点,0120.916,0.693,0.510f f f =-=-=-012(0.540.5)(0.540.6)0.12(0.40.5)(0.40.6)(0.540.4)(0.540.6)0.84(0.50.4)(0.50.6)(0.540.4)(0.540.5)0.28(0.60.4)(0.60.5)l l l --==-----==----==--001122(0.54)(0.54)(0.54)(0.54)(0.54)0.615f F f l f l f l ≈=++=-截断误差:20121()'''()()()()3!R x f x x x x x x ξ=---则231(0.54)0.000112R ξ=333233[0.4,0.6],()111,0.60.4110.000112(0.54)0.0001120.40.6f x R ξξ∈∴<<-⨯<<-⨯递增;即20.00175(0.54)0.000519R -<<-B :若取0.5,0.6和0.7为插值点,0120.693,0.510,0.357f f f =-=-=-012(0.540.6)(0.540.7)0.48(0.50.6)(0.50.7)(0.540.5)(0.540.7)0.64(0.60.5)(0.60.7)(0.540.5)(0.540.6)0.12(0.70.5)(0.70.6)l l l --==----==----==---001122(0.54)(0.54)(0.54)(0.54)(0.54)0.6162f F f l f l f l ≈=++=-截断误差:20121()'''()()()()3!R x f x x x x x x ξ=--- 则231(0.54)0.000128R ξ=333233[0.5,0.7],()111,0.70.5110.000128(0.54)0.0001280.70.5f x R ξξ∈∴<<⨯<<⨯递增;即20.000373(0.54)0.001024R <<2、已知f(x)=e -x 的一组数据见下表,用抛物插值法计算e -2.1的近似值。
二次插值法matlab程序二次插值法是一种常用的数值方法,用于在已知一些离散数据点的情况下,通过拟合曲线来估计其他位置的数值。
在Matlab中,可以使用多种方法来进行二次插值,下面将介绍一种常见的实现方式。
我们需要明确二次插值的原理。
二次插值是基于二次多项式的拟合方法,假设有三个已知点(x1, y1), (x2, y2), (x3, y3),我们希望通过拟合曲线来估计其他位置的数值。
二次插值的基本思想是,通过构造一个二次多项式来拟合这三个点,然后根据拟合曲线上的点来进行插值计算。
在Matlab中,可以使用polyfit函数来进行二次插值的拟合。
该函数的使用方式如下:```matlabcoefficients = polyfit(x, y, 2);```其中,x和y分别是已知点的横纵坐标,2表示使用二次多项式进行拟合。
coefficients是一个包含三个系数的向量,分别对应二次多项式的三个系数。
拟合完成之后,我们可以使用polyval函数来进行插值计算。
该函数的使用方式如下:```matlaby_interp = polyval(coefficients, x_interp);```其中,x_interp是要进行插值计算的位置,y_interp是计算得到的插值结果。
除了使用polyfit和polyval函数,我们还可以使用interp1函数来进行二次插值。
该函数的使用方式如下:```matlaby_interp = interp1(x, y, x_interp, 'spline');```其中,x和y分别是已知点的横纵坐标,x_interp是要进行插值计算的位置,'spline'表示使用样条插值方法。
在使用interp1函数进行二次插值时,需要注意x_interp的取值范围必须在已知点的范围内,否则会出现错误。
除了上述介绍的方法,Matlab还提供了其他一些函数和工具箱来进行二次插值,如griddata函数和Curve Fitting Toolbox等,读者可以根据具体需求选择合适的方法。
数值分析课后习题及答案第一章绪论(12)第二章插值法(40-42)2、当时,,求的二次插值多项式。
[解]。
3、给出的数值表用线性插值及二次插值计算的近似值。
X 0.4 0.5 0.6 0.7 0.8 -0.916291 -0.693147 -0.510826 -0.357765 -0.223144 [解]若取,,则,,则,从而。
若取,,,则,,,则,从而补充题:1、令,,写出的一次插值多项式,并估计插值余项。
[解]由,可知,,余项为,故。
2、设,试利用拉格朗日插值余项定理写出以为插值节点的三次插值多项式。
[解]由插值余项定理,有,从而。
5、给定数据表:,1 2 4 6 7 4 1 0 1 1 求4次牛顿插值多项式,并写出插值余项。
[解]一阶差商二阶差商三阶差商四阶差商 1 42 1 -34 0 6 17 1 0 由差商表可得4次牛顿插值多项式为:,插值余项为。
第三章函数逼近与计算(80-82)26、用最小二乘法求一个形如的经验公式,使它与下列数据相拟合,并求均方误差。
19 25 31 38 44 19.0 32.3 49.0 73.3 97.8[解]由。
又,,,故法方程为,解得。
均方误差为。
27、观测物体的直线运动,得出以下数据:时间t(秒)0 0.9 1.9 3.0 3.9 5.0 距离s(米)0 10 30 5080 110 [解]设直线运动为二次多项式,则由。
,。
又,,,故法方程为,解得。
故直线运动为。
补充题:1、现测得通过某电阻R的电流I及其两端的电压U如下表:I ……U ……试用最小二乘原理确定电阻R的大小。
[解]电流、电阻与电压之间满足如下关系:。
应用最小二乘原理,求R使得达到最小。
对求导得到:。
令,得到电阻R为。
2、对于某个长度测量了n次,得到n个近似值,通常取平均值作为所求长度,请说明理由。
[解]令,求x使得达到最小。
对求导得到:,令,得到,这说明取平均值在最小二乘意义下误差达到最小。
插值法题目1:对Runge 函数22511)(x x R +=在区间[-1,1]作下列插值逼近,并和R(x)的图像进行比较,并对结果进行分析。
(1)用等距节点,200,1.0,-1≤≤=+=i h ih x i 绘出它的20次Newton插值多项式的图像。
(2)用节点)20,,2,1,0(,)4212cos(⋅⋅⋅=+=i i x i π,绘出它的20次Lagrange 插值多项式的图像。
(3)用等距节点,200,1.0,-1≤≤=+=i h ih x i 绘出它的分段线性插值函数的图像。
(4)用等距节点,200,1.0,-1≤≤=+=i h ih x i 绘出它的三次自然样条插值函数的图像。
程序及分析:(1)用等距节点,200,1.0,-1≤≤=+=i h ih x i 绘出它的20次Newton插值多项式的图像。
Matlab 程序如下:%计算均差x=[-1::1];n=length(x);syms zfor i=1:ny(i)=1/(1+25*x(i)*x(i));endN=zeros(n,n);N(:,1)=y';for j=2:nfor k=j:nN(k,j)=(N(k,j-1)-N(k-1,j-1))/(x(k)-x(k-j+1));endendfor t=1:nc(t)=N(t,t)end%构造插值多项式f=N(1,1);for k=2:na=1;for r=1:(k-1)a=a*(z-x(r));endf=f+N(k,k)*a;end%作图a=[-1::1];n=length(a);for i=1:nb(i)=1/(1+25*a(i)*a(i)); endfx=subs(f,z,a);subplot(2,1,1);plot(a,b,'k',a,fx,'r');c=[::];n=length(c);for i=1:nd(i)=1/(1+25*c(i)*c(i));endfx=subs(f,z,c);subplot(2,1,2);plot(c,d,'k',c,fx,'r');结果与分析:由下图可以看出,在区间[,]上,插值多项式可以很好的逼近被插值函数。
而在边界附近,插值多项式与被插值函数的差别很大。
即出现了Runge现象。
主要原因是被插值函数的任意阶导数不能达到一致有界。
其插值余项)()!1()()(1)1(x n f x R n n n +++=ϖξ不趋近零。
插值多项式不能收敛到被插值函数。
(2) 用节点)20,,2,1,0(,)4212cos(⋅⋅⋅=+=i i x i π,绘出它的20次Lagrange 插值多项式的图像。
Matlab 程序如下:clear;%插值点Runge 函数插值多项式for i=1:21x(i)=cos((2*(i-1)+1)*pi/42);endn=length(x);for i=1:ny(i)=1/(1+25*x(i)*x(i));end%构造插值基函数syms z;temp=1;for i=1:nlx=1;for j=1:nif i~=jtemp=(z-x(j))/(x(i)-x(j));lx=lx*temp;endendl(i)=lx;end%插值多项式l=l';L=y*l;%作图a=[-1::1];n=length(a);for i=1:nb(i)=1/(1+25*a(i)*a(i)); endfx=subs(L,z,a);subplot(2,1,1);plot(a,b,'k',a,fx,'x r');结果与分析:如下图所示,使用Chebyshev 多项式零点构造的Lagrange 插值多项式比较接近原函数,没有出现Runge 现象。
主要原因是其多项式误差为∞++≤)1()!1(21)(-)(n n n f n x L x f 。
(3)用等距节点,200,1.0,-1≤≤=+=i h ih x i 绘出它的分段线性插值函数的图像。
Matlab程序如下:clc;clear;x=[-1::1];n=length(x);syms zfor i=1:ny(i)=1/(1+25*x(i)*x(i));end%构造分段线性插值多项式for i=1:n-1l(i)=(z-x(i+1))/(x(i)-x(i+1))*y(i)+(z-x(i))/(x(i+1)-x(i))*y (i+1)% l(i)=y(i)+(y(i+1)-y(i))/(x(i+1)-x(i))*(z-x(i))end%作图for i=1:n-1a=[x(i)::x(i+1)];f=subs(l(i),z,a)plot(a,f,'k')hold onend结果与分析:如下图所示,分段线性插值多项式比较接近原函数,没有出现Runge现象。
利用线性插值多项式的误差估计: )2(2max 8h )(f x R n ≤(4)用等距节点,200,1.0,-1≤≤=+=i h ih x i 绘出它的三次自然样条插值函数的图像。
Matlab 程序如下:clc;clear;x=[-1::1];n=length(x);syms z ;for i=1:ny(i)=1/(1+25*x(i)*x(i)); endfor i=1:n-1h(i)=x(i+1)-x(i);endfor i=1:n-2u(i)=h(i)/(h(i+1)+h(i));r(i)=1-u(i);endG=zeros(n,n);for i=1:nG(i,i)=2;endfor i=2:n-1G(i,i-1)=u(i-1);G(i,i+1)=r(i-1);endG(n,n-1)=1;G(1,2)=1;d=zeros(1,n);for i=2:n-1d(i)=6*((y(i+1)-y(i))/h(i)-(y(i)-y(i-1))/h(i-1))/(h(i)+h(i-1));endsyms u v;u=diff(1/(1+25*v*v),v);a=subs(u,v,x(1));b=subs(u,v,x(n));d(1)=((y(2)-y(1))/h(1)-a)/h(1)*6;d(n)=(b-(y(n)-y(n-1))/h(n-1))/h(n-1)*6;d=d';M=inv(G)*d;for i=1:n-1s(i)=M(i)*(x(i+1)-z)^3/+M(i+1)*(z-x(i))^3/+(y(i)-M(i)*6)*(x (i+1)-z)/+(y(i+1)-M(i+1)*6)*(z-x(i))/;endfor i=1:n-1a=[x(i)::x(i+1)];f=subs(s(i),z,a);plot(a,f,'x r')hold onend结果与分析:三次样条插值函数得到的图像如下:可以看出,三次样条插值函数的曲线及其光滑。
得到的函数十分接近被插值函数。
题目2:对函数:在区间[-1,1]作下列插值逼近,并和被插值函数的图像进行比较,并对结果进行分析。
(1)用等距节点,200,1.0,-1≤≤=+=i h ih x i 绘出它的20次Newton插值多项式的图像。
(2)用节点)20,,2,1,0(,)4212cos(⋅⋅⋅=+=i i x i π,绘出它的20次Lagrange 插值多项式的图像。
(3)用等距节点,200,1.0,-1≤≤=+=i h ih x i 绘出它的分段线性插值函数的图像。
(4)用等距节点,200,1.0,-1≤≤=+=i h ih x i 绘出它的三次自然样条插值函数的图像。
程序及分析:(1)用等距节点,200,1.0,-1≤≤=+=i h ih x i 绘出它的20次Newton插值多项式的图像。
Matlab 程序如下:clc;clear;%计算均差x=[-1::1];n=length(x);syms z;y=zeros(1,n)for i=1:10y(i)=sin(pi*x(i)); endfor i=11:15y(i)=cos(pi*x(i)); endfor i=15:ny(i)=0;endN=zeros(n,n);N(:,1)=y';for j=2:nfor k=j:nN(k,j)=(N(k,j-1)-N(k-1,j-1))/(x(k)-x(k-j+1));endendfor t=1:nc(t)=N(t,t);end%构造插值多项式f=N(1,1);for k=2:na=1;for r=1:(k-1)a=a*(z-x(r));endf=f+N(k,k)*a; end%作图v=linspace(-1,0,50); u=sin(pi*v);plot(v,u,'k')hold onv=linspace(0,,25);u=cos(pi*v);plot(v,u,'k')hold onv=linspace,1,10000); u=0;plot(v,u,'k')hold ona=[-1::1];fx=subs(f,z,a);plot(a,fx,'r');结果与分析:等距节点20次Newton 插值得到的函数图像如下:可以看出,在整个区间上,插值多项式精度都不是很高。
出现了Runge 现象。
被插值函数插值多项式(2)用节点)20,,2,1,0(,)4212cos(⋅⋅⋅=+=i i x i π,绘出它的20次Lagrange 插值多项式的图像。
Matlab 程序如下: clc;clear; %求插值节点 for i=1:21x(i)=cos((2*(i-1)+1)*pi/42); endn=length(x);被插值函数 插值多项式y=zeros(1,n);for i=1:nif x(i)<0y(i)=sin(pi*x(i));elseif x(i)>y(i)=0;elsey(i)=cos(pi*x(i));endend%插值基函数syms z;temp=1;for i=1:nlx=1;for j=1:nif i~=jtemp=(z-x(j))/(x(i)-x(j)); lx=lx*temp;endendl(i)=lx;end%插值多项式l=l';L=y*l;%作图a=[-1::1];fx=subs(L,z,a);plot(a,fx,'x r');结果与分析:如下图所示,使用Chebyshev 多项式零点构造的Lagrange 插值多项式比Newton 插值多项式接近原函数,没有出现Runge 现象。
(3)用等距节点,200,1.0,-1≤≤=+=i h ih x i 绘出它的分段线性插值函数的图像。