数值分析第四章实验报告

合集下载

实验四数值微积分实验报告

实验四数值微积分实验报告

实验四数值微积分实验报告实验四:数值微积分实验目的:1. 熟悉数值微积分的基本概念和方法;2. 学习使用Python进行数值积分和数值微分的计算;3. 掌握积分和微分的误差分析。

实验仪器:计算机、Python编程环境实验原理:1. 数值微积分是一种使用数值近似计算积分和微分的方法,适用于无法用解析方法求解的函数,或是为了简化计算过程而采用的方法。

2. 数值积分的常用方法有矩形法、梯形法和辛普森法等。

其中,矩形法是通过将区间分成若干小矩形来近似计算积分值;梯形法是通过将区间分成若干小梯形来近似计算积分值;辛普森法是通过将区间分成若干小曲线来近似计算积分值。

3. 数值微分的常用方法有中心差分法和向前差分法等。

其中,中心差分法是通过用相邻两点的斜率的平均值来近似计算导数值;向前差分法是通过用当前点和下一个点的斜率来近似计算导数值。

实验步骤:1. 导入Python所需的库和模块;2. 编写函数f(x),表示待求解的函数;3. 编写函数rectangular_rule(f, a, b, n),实现矩形法求积分;4. 编写函数trapezoidal_rule(f, a, b, n),实现梯形法求积分;5. 编写函数simpsons_rule(f, a, b, n),实现辛普森法求积分;6. 编写函数central_difference(f, x, h),实现中心差分法求导数;7. 编写函数forward_difference(f, x, h),实现向前差分法求导数;8. 调用以上函数,分别计算给定函数的积分和导数,并对结果进行误差分析;9. 打印输出实验结果。

实验结果:给定函数f(x):f(x) = x^3 + 2x^2 - 3x + 1使用矩形法计算积分,取n=1000,得到积分值为:-1.155使用梯形法计算积分,取n=1000,得到积分值为:-1.156使用辛普森法计算积分,取n=1000,得到积分值为:-1.155使用中心差分法计算导数,取x=1.0,h=0.001,得到导数值为:6.0使用向前差分法计算导数,取x=1.0,h=0.001,得到导数值为:4.0实验结论:1. 数值微积分是一种有效的数值计算方法,适用于无法用解析方法求解的函数;2. 在积分计算中,不同的数值积分方法会得到略有不同的结果,但结果误差一般很小;3. 在数值微分中,中心差分法的结果更加精确,但计算量较大;4. 数值微积分的误差分析是一个重要的环节,需要对结果进行误差评估和控制。

《数值分析》课程实验报告

《数值分析》课程实验报告

《数值分析》课程实验报告《数值分析》课程实验报告姓名:学号:学院:机电学院日期:2015年X月X日目录实验一函数插值方法1实验二函数逼近与曲线拟合5实验三数值积分与数值微分7实验四线方程组的直接解法9实验五解线性方程组的迭代法15实验六非线性方程求根19实验七矩阵特征值问题计算21实验八常微分方程初值问题数值解法24实验一函数插值方法一、问题提出对于给定的一元函数的n+1个节点值。

试用Lagrange公式求其插值多项式或分段二次Lagrange插值多项式。

数据如下:(1)0.40.550.650.800.951.050.410750.578150.696750.901.001.25382求五次Lagrange多项式,和分段三次插值多项式,计算,的值。

(提示:结果为,)(2)12345670.3680.1350.0500.0180.0070.0020.001试构造Lagrange多项式,计算的,值。

(提示:结果为,)二、要求1、利用Lagrange插值公式编写出插值多项式程序;2、给出插值多项式或分段三次插值多项式的表达式;3、根据节点选取原则,对问题(2)用三点插值或二点插值,其结果如何;4、对此插值问题用Newton插值多项式其结果如何。

Newton插值多项式如下:其中:三、目的和意义1、学会常用的插值方法,求函数的近似表达式,以解决其它实际问题;2、明确插值多项式和分段插值多项式各自的优缺点;3、熟悉插值方法的程序编制;4、如果绘出插值函数的曲线,观察其光滑性。

四、实验步骤(1)0.40.550.650.800.951.050.410750.578150.696750.901.001.25382求五次Lagrange多项式,和分段三次插值多项式,计算,的值。

(提示:结果为,)第一步:先在matlab中定义lagran的M文件为拉格朗日函数代码为:function[c,l]=lagran(x,y)w=length(x);n=w-1;l=zeros(w,w);fork=1:n+1v=1;forj=1:n+1if(k~=j)v=conv(v,poly(x(j)))/(x(k)-x(j ));endendl(k,:)=v;endc=y*l;end第二步:然后在matlab命令窗口输入:x=[0.40.550.650.80,0.951.05];y=[0.410750.578150.696750.901. 001.25382];lagran(x,y)回车得到:ans=121.6264-422.7503572.5667-377.2549121.9718-15.0845由此得出所求拉格朗日多项式为p(x)=121.6264x5-422.7503x4+572.5667x3-377.2549x2+121.9718x-15.0 845第三步:在编辑窗口输入如下命令:x=[0.40.550.650.80,0.951.05];y=121.6264*x.^5-422.7503*x.^4+ 572.5667*x.^3-377.2549*x.^2+121.9718*x-15.0845;plot(x,y)命令执行后得到如下图所示图形,然后x=0.596;y=121.6264*x.^5-422.7503*x.^4+572.5667*x.^3-377.254 9*x.^2+121.9718*x-15.084y=0.6262得到f(0.596)=0.6262同理得到f(0.99)=1.0547(2)12345670.3680.1350.0500.0180.0070.0020.001试构造Lagrange多项式,和分段三次插值多项式,计算的,值。

数值分析实验报告--解线性方程组的迭代法及其并行算法

数值分析实验报告--解线性方程组的迭代法及其并行算法

disp('请注意:高斯-塞德尔迭代的结果没有达 到给定的精度,并且迭代次数已经超过最大迭 代次数max1,方程组的精确解jX和迭代向量X 如下: ') X=X';jX=jX' end end X=X';D,U,L,jX=jX'
高斯-塞德尔的输入为:
A=[10 2 3;2 10 1;3 1 10]; b=[1;1;2]; X0=[0 0 0]'; X=gsdddy(A,b,X0,inf, 0.001,100) A=[10 2 3;2 10 1;3 1 10]; 请注意:因为对角矩阵 D 非奇异,所以此方程组有解.
0.0301 0.0758 0.1834
8.心得体会:
这已经是第三次实验了, 或多或少我已经对 MATLAB 有了更多的了 解与深入的学习。通过这次实验我了解了雅可比迭代法和高斯- 塞德尔迭代法的基本思想,虽然我们不能熟练编出程序,但还是 能看明白的。运行起来也比较容易,让我跟好的了解迭代法的多 样性,使平常手算的题能得到很好的验证。通过这次实验让我对 MATLAB 又有了更深一层的认识,使我对这门课兴趣也更加浓厚。
运行雅可比迭代程序输入: A=[10
b=[1;1;2];X0=[0 0 0]'; X=jacdd(A,b,X0,inf,0.001,100)
2 3;2 10 1;3 1 10];
结果为:
k= 1 X=
0.1000 k= 2 X= 0.0200 k= 3 X= 0.0400 k= 4 X= 0.0276 k= 5 X= 0.0314 k= 6 X= 0.0294 k= 7 X= 0.0301 k= 8 X= 0.0297
6、 设计思想:先化简,把对角线的项提到左边,其它项

数值分析实验报告4

数值分析实验报告4

function f=gg(x) f=sqrt(2.5-(x^3)/4); end
则三种方法运行出的结果分别为: >> BDD(1.5) k= 20 ans = 1.365229578333959 >> WA(1.5) k= 6 ans = 1.365230351032824 >> ATJ(1.5) k= 4 ans = 1.365230013413594 (5)在 MATLAB 的 Editor 中建立一个 M-文件,输入程序代码,实现 matlab 自带函数求根 的程序代码如下:
>>format long BDD(1.5) k= 7 ans = 1.365230575673434
(2)在 MATLAB 的 Editor 中建立一个 M-文件,输入程序代码,实现加权加速求根的程序 代码如下:
function [y,n]=WA(a,eps) if nargin==1 eps=1e-16; end syms x L=subs(diff(sqrt(10/(4+x))),a); xl=gg(a,L); n=1; E=abs(xl-a); while (E>=eps)&(n<=10000) x=xl; xl=gg(x,L); n=n+1; E=abs(xl-x); end
在 command Windows 中输入命令:XJF(1.5),得出的结果为:
>> XJF(1.5) k= 5 ans = 1.365230020178121 (8)在 MATLAB 的 Editor 中建立一个 M-文件,输入程序代码,实现抛物线法求根的程序
代码如下:
function [y,n] = parabola(fx,a,b,c,eps) if(nargin == 4) eps=1e-6; syms x fa = subs(fx,a); fb = subs(fx,b); fc = subs(fx,c); fb_a = (fb-fa)/(b-a); fc_b = (fc-fb)/(c-b); fc_b_a = (fc_b - fb_a)/(c-a); w = fc_b + fc_b_a*(c-b); x0 = c - 2*fc/(w+(w^2 - 4*fc*fc_b_a)^.5); n=1; if(abs(x0-c) > eps && n <= 10000) a=b; b=c; c=x0; fa = subs(fx,a); fb = subs(fx,b); fc = subs(fx,c); fb_a = (fb-fa)/(b-a); fc_b = (fc-fb)/(c-b); fc_b_a = (fc_b - fb_a)/(c-a); w = fc_b + fc_b_a*(c-b); x0=c - 2*fc/(w+(w^2 - 4*fc*fc_b_a)^.5); n=n+1; end y=x0; n; end end

数值分析实验报告

数值分析实验报告

数值分析实验报告
一、实验背景
本实验主要介绍了数值分析的各种方法。

在科学计算中,为了求解一
组常微分方程或一些极限问题,数值分析是一种有用的方法。

数值分析是
一种运用计算机技术对复杂模型的问题进行数学分析的重要手段,它利用
数学模型和计算机程序来解决复杂的数学和科学问题。

二、实验内容
本实验通过MATLAB软件,展示了以下几种数值分析方法:
(1)拉格朗日插值法:拉格朗日插值法是由法国数学家拉格朗日发
明的一种插值方法,它可以用来插值一组数据,我们使用拉格朗日插值法
对给定的点进行插值,得到相应的拉格朗日多项式,从而计算出任意一个
点的函数值。

(2)最小二乘法:最小二乘法是一种常用的数据拟合方法,它可以
用来拟合满足一定函数的点的数据,它的主要思想是使得数据点到拟合曲
线之间的距离的平方和最小。

(3)牛顿插值法:牛顿插值法是一种基于差商的插值方法,它可以
用来插值一组数据,可以求得一组数据的插值函数。

(4)三次样条插值:三次样条插值是一种基于三次样条的插值方法,它可以用来对一组数据进行插值,可以求得一组数据的插值函数。

三、实验步骤
1.首先启动MATLAB软件。

数值分析第四章4-1

数值分析第四章4-1

2011-10-31
2
引例与问题综述(续)
表4.1.1 函数表
x f(x)
x0 f(x0)
x1 f(x1)
… …
xn f(xn)
2011-10-31
3
引例与问题综述(续)
• • •
需要通过这组实验观测数据 (xi , yi ) (i =0, 1,2,…, n) 揭示自变量x与因变量y之间的关系。 一般地,可以用一个近似的函数关系式y = f(x)来表示 自变量x与因变量y之间的关系。 函数 f(x) 的产生办法因观测数据与要求的不同而异, 通常可采用两种方法:插值与数据拟合。
2011-10-31
20
2.如果给定的数据是大量的测试或统计的结果,并不是 必须严格遵守的,而是起定性地控制作用的,那么宜选用数据 拟合的方法。这是因为,一方面测试或统计数据本身往往带有 测量误差,如果要求所得的函数与所给数据完全吻合,就会使 所求函数保留着原有的测量误差;另一方面,测试或统计数据 通常很多,如果采用插值方法,不仅计算麻烦,而且逼近效果 往往较差。
2011-10-31
4
一、引例 引例1 海水温度问题 已经测得在北纬 32.3° 海洋不同深度处的温度如下表:
表4.1.2 海水温度表
深度x (m) 水温y (C°)
466 7.04
714 4.28
950 3.40
1422 2.54
1634 2.13
根据这些数据,我们希望能合理地估计出其它深度(如 500米、 600米、1000米…)处的水温。 解决这个问题,可以通过构造一个与给定数据相适应的函数来 解决,这是一个被称为插值的问题。
2011-10-31
21
问题综述(续)

数值分析原理实验报告

数值分析原理实验报告

一、实验目的通过本次实验,掌握数值分析的基本原理和方法,了解数值分析在科学和工程领域的应用,培养动手能力和分析问题的能力。

二、实验内容1. 二分法求方程根(1)原理:二分法是一种在实数域上寻找函数零点的算法。

对于连续函数f(x),如果在区间[a, b]上f(a)f(b)<0,则存在一个根在区间(a, b)内。

二分法的基本思想是将区间[a, b]不断二分,缩小根所在的区间,直到满足精度要求。

(2)实验步骤:① 输入函数f(x)和精度要求;② 初始化区间[a, b]和中间点c=a+(b-a)/2;③ 判断f(c)与f(a)的符号,若符号相同,则将区间缩小为[a, c],否则缩小为[c,b];④ 重复步骤②和③,直到满足精度要求;⑤ 输出根的近似值。

2. 牛顿法求方程根(1)原理:牛顿法是一种在实数域上寻找函数零点的算法。

对于可导函数f(x),如果在点x0附近,f(x0)f'(x0)≠0,则存在一个根在点x0附近。

牛顿法的基本思想是通过泰勒展开近似函数,然后求解近似方程的根。

(2)实验步骤:① 输入函数f(x)和精度要求;② 初始化迭代次数n=0,近似根x0;③ 计算导数f'(x0);④ 求解近似方程x1=x0-f(x0)/f'(x0);⑤ 判断|x1-x0|是否满足精度要求,若满足,则停止迭代;否则,将x0更新为x1,n=n+1,返回步骤③。

3. 雅可比迭代法解线性方程组(1)原理:雅可比迭代法是一种解线性方程组的迭代算法。

对于线性方程组Ax=b,雅可比迭代法的基本思想是利用矩阵A的对角线元素将方程组分解为多个一元线性方程,然后逐个求解。

(2)实验步骤:① 输入系数矩阵A和常数向量b;② 初始化迭代次数n=0,近似解向量x0;③ 计算对角线元素d1, d2, ..., dn;④ 更新近似解向量x1=x0-A/d1, x2=x0-A/d2, ..., xn=x0-A/dn;⑤ 判断|x1-x0|是否满足精度要求,若满足,则停止迭代;否则,将x0更新为x1, x2, ..., xn,n=n+1,返回步骤③。

数值分析实验报告

数值分析实验报告

数值分析实验报告篇一:数值分析实验报告(一)(完整)数值分析实验报告12345篇二:数值分析实验报告数值分析实验报告课题一:解线性方程组的直接方法1.实验目的:1、通过该课题的实验,体会模块化结构程序设计方法的优点;2、运用所学的计算方法,解决各类线性方程组的直接算法;3、提高分析和解决问题的能力,做到学以致用;4、通过三对角形线性方程组的解法,体会稀疏线性方程组解法的特点。

2.实验过程:实验代码:#include &quot;stdio.h&quot;#include &quot;math.h&quot;#includeiostreamusing namespace std;//Gauss法void lzy(double **a,double *b,int n) {int i,j,k;double l,x[10],temp;for(k=0;kn-1;k++){for(j=k,i=k;jn;j++){if(j==k)temp=fabs(a[j][k]);else if(tempfabs(a[j][k])){temp=fabs(a[j][k]);i=j;}}if(temp==0){cout&quot;无解\n; return;}else{for(j=k;jn;j++){temp=a[k][j];a[k][j]=a[i][j];a[i][j]=temp;}temp=b[k];b[k]=b[i];b[i]=temp;}for(i=k+1;in;i++) {l=a[i][k]/a[k][k];for(j=k;jn;j++)a[i][j]=a[i][j]-l*a[k][j]; b[i]=b[i]-l*b[k];}if(a[n-1][n-1]==0){cout&quot;无解\n;return;}x[n-1]=b[n-1]/a[n-1][n-1];for(i=n-2;i=0;i--){temp=0;for(j=i+1;jn;j++)temp=temp+a[i][j]*x[j];x[i]=(b[i]-temp)/a[i][i];}for(i=0;in;i++){printf(&quot;x%d=%lf\t&quot;,i+1,x[i]); printf(&quot;\n&quot;);}}//平方根法void pfg(double **a,double *b,int n)int i,k,m;double x[8],y[8],temp;for(k=0;kn;k++){temp=0;for(m=0;mk;m++)temp=temp+pow(a[k][m],2);if(a[k][k]temp)return;a[k][k]=pow((a[k][k]-temp),1.0/2.0);for(i=k+1;in;i++){temp=0;for(m=0;mk;m++)temp=temp+a[i][m]*a[k][m]; a[i][k]=(a[i][k]-temp)/a[k][k]; }temp=0;for(m=0;mk;m++)temp=temp+a[k][m]*y[m];y[k]=(b[k]-temp)/a[k][k];}x[n-1]=y[n-1]/a[n-1][n-1];for(k=n-2;k=0;k--){temp=0;for(m=k+1;mn;m++)temp=temp+a[m][k]*x[m];x[k]=(y[k]-temp)/a[k][k];}for(i=0;in;i++){printf(&quot;x%d=%lf\t&quot;,i+1,x[i]);printf(&quot;\n&quot;);}}//追赶法void zgf(double **a,double *b,int n){int i;double a0[10],c[10],d[10],a1[10],b1[10],x[10],y[10]; for(i=0;in;i++){a0[i]=a[i][i];if(in-1)c[i]=a[i][i+1];if(i0)d[i-1]=a[i][i-1];}a1[0]=a0[0];for(i=0;in-1;i++){b1[i]=c[i]/a1[i];a1[i+1]=a0[i+1]-d[i+1]*b1[i];}y[0]=b[0]/a1[0];for(i=1;in;i++)y[i]=(b[i]-d[i]*y[i-1])/a1[i];x[n-1]=y[n-1];for(i=n-2;i=0;i--)x[i]=y[i]-b1[i]*x[i+1];for(i=0;in;i++){printf(&quot;x%d=%lf\t&quot;,i+1,x[i]); printf(&quot;\n&quot;);}}int main(){int n,i,j;double **A,**B,**C,*B1,*B2,*B3;A=(double **)malloc(n*sizeof(double)); B=(double **)malloc(n*sizeof(double));C=(double **)malloc(n*sizeof(double));B1=(double *)malloc(n*sizeof(double));B2=(double *)malloc(n*sizeof(double));B3=(double *)malloc(n*sizeof(double));for(i=0;in;i++){A[i]=(double *)malloc((n)*sizeof(double));B[i]=(double*)malloc((n)*sizeof(double));C[i]=(double*)malloc((n)*sizeof(double)); }cout&quot;第一题(Gauss列主元消去法):&quot;endlendl; cout&quot;请输入阶数n:&quot;endl;cinn;cout&quot;\n请输入系数矩阵:\n\n&quot;;for(i=0;in;i++)for(j=0;jn;j++){篇三:数值分析实验报告(包含源程序) 课程实验报告课程实验报告。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数学与信息科学学院实验报告课程名称:现代数值计算姓名:学号:专业班级:指导教师:2018-2019 学年 1 学期实验(二)数值实验二课后习题实验日期: 2018年10月24日 实验类型: 验证型 实验成绩:一、实验目的1. 了解并熟悉拉格朗日插值的定义和计算过程;2. 熟悉如何使用Matlab 计算以n+1个等距节点为条件的插值多项式;3. 熟悉如何使用Matlab 计算以切比雪夫点为条件的插值多项式;4. 进一步熟悉并掌握Matlab 的基本命令以及绘图命令的简单操作;二、实验内容1. 在区间[]5,5-,使用21个等距节点,找出龙格函数()12()1f x x -=+的20阶插值多项式()p x ,并打印出()f x 和()p x 的图形,观察()f x 和()p x 的最大偏差;2. 在同样的条件下,使用切比雪夫点()5cos 20i x i π=,020i ≤≤,找出函数()12()1f x x -=+的20阶插值多项式()q x 。

打印出()f x 和()q x 图形,观察()f x 和()q x 偏差值;3. 对比两次插值结果,分析得出结论;三、实验结果与分析1.源程序1)拉格朗日(Lagrange)函数的Function 文件function YValue_Inter = Lagrange( XValue_Real,YValue_Real,XValue_Inter) n = length(YValue_Real);YValue_Inter = zeros(size(XValue_Inter));for k = 1:npt = ones(size(XV alue_Inter));for j = [1:k-1 k+1:n]pt = pt .* (XValue_Inter - XValue_Real(j)) / (XValue_Real(k) - XValue_Real(j));endYValue_Inter = YValue_Inter + YValue_Real(k) * pt;endend以下是运行程序:clc;clear all;clc;Xmin = -5;Xmax = 5;Length_Interval = Xmax - Xmin;N_Value = 20;X_Value = Xmin: Length_Interval / N_Value : Xmax;Y_Value = 1 ./ (1+ X_Value.^2);X_Inter_Value = Xmin: Length_Interval / (N_Value * 5) : Xmax;Y_Inter_Value = Lagrange(X_Value,Y_Value,X_Inter_Value);X = Xmin: Length_Interval / (N_Value * 5) : Xmax;Y = 1 ./ (1+ X.^2);Different_Value = Y - Y_Inter_Value;Different_Value_ABS = abs(Different_Value);Max_Different_Value = max(Different_Value_ABS);Min_Different_Value = min(Different_Value_ABS);figure(1);plot(X_Inter_Value,Y_Inter_Value,'r--',X,Y,'bo');legend('Lagrange interpolating polynomial','f(x)');figure(2);plot(X,Different_Value_ABS);legend('Different Value');运行结果如图1所示。

图1(a)是真实的函数值()f x ,图1(b)是经过拉格朗日插值之后的多项式()p x ,图1(c)是()p x 和()f x 的差()()=abs p x f x ∆-⎡⎤⎣⎦,图1(d)是()p x 和()f x 的最大偏差和最小偏差。

可以看出在区间的两端该偏差比较大,而且,最大的偏差会达到58.2781。

(a) (b)(c) (d)图1 实验一数据图2.源程序clc;clear all;clc;Xmin = -5;Xmax = 5; Length_Interval = Xmax - Xmin;N_Value = 20;Length_Number = 10;T_Value = 0: 1 * Length_Interval / N_Value : Length_Interval;X_Value_Inter = 5 * cos(pi * T_Value / Length_Interval);Y_Value_Real = 1 ./ (1 + X_Value_Inter.^2);P_Value = polyfit(X_Value_Inter,Y_Value_Real,N_Value);X1_Value = Xmin: Length_Interval / (N_Value * Length_Number) : Xmax;Y1_Value = polyval(P_Value,X1_Value);X2_Value = Xmin: Length_Interval / (N_Value * Length_Number) : Xmax;Y2_Value = 1 ./ (1 + X2_Value.^2);figure(1);plot(X_Value_Inter,Y_Value_Real,'bo');legend('interpolating data');figure(2);plot(X_Value_Inter,Y_Value_Real,'r--',X2_Value,Y2_Value,'b*');legend('interpolating data','f(x)');figure(3);plot(X1_Value,Y1_V alue,'r--',X2_Value,Y2_Value,'b*');legend('Chebyshev interpolating polynomial','f(x)');Chebyshev_Different_Value = abs(Y1_Value - Y2_Value);Max_Difference = max(Chebyshev_Different_Value)Min_Difference = min(Chebyshev_Different_Value)运行结果如图2所示。

图2(a)是在切比雪夫插值点的函数的真实值()f x,图2(b)是线性拟合的数据和真实值的对比情况,图2(c)是使用切比雪夫插值点进行插值拟合的数据和真实的数据的对比,图2(d)是()f x的偏差值。

q x和()运行程序可以看到()f x的最大偏差仅为0.0177。

从运行结果上看,该q x和()拟合达到了很好的逼近效果。

(a) (b)(c) (d)图2 实验二数据图 四、实验总结1. 通过本次实验,进一步熟悉了MATLAB 中的基本命令、脚本文件的风格结构、函数文件的编写规范。

了解到选择结构的使用方法,可以使用绘图命令绘制基本的函数图形,并在对应的函数图像上添加标签,能够在给定的矩阵中,找到最大和最小元素。

2. 根据拉格朗日基本的插值多项式的表达式,()0000n n n i n i i i j j i j ij x x L x y l y x x ===≠-==-∑∑∏,我们可以进行插值函数的编写。

其中,语句j = [1:k-1 k+1:n]的含义是:在区间[]1,n 上,剔除j k =的项,这一点和拉格朗日插值的基函数求解相符合;3. polyfit 和polyval 是MATLAB 中的内部函数,使用这个polyfit 函数我们可以得到插值函数的各幂次的系数。

同样地,使用polyval 函数我们可以得到给定数据点处的数值。

4. 由图1(b)和图1(c)的对比可以得到,使用等距节点的拉格朗日插值,从原点到区间的两端,()p x 和()f x 的偏差会逐渐增大,而在区间中点附近,()p x 和()f x 基本没有偏差;5. 由图2(b)和图2(c)的对比可以得到,使用切比雪夫插值点得到的插值多项式()q x 的函数值和()f x 的函数值基本一致。

从运行的结果来看,()q x 和()f x 的最大偏差仅为0.0177。

6. 在同样的插值节点上,对用一个函数分别使用不同的插值方法,其中,使用切比雪夫插值点的插值多项式()q x 比使用均匀分布的节点上的插值多项式()p x 能够更好地接近函数()()21551f x x x=-≤≤+。

7. 需要说明的是,并不是所有的使用切比雪夫插值点的插值多项式()q x 都能比使用均匀分布的节点上的插值多项式()p x 更好地接近函数()f x 。

如图3所示,实验验证了当5,10,15,20n n n n ====时,使用切比雪夫插值点的插值多项式()q x 和()f x 的对比情况。

从图3中我们可以看到,随着n 的增大(切比雪夫点的增加),()q x 才能更好地接近()f x 。

(a) 5n = (b) 10n =(c) 15n = (d) 20n = 图3 不同节点数的切比雪夫插值点的插值多项式对比。

相关文档
最新文档