现代数值计算方法实验三
- 格式:doc
- 大小:105.00 KB
- 文档页数:10
实验三(3.2教材P44)一.实验目的绘制飞机的降落曲线一架飞机飞临北京国际机场上空时,其水平速度为540km/h ,飞行的高度为1000m 。
飞机从距机场指挥塔的横向距离12000m 开始降落。
根据经验,一架水平飞行的飞机其降落曲线是一条三次曲线。
建立直角坐标系,设飞机的着落点为原点O ,降落的飞机为动点平(x,y),则x 表示飞机距指挥塔的距离,y 表示飞机的飞行高度,降落区曲线为y(x)=a 0+a 1x+a 2x^2+a 3x^3,该函数满足条件:y(0)=0; y(12000)=1000;y ’(0)=0;y ’(12000)=0(1)试利用y(x)满足的条件确定三次多项式中的四个系数;(2)用所求出的三次多项式函数绘制出飞机降落曲线。
二.实验原理由于332210)(x a x a x a a x y +++=,所以2321)('x a x a a x y ++=,根据初始条件,可列出一个方程组UX=b ; X=[a 0 a 1 a 2 a 3]T ; b = [0 1000 0T 0],根据公式X=U -1b 即可求出X 。
求出X 之后便可求出y(x)的表达式,然后画出它在区间[0,12000]上的图像。
三.实验结果四.实验分析在求解系数a0 a1 a2 a3时,由于计算时会出现舍入误差,所以求得的系数与准确值之间存在一定的误差,但由于误差很小所以对总体的影响也不大。
五.程序步骤U=[1 0 0 0;1 12000 12000^2 12000^3;0 1 0 0;0 1 24000 3*12000^2];b=[0 1000 0 0]';X=inv(U)*b;format longX; %%以上的程序是为了求出多项式中的四个系数x=0:12000;y=X(1)+X(2)*x+X(3)*x.^2+X(4)*x.^3; %%将所求出的系数代入多项式plot(x,y,'.m');xlabel('自变量x');ylabel('因变量y');title('飞机的降落曲线') %%确定xy轴以及标题grid on。
数值代数实验报告数值代数实验报告引言:数值代数是一门研究数值计算方法和算法的学科,它在科学计算和工程应用中起着重要的作用。
本实验报告旨在通过实际的数值计算问题,探讨数值代数的应用和效果。
实验一:线性方程组求解线性方程组求解是数值代数中的一个重要问题。
在实验中,我们使用了高斯消元法和LU分解法两种求解线性方程组的方法,并对比了它们的效果。
首先,我们考虑一个3×3的线性方程组:2x + 3y - z = 54x - 2y + 2z = 1x + y + z = 3通过高斯消元法,我们将该方程组转化为上三角形式,并得到解x=1, y=2, z=0。
而通过LU分解法,我们将该方程组分解为LU两个矩阵的乘积,并得到相同的解。
接下来,我们考虑一个更大的线性方程组,例如10×10的方程组。
通过比较高斯消元法和LU分解法的运行时间,我们可以发现LU分解法在处理大规模方程组时更加高效。
实验二:特征值与特征向量计算特征值与特征向量计算是数值代数中的另一个重要问题。
在实验中,我们使用了幂法和QR方法两种求解特征值与特征向量的方法,并对比了它们的效果。
首先,我们考虑一个3×3的矩阵:1 2 34 5 67 8 9通过幂法,我们可以得到该矩阵的最大特征值为15.372,对应的特征向量为[0.384, 0.707, 0.577]。
而通过QR方法,我们也可以得到相同的结果。
接下来,我们考虑一个更大的矩阵,例如10×10的矩阵。
通过比较幂法和QR 方法的运行时间,我们可以发现QR方法在处理大规模矩阵时更加高效。
实验三:奇异值分解奇异值分解是数值代数中的一种重要技术,它可以将一个矩阵分解为三个矩阵的乘积,从而实现数据降维和信息提取的目的。
在实验中,我们使用了奇异值分解方法,并通过实际的数据集进行了验证。
我们选取了一个包含1000个样本和20个特征的数据集,通过奇异值分解,我们将该数据集分解为三个矩阵U、S和V的乘积。
本科实验报告课程名称:计算机数值方法实验项目:方程求根、线性方程组的直接解法、线性方程组的迭代解法、代数插值实验地点:专业班级:学生姓名:指导教师:实验一方程求根}五、实验结果与分析二分法实验结果迭代法实验结果结果分析:本题目求根区间为[1,2],精度满足|x*-x n|<0.5×10-5,故二分法用公式|x*-x n|<(b-a)/ 2n,可求得二分次数并输出每次结果。
对迭代法首先要求建立迭代格式。
迭代格式经计算已输入程序之中,故直接给初值便可利用迭代法求出精度下的解。
六、讨论、心得每次的实验都是对已学过的理论知识的一种实战。
通过本次实验,我将二分法与迭代法的思路清晰化并且将其变成计算机设计语言编写出来,运用到了实际解决问题上感觉很好。
我自认为本次跟其他同学比较的优点在于我在二分法实现的时候首先利用换底公式将需要的二分次输输出,如此便很清晰明了的知道接下来每一步的意思。
迭代法给我的感觉便是高度的便捷简化,仅用几行代码便可以同样解决问题。
相比较二分法来说,我更喜欢迭代的思路。
实验二线性方程组的直接解法for(k=n-2;k>=0;k--){sum=0;for(j=k+1;j<n;j++)sum=sum+a[k][j]*x[j];x[k]=(b[k]-sum)/a[k][k];}for(i=0;i<n;i++)printf("x[%d]=%f ",i,x[i]); printf("\n"); //输出解向量x}五、实验结果与分析结果结果分析:如上图所示,输入线性方程组元数n=3,则会要求输入3*3的系数矩阵A与向量b构成的增广矩阵。
根据算法需要将系数矩阵A消元成上三角矩阵。
随后根据矩阵乘法公式变形做对应的回代。
六、讨论、心得本次实验在编写时候感觉还好,感觉将思路变成了程序设计语言,得以实现题目的要求。
但是在运行以及结果分析的时候,感觉到了本实验的一些不足之处:就是我的实验虽然可以实现不同的元数的线性方程组求解,但是缺少了分析初始条件——主元素不能为零。
数值计算方法实验报告一、实验介绍本次实验是关于数值计算方法的实验,旨在通过计算机模拟的方法,实现对于数值计算方法的掌握。
本次实验主要涉及到的内容包括数值微积分、线性方程组的求解、插值与拟合、常微分方程的数值解等。
二、实验内容1. 数值微积分数值微积分是通过计算机模拟的方法,实现对于微积分中的积分运算的近似求解。
本次实验中,我们将会使用梯形公式和辛普森公式对于一定区间上的函数进行积分求解,并比较不同公式的计算误差。
2. 线性方程组的求解线性方程组求解是数值计算领域中的重要内容。
本次实验中,我们将会使用高斯消元法、LU分解法等方法对于给定的线性方程组进行求解,并通过比较不同方法的计算效率和精度,进一步了解不同方法的优缺点。
3. 插值与拟合插值与拟合是数值计算中的另一个重要内容。
本次实验中,我们将会使用拉格朗日插值法和牛顿插值法对于给定的数据进行插值求解,并使用最小二乘法对于给定的函数进行拟合求解。
4. 常微分方程的数值解常微分方程的数值解是数值计算中的难点之一。
本次实验中,我们将会使用欧拉法和龙格-库塔法等方法对于给定的常微分方程进行数值解的求解,并比较不同方法的计算精度和效率。
三、实验结果通过本次实验,我们进一步加深了对于数值计算方法的理解和掌握。
在数值微积分方面,我们发现梯形公式和辛普森公式都能够有效地求解积分,但是辛普森公式的计算精度更高。
在线性方程组求解方面,我们发现LU分解法相对于高斯消元法具有更高的计算效率和更好的数值精度。
在插值与拟合方面,我们发现拉格朗日插值法和牛顿插值法都能够有效地进行插值求解,而最小二乘法则可以更好地进行函数拟合求解。
在常微分方程的数值解方面,我们发现欧拉法和龙格-库塔法都能够有效地进行数值解的求解,但是龙格-库塔法的数值精度更高。
四、实验总结本次实验通过对于数值计算方法的模拟实现,进一步加深了我们对于数值计算方法的理解和掌握。
在实验过程中,我们了解了数值微积分、线性方程组的求解、插值与拟合、常微分方程的数值解等多个方面的内容,在实践中进一步明确了不同方法的特点和优缺点,并可以通过比较不同方法的计算效率和数值精度来选择合适的数值计算方法。
数值计算方法上机实验报告
一、实验目的
本次实验的主要目的是熟悉和掌握数值计算方法,学习梯度下降法的
原理和实际应用,熟悉Python语言的编程基础知识,掌握Python语言的
基本语法。
二、设计思路
本次实验主要使用的python语言,利用python下的numpy,matplotlib这两个工具,来实现数值计算和可视化的任务。
1. 首先了解numpy的基本使用方法,学习numpy的矩阵操作,以及numpy提供的常见算法,如矩阵分解、特征值分解等。
2. 在了解numpy的基本操作后,可以学习matplotlib库中的可视化
技术,掌握如何将生成的数据以图表的形式展示出来。
3. 接下来就是要学习梯度下降法,首先了解梯度下降法的主要原理,以及具体的实际应用,用python实现梯度下降法给出的算法框架,最终
可以达到所期望的优化结果。
三、实验步骤
1. 熟悉Python语言的基本语法。
首先是熟悉Python语言的基本语法,学习如何使用Python实现变量
定义,控制语句,函数定义,类使用,以及面向对象编程的基本概念。
2. 学习numpy库的使用方法。
其次是学习numpy库的使用方法,学习如何使用numpy库构建矩阵,学习numpy库的向量,矩阵操作,以及numpy库提供的常见算法,如矩阵分解,特征值分解等。
3. 学习matplotlib库的使用方法。
实验3 插值法与数值积分一、实验目的(1)掌握拉格朗日插值法、牛顿插值法。
(2)掌握数值积分常用算法:逐次分半梯形公式求积。
(3)记录运行结果,回答问题,完成实验报告。
二、实验内容思考问题:插值多项式是否阶次越高越好?数值积分与插值的关系是什么?逐次分半梯形公式求积如何判断误差是否满足要求?1.用拉格朗日插值法求2的平方根。
提示:可以用抛物线插值,f(1.69)=1.3,f(1.96)=1.4,f(2.25)=1.5。
2.用牛顿插值法求2的平方根。
提示:可以用抛物线插值,f(1.69)=1.3,f(1.96)=1.4,f(2.25)=1.5。
3.用逐次分半梯形公式求积计算∫x2dx。
提示:可以用相邻两次求得的结果的差的绝对值来间接判断误差是否满足要求。
三、实验步骤1.代码如下:#include<stdio.h>#include<math.h>#define MAXSIZE 50void input(double x[MAXSIZE],double y[MAXSIZE],long n){long i;for(i=0;i<=n-1;i++){printf("请输入插值节点x[%ld],y[%ld]:",i,i);scanf("%lf,%lf",&x[i],&y[i]);}}void main(void){double x[MAXSIZE],y[MAXSIZE],_x,_y,t;long n,i,j;printf("请输入插值节点的个数:");scanf("%ld",&n);input(x,y,n);printf("请输入插值点:");scanf("%lf",&_x);_y = 0;for(i=0;i<=n-1;i++){t = 1;for(j=0;j<=n-1;j++)if(j != i)t *= (_x-x[j]) / (x[i]-x[j]);_y += t * y[i];}printf("插值点(x,y)=(%lf,%lf)。
第1篇一、实验目的1. 理解数值计算的基本概念和常用算法;2. 掌握Python编程语言进行数值计算的基本操作;3. 熟悉科学计算库NumPy和SciPy的使用;4. 分析算法的数值稳定性和误差分析。
二、实验内容1. 实验环境操作系统:Windows 10编程语言:Python 3.8科学计算库:NumPy 1.19.2,SciPy 1.5.02. 实验步骤(1)Python编程基础1)变量与数据类型2)运算符与表达式3)控制流4)函数与模块(2)NumPy库1)数组的创建与操作2)数组运算3)矩阵运算(3)SciPy库1)求解线性方程组2)插值与拟合3)数值积分(4)误差分析1)舍入误差2)截断误差3)数值稳定性三、实验结果与分析1. 实验一:Python编程基础(1)变量与数据类型通过实验,掌握了Python中变量与数据类型的定义方法,包括整数、浮点数、字符串、列表、元组、字典和集合等。
(2)运算符与表达式实验验证了Python中的算术运算、关系运算、逻辑运算等运算符,并学习了如何使用表达式进行计算。
(3)控制流实验学习了if-else、for、while等控制流语句,掌握了条件判断、循环控制等编程技巧。
(4)函数与模块实验介绍了Python中函数的定义、调用、参数传递和返回值,并学习了如何使用模块进行代码复用。
2. 实验二:NumPy库(1)数组的创建与操作通过实验,掌握了NumPy数组的基本操作,包括创建数组、索引、切片、排序等。
(2)数组运算实验验证了NumPy数组在数学运算方面的优势,包括加、减、乘、除、幂运算等。
(3)矩阵运算实验学习了NumPy中矩阵的创建、操作和运算,包括矩阵乘法、求逆、行列式等。
3. 实验三:SciPy库(1)求解线性方程组实验使用了SciPy库中的线性代数模块,通过高斯消元法、LU分解等方法求解线性方程组。
(2)插值与拟合实验使用了SciPy库中的插值和拟合模块,实现了对数据的插值和拟合,并分析了拟合效果。
数值分析实验报告指导老师:宛艳萍姓名:班级:学号:实验三 复化辛卜生法,龙贝格法1.实验名称:复化辛卜生法,龙贝格法2.实验目的1)通过实际计算体会各种方法的精确度。
2)会编写用复化辛卜生、龙贝格算法求定积分的程序。
3.算法描述1)用复化辛卜生法计算积分 dxx I ⎰+=12)1/(1算法:复化辛卜生公式为S n =h/6∑∑+-=+++)]()2/(4)([11k k kn k x f h x f xf ,计算过程为:1.令,/)(n a b h -= ),2/(1h a f s +=;02=s2.对1,,2,1-=n k计算),2/(11h kh a f s s +++=)(22kh a f s s ++=3.))(24)((6/21b f s s a f h s +++= 。
2)龙贝格算法计算dxxI ⎰+=102)1/(156e ε=-算法)((12/12∑-=++=n k k n n n x f h T T ;/)(n a b h n -= n k h k x )2/1(2/1+=+)(3/122n n n n T T T S -+= )_(15/122n n n n S S S C +=)(63/122n n n n C C C R -+=用事后估计法控制精度2|5e -6n n R R -< 。
4.源程序:1)/* 用复化辛卜生公式求积分 */ #include "stdio.h" float fx(float x){double f;f=1.0/(1.0+x*x); return f; } double fs(int n){double a=0.0,b=1.0,h,s,s1,s2=0; int i;h=(b-a)/n; s1=fx(a+h/2); for(i=1;i<n;i++){s1=s1+fx(a+i*h+h/2); s2=s2+fx(a+i*h);}s=(h/6.0)*(fx(a)+fx(b)+4*s1+2*s2);return s;}void main(){printf("实验三复化辛卜生法计算机112 耿向飞学号:112434\n");printf("s(2)=%lf\ns(4)=%lf\ns(8)= %lf",fs(2),fs(4),fs(8));}2)/* 龙贝格法 */#include "stdio.h"#include "math.h"#define E 2.71828182//被积函数f(x)double fx(double x){double f;f=1/(1+x*x);return f;}//梯形公式求tndouble tx(int n){double s3=0.0,h,t,b=1.0,a=0.0;int i;h=(b-a)/n;for(i=1;i<n;i++)s3=s3+fx(i*h);t=(h/2)*(fx(a)+fx(b)+2*s3);return t;} double s(int n){double s;s=tx(2*n)+(1.0/3.0)*(tx(2*n)-tx(n ));return s;}double c(int n){double c;c=s(2*n)+(1.0/15.0)*(s(2*n)-s(n)) ;return c;}double r(int n){double r;r=c(2*n)+(1.0/63.0)*(c(2*n)-c(n)) ;return r;}void main(){double rr,pp;int n=1;rr=r(n);pp=r(2*n)-r(n);printf("实验三龙贝格法计算机112 耿向飞学号:112434\n");printf("结果为:%.15lf 误差小于等于: %.15lf",rr,pp);}5.运行结果1)复化辛卜生公式2)龙贝格算法6.对算法的理解与分析:复化辛卜生公式和龙贝格算法适用于求数值积分,而且都能提高计算积分的精度龙贝格算法其实是在复化辛卜生公式递推的基础之上生成的一种精度高,而且收敛速度也较快的一种算法。
第1篇一、实验目的1. 理解并掌握插值法的基本原理和常用方法。
2. 学习使用拉格朗日插值法、牛顿插值法等数值插值方法进行函数逼近。
3. 分析不同插值方法的优缺点,并比较其精度和效率。
4. 通过实验加深对数值分析理论的理解和应用。
二、实验原理插值法是一种通过已知数据点来构造近似函数的方法。
它广泛应用于科学计算、工程设计和数据分析等领域。
常用的插值方法包括拉格朗日插值法、牛顿插值法、样条插值法等。
1. 拉格朗日插值法拉格朗日插值法是一种基于多项式的插值方法。
其基本思想是:给定一组数据点,构造一个次数不超过n的多项式,使得该多项式在这些数据点上的函数值与已知数据点的函数值相等。
2. 牛顿插值法牛顿插值法是一种基于插值多项式的差商的插值方法。
其基本思想是:给定一组数据点,构造一个次数不超过n的多项式,使得该多项式在这些数据点上的函数值与已知数据点的函数值相等,并且满足一定的差商条件。
三、实验内容1. 拉格朗日插值法(1)给定一组数据点,如:$$\begin{align}x_0 &= 0, & y_0 &= 1, \\x_1 &= 1, & y_1 &= 4, \\x_2 &= 2, & y_2 &= 9, \\x_3 &= 3, & y_3 &= 16.\end{align}$$(2)根据拉格朗日插值公式,构造插值多项式:$$P(x) = \frac{(x-x_1)(x-x_2)(x-x_3)}{(x_0-x_1)(x_0-x_2)(x_0-x_3)}y_0 + \frac{(x-x_0)(x-x_2)(x-x_3)}{(x_1-x_0)(x_1-x_2)(x_1-x_3)}y_1 + \frac{(x-x_0)(x-x_1)(x-x_3)}{(x_2-x_0)(x_2-x_1)(x_2-x_3)}y_2 + \frac{(x-x_0)(x-x_1)(x-x_2)}{(x_3-x_0)(x_3-x_1)(x_3-x_2)}y_3.$$(3)计算插值多项式在不同点的函数值,并与实际值进行比较。
实验报告实验三 插值法与拟合实验一、实验目的1、懂得利用数据建模两种方法(插值法和拟合多项式法)对一批数据()11,y x ,()22,y x ,……,()n n y x ,进行处理,学会对数据的结果进行误差分析.2、比较分析这些方法的优缺点,并且在适合的场合应用相应的方法.二、实验题目1. 插值效果的比较实验题目:将区间][5,5-10等分,对下列函数分别计算插值节点k x 的值,进行不同类型的插值,作出插值函数的图形并与()x f y =的图形进行比较:)211xx f +=; ()x x f a r c t a n =; ()421xxx f +=.(1) 做拉格朗日插值; (2) 做三次样条插值. 2. 拟合多项式实验实验题目:给定数据点如下表所示:分别对上述数据作三次多项式和五次多项式拟合,并求平方误差,作出离散函数(i x ,i y )和拟合函数的图形.三、实验原理数据建模有两大方法:一类是插值方法,要求所要函数()x ϕ严格遵守从数据()11,y x ,()22,y x ,……,()n n y x ,;另一类是拟合方法,允许函数()x ϕ在数据点上的有误差,但是要求达到某种误差指标的最小化.第一题⑴拉格朗日插值算法原理%malagr.mfunction yy=malagr(x,y,xx)%用途:拉格朗日插值法求解%格式:yy=malagr(x,y,xx), x是节点向量,y是节点对应的函数值向量,% xx是插值点(可以是多个),,yy返回插值结果m=length(x);n=length(y);if m~=n, error('向量x与y的长度必须一致');ends=0;for i=1:nt=ones(1,length(xx));for j=1:nif j~=it=t.*(xx-x(j))/(x(i)-x(j));endends=s+t*y(i);endyy=s;end⑵三次样条插值算法原理:%maspline.mfunction m=maspline(x,y,dy0,dyn,xx)%用途:三阶样条插值(一阶导数边界条件)%格式:m=maspline(x,y,dy0,dyn,xx), x为节点向量,y为数据,%dy0,dyn为左右两端点的一阶导数如果xx缺省,则输出各节点的%的一阶导数值,,m为xx的三阶样条插值format short;n=length(x)-1; %计算小区间的个数h=diff(x); lambda=h(2:n)./(h(1:n-1)+h(2:n)); mu=1-lambda;theta=3*(lambda.*diff(y(1:n))./h(1:n-1)+mu.*diff(y(2:n+1))./h(2:n)); theta(1)=theta(1)-lambda(1)*dy0;theta(n-1)=theta(n-1)-lambda(n-1)*dyn;%追赶法解散对焦方程组dy=machase(lambda,2*ones(1:n-1),mu,theta);%若给插值点,计算插值m=[dy0;dy;dyn];if nargin>=5s=zeros(size(xx));for i=1:nif i==1kk=find(xx<=x(2));elseif i==nkk=find(xx>x(n));elsekk=find(xx>x(i)&xx<=x(i+1));endxbar=(xx(kk)-x(i))/h(i);s(kk)=alpha0(xbar)*y(i)+alpha1(xbar)*y(i+1)+...+h(i)*beta0(xbar)*m(i)+h(i)*beta1(xbar)*m(i+1);endm=s;end%追赶法function x=machase(a,b,c,d)n=length(a);for k=2:nb(k)=b(k)-a(k)/b(k-1)*c(k-1);d(k)=d(k)-a(k)/b(k-1)*d(k-1);endx(n)=d(n)/b(n);for k=n-1:-1:1x(k)=(d(k)-c(k)*x(k+1))/b(k);endx=x(:);%基函数function y=alpha0(x)y=2*x.^3-3*x.^2+1;function y=alpha1(x)y=-2*x.^3+3*x.^2;function y=beta0(x)y=x.^3-2*x.^2+x;function y=beta1(x)y=x.^3-x.^2;第二题:多项式拟合算法原理:%mafit.mfunction p=mafit(x,y,m)% 用途:多项式拟合%格式:p=mafit(x,y,m), x, y为数据向量,m为拟合多项式次数,p返回%多项式系数降幂排列format short;A=zeros(m+1,m+1);for i=0:mfor j=0:mA(i+1,j+1)=sum(x.^(i+j)); endb(i+1)=sum(x.^i.*y);enda=A\b';p=fliplr(a'); %按降幂排列四、实验内容⑴第一个方程的程序:x=-5:0.1:5;y=1./(1+x.^2);plot(x,y,'r')hold on%拉格朗日插值x1=-5:1:5;y1=1./(1+x1.^2);xx=-4.5:0.5:4.5;yy=malagr(x1,y1,xx);plot(xx,yy,'b*')%三次样条插值dy0=-2*(-5)/(1+25);dyn=-2*5/(1+25);m=maspline(x1,y1,dy0,dyn,xx);plot(xx,m,'ok')⑵第二个方程的程序:x=-5:0.2:5;y=atan(x);plot(x,y,'r');hold on%拉格朗日插值x1=-5:1:5;y1=atan(x1);xx=-4.5:0.5:4.5;yy=malagr(x1,y1,xx);plot(xx,yy,'b*')%三次样条插值dy0=1./(1+25);dyn=1./(1+25);m=maspline(x1,y1,dy0,dyn,xx); plot(xx,m,'ok')⑶第三个方程的程序:x=-5:0.1:5;y=x.^2./(1+x.^4);plot(x,y,'r')hold on%拉格朗日插值x1=-5:1:5;y1=x1.^2./(1+x1.^4);xx=-4.5:0.5:4.5;yy=malagr(x1,y1,xx);plot(xx,yy,'b*')%三次样条插值dy0=-2*(-5)*(1-5.^4)/(1+5.^4);dyn=-2*(5)*(1-5.^4)/(1+5.^4);m=maspline(x1,y1,dy0,dyn,xx);plot(xx,m,'ok')axis([-5,5,-0.2,1])第二题:多项式拟合程序:x=[-1.5 -1.0 -0.5 0.0 0.5 1.0 1.5]';y=[-4.45 -0.45 0.55 0.05 -0.44 0.54 4.55]';plot(x,y,'or'); hold on%三次多项式拟合p1=mafit(x,y,3);x1=-1.5:0.1:1.5;y1=p1(1)*x1.^3+p1(2)*x1.^2+p1(3)*x1+p1(4);plot(x1,y1,'.-')%平方误差y11=p1(1)*x.^3+p1(2)*x.^2+p1(3)*x+p1(4);err1=sum((y-y11).^2)%五次多项式拟合p2=mafit(x,y,5);x1=-1.5:0.1:1.5;y2=p2(1)*x1.^5+p2(2)*x1.^4+p2(3)*x1.^3+p2(4)*x1.^2+p2(5)*x1+p2(6); plot(x1,y2,'g')%平方误差y22=p2(1)*x.^5+p2(2)*x.^4+p2(3)*x.^3+p2(4)*x.^2+p2(5)*x+p2(6);err2=sum((y-y22).^2)五、实验结果第一题⑴第一个方程的图形:-5-4-3-2-112345-0.4-0.200.20.40.60.811.21.41.6⑵第二个方程的图形:-5-4-3-2-1012345-1.5-1-0.50.511.5⑶第三个方程的图形:-5-4-3-2-1012345-0.200.20.40.60.8第二题:平方误差:三次多项式拟合的平方误差:err1 =1.8571e-004五次多项式拟合的平方误差:err2 =4.7727e-005离散函数(x,i y)和拟合函数的图形:i-1.5-1-0.500.51 1.5六、实验结果分析1、由第一题的三个图可知:拉格朗日插值会出现很大的误差,即Runge现象,运行的结果不好,但是三次样条插值法的效果就很好,误差很小,接近真实值.2、由第二题的图像知,三次多项式拟合和五次多项式的拟合效果都很好.比较三次多项式拟合的平方误差:err1 =1.8571e-004和五次多项式拟合的平方误差:err2 =4.7727e-005知五次多项式拟合比三次多项式拟合更加准确.。