数值分析实验2(wangwei)
数值分析实验报告2

实验报告实验项目名称函数逼近与快速傅里叶变换实验室数学实验室所属课程名称数值逼近实验类型算法设计实验日期班级学号姓名成绩512*x^10 - 1280*x^8 + 1120*x^6 - 400*x^4 + 50*x^2 - 1并得到Figure,图像如下:实验二:编写程序实现[-1,1]上n阶勒让德多项式,并作画(n=0,1,…,10 在一个figure中)。
要求:输入Legendre(-1,1,n),输出如a n x n+a n-1x n-1+…多项式。
在MATLAB的Editor中建立一个M-文件,输入程序代码,实现勒让德多项式的程序代码如下:function Pn=Legendre(n,x)syms x;if n==0Pn=1;else if n==1Pn=x;else Pn=expand((2*n-1)*x*Legendre(n-1)-(n-1)*Legendre(n-2))/(n);endx=[-1:0.1:1];A=sym2poly(Pn);yn=polyval(A,x);plot (x,yn,'-o');hold onend在command Windows中输入命令:Legendre(10),得出的结果为:Legendre(10)ans =(46189*x^10)/256 - (109395*x^8)/256 + (45045*x^6)/128 - (15015*x^4)/128 + (3465*x^2)/256 - 63/256并得到Figure,图像如下:实验三:利用切比雪夫零点做拉格朗日插值,并与以前拉格朗日插值结果比较。
在MATLAB的Editor中建立一个M-文件,输入程序代码,实现拉格朗日插值多项式的程序代码如下:function [C,D]=lagr1(X,Y)n=length(X);D=zeros(n,n);D(:,1)=Y';for j=2:nfor k=j:nD(k,j)=(D(k,j-1)- D(k-1,j-1))/(X(k)-X(k-j+1));endendC=D(n,n);for k=(n-1):-1:1C=conv(C,poly(X(k)));m=length(C);C(m)= C(m)+D(k,k);end在command Windows 中输入如下命令:clear,clf,hold on;k=0:10;X=cos(((21-2*k)*pi)./22); %这是切比雪夫的零点Y=1./(1+25*X.^2);[C,D]=lagr1(X,Y);x=-1:0.01:1;y=polyval(C,x);plot(x,y,X,Y,'.');grid on;xp=-1:0.01:1;z=1./(1+25*xp.^2);plot(xp,z,'r')得到Figure ,图像如下所示:比较后发现,使用切比雪夫零点做拉格朗日插值不会发生龙格现象。
数值分析2

序号 1 2 3 4
项目 实验报告排版(3 分) 算法思想分析(6 分) 源代码(6 分) 实验结果及分析(5 分)
得分
总分
为初值)计算 3 的平方根,使误差不超过 10
3
-6
3 x 2 解 3 次代数方程 x x 1 0 , (1.5 为初值)用不动点迭代法 k x k 1 x k
f xk f xk
,使误差不超过 10
-6
实验测试结果及结果分析
1: >> Untitled1 a = 1.7321 i = 5 >> format long >> Untitled1 a = 1.732050807568877 i = 5 3 的平方根是 1.732050807568877 2: (1)>> Untitled1 x = 1.324718011988197 i = 9 (2)>> Untitled1 x = 1.324717957244790 i = 4 用不动点迭代法和牛顿迭代法得到的答案为 1.324717957244790
《数值分析》实验报告(二)
专业 信息与计算科学 班级 1304 班 姓名 卫妮 学号 20130404428
实验项目
迭代法的运用
实验目的
1. 熟练掌握迭代法,明白迭代法的原理和基本思想; 2. 编程实现用迭代法; 3. 熟悉 matlab 软件的使用。
实验内容
1: 用迭代公式
a k 1 1 3 ak 2 ak , (1
实验总结
通过学习 matlab,编程能力有了较大提高,并将其应用于数值分析的迭代法求解方程,在加 深对该领域印象的同时对 matlab 有了更深一层的了解。
数值分析实验报告二

数值实验报告二一、实验名称解线性方程组的列主元素高斯消去法和LU 分解法二、实验目的通过数值实验,从中体会解线性方程组选主元的必要性和LU 分解法的优点,以及方程组系数矩阵和右端向量的微小变化对解向量的影响。
三、实验内容解下列两个线性方程组(1) ⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎭⎫ ⎝⎛--11134.981.4987.023.116.427.199.103.601.3321x x x (2) ⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎪⎭⎫ ⎝⎛----15900001.582012151526099999.23107104321x x x x 四、算法描述1、 列主元素高斯消去法记: ij ij a a =1)( (i, j = 1,2,3n )i i b b =1)( (i = 1,2,3n )消元过程:对于k = 1,2,3n(1) 选行号k i ,使)()(max k i ni k k k i k k a a ≤≤=。
(2) 交换)(k kj a 与)(k j i k a (j = k, k+1,k+2n )以及)()(k i k k k b b 与所含的数值。
(3)对于i = k, k+1,k+2n ,计算)()(k kkk ik ik a a m =)()()1(k kj ik k ij k ij a m a a -=+ (j = k, k+1,k+2n ))()()1(k k ik k i k i b m b b -=+回代过程:)(n nnn n a b x = )()1)()(/(k kk j n k j k kj k k k a x a a x ∑+=-= (k = n-1, n-2, n-3 1 )在此算法中的)(k k i k a 称为第k 个列主元素,它的数值总要被交换到第k 个主对角线元素的位置上。
2、 LU 分解法通过MATLAB 自有的函数,把系数矩阵A 分解成A=LU ,其中:L 是下三角矩阵,U 是上三角矩阵,这时方程组Ax=b 就可以分解成两个容易求解的三角形方程组Ly=b ,Ux=y 。
数值分析实验报告二求解线性方程组的直接方法

数值分析实验报告二求解线性方程组的直接方法姓名:刘学超日期:3/28一实验目的1.掌握求解线性方程组的高斯消元法及列主元素法;2.掌握求解线性方程组的克劳特法;3.掌握求解线性方程组的平方根法。
二实验内容1.用高斯消元法求解方程组(精度要求为):2.用克劳特法求解上述方程组(精度要求为)。
3.用平方根法求解上述方程组(精度要求为)。
4.用列主元素法求解方程组(精度要求为):三实验步骤(算法)与结果1用高斯消元法求解方程组(精度要求为):#include stdio.h#define n3 void gauss(double a[n][n],double b[n]){double sum1=0,sum2=0,sum3=0,sum4=0;double l[n][n],z[n],x[n],u[n][n];int i,j,k;for(i=0;i n;i++)l[i][i]=1;for(i=0;i n;i++){for(j=0;j n;j++){if(i=j){for(k=0;k=i-2;k++)sum1+=l[i][k]*u[k][j];u[i][j]=a[i][j]-sum1;}if(i j){for(k=0;k=j-2;k++)sum2+=l[i][k]*u[k][j];l[i][j]=(a[i][j]-sum2)/u[j][j];}}for(k=0;k=i-2;k++)sum3+=l[i][k]*z[k];z[i]=b[i]-sum3;for(i=n-1;i=0;i--){for(k=i;k=n-1;k++)sum4+=u[i][k]*x[k];x[i]=(z[i]-sum4)/u[i][i];}}for(i=0;i n;i++)printf("%.6f",x[i]);}main(){double v[3][3]={{3,-1,2},{-1,2,2},{2,-2,4}};double c[3]={7,-1,0};gauss(v,c);}2用克劳特法求解上述方程组(精度要求为)#include stdio.h#include stdlib.h#include conio.h#define n3 int main(){float u[n][n],l[n][n],d[n]={7,-1,0},x[n];float a[3][3]={{3,-1,2},{-1,2,2},{2,-2,4}};int i,j,k;printf("equations:\n");for(i=0;i n;i++){for(j=0;j n-1;j++)printf("(%f)Y%d+",a[i][j],j+1);printf("(%f)Y%d=%f",a[i][n-1],n,d[i]);printf("\n");}printf("\n");for(j=0;j n;j++)for(i=j;i n;i++)l[i][j]=a[i][j];for(i=0;i n;i++)for(j=i+1;j n;j++)u[i][j]=a[i][j];for(j=1;j n;j++)u[0][j]=u[0][j]/l[0][0];for(k=1;k n;k++){for(j=k;j n;j++)for(i=j;i n;i++)l[i][j]-=l[i][k-1]*u[k-1][j];for(i=k;i n;i++)for(j=i+1;j n;j++)u[i][j]-=l[i][k-1]*u[k-1][j];for(i=k;i n;i++)for(j=i+1;j n;j++)u[k][j]=u[k][j]/l[k][k];}d[0]=d[0]/l[0][0];for(k=0;k 2;k++){for(i=k+1;i n;i++)d[i]-=d[k]*l[i][k];d[k+1]/=l[k+1][k+1];}for(i=0;i n;i++)x[i]=d[i];for(k=n-2;k 2-n;k--)for(i=k;i-1;i--)x[i]-=x[k+1]*u[i][k+1];for(j=0;j n;j++)for(i=j;i n;i++)printf("l[%d][%d]=%f\n",i+1,j+1,l[i][j]);printf("\n");for(i=0;i n;i++)for(j=i+1;j n;j++)printf("u[%d][%d]=%f\n",i+1,j+1,u[i][j]);printf("\n");for(i=0;i n;i++)printf("d%d=%f\n",i+1,d[i]);printf("\n");printf("the result is:\n");for(i=0;i n;i++)printf("Y%d=%f\n",i+1,x[i]);getch();}结果:3用平方根法求解上述方程组(精度要求为)#include stdio.h#define n3 void gauss(double a[n][n],double b[n]) {double sum1=0,sum2=0,sum3=0,sum4=0;double l[n][n],z[n],x[n],u[n][n];int i,j,k;for(i=0;i n;i++)l[i][i]=1;for(i=0;i n;i++){for(j=0;j n;j++){if(i==j){for(k=0;k=i-2;k++)sum1+=pow(l[i][k],2);l[i][j]=sqrt(a[i][i]-sum1);}if(i j){for(k=0;k=j-2;k++)sum2+=l[i][k]*u[k][j];l[i][j]=(a[i][j]-sum2)/l[j][j];}}for(k=0;k=i-2;k++)sum3+=l[i][k]*z[k];z[i]=(b[i]-sum3)/l[i][i];for(i=n-1;i=0;i--){for(k=i;k=n-1;k++)sum4+=l[k][i]*x[k];x[i]=(z[i]-sum4)/l[i][i];}}for(i=0;i n;i++)printf("%.6f",x[i]);}main(){double v[3][3]={{3,-1,2},{-1,2,2},{2,-2,4}};double c[3]={7,-1,0};gauss(v,c);}结果:4用列主元素法求解方程组(精度要求为):#include stdio.h#include math.h#define n3 int main(){float u[n][n],l[n][n],d[n]={7,-1,0},x[n];float a[n][n]={3,-1,2,-1,2,-2,2,-2,4};int i,j,k;printf("equations:\n");for(i=0;i n;i++){for(j=0;j n-1;j++)printf("(%f)Y%d+",a[i][j],j+1);printf("(%f)Y%d=%f",a[i][n-1],n,d[i]);printf("\n");}printf("\n");for(i=0;i n;i++)for(j=0;j n;j++)l[i][j]=a[i][j];for(i=0;i n;i++)for(j=0;j n;j++)u[i][j]=a[i][j];l[0][0]=sqrt(l[0][0]);u[0][0]=sqrt(u[0][0]);for(i=1;i n;i++)l[i][0]/=u[0][0];for(j=1;j n;j++)u[0][j]/=l[0][0];for(k=1;k 3;k++){for(j=0;j k;j++)l[k][k]-=pow(l[k][j],2);l[k][k]=sqrt(l[k][k]);for(j=0;j k;j++)l[i][k]-=l[i][j]*l[k][j];for(i=k+1;i n;i++)for(j=0;j k;j++)l[i][k]/=l[k][k];}d[0]=d[0]/l[0][0];for(k=0;k 2;k++){for(i=k+1;i n;i++)d[i]-=d[k]*l[i][k];d[k+1]/=l[k+1][k+1];}for(i=0;i n;i++)for(j=0;j n;j++)u[i][j]=l[j][i];for(k=n-1;k 1-n;k--){x[k]=d[k]/u[k][k];for(i=k-1;i-1;i--)d[i]=d[i]-u[i][k]*x[k];}for(j=0;j n;j++){for(i=j;i n;i++)printf("l[%d][%d]=%f\n",i+1,j+1,l[i][j]);}printf("\n");for(i=0;i n;i++){for(j=i;j n;j++)printf("u[%d][%d]=%f\n",i+1,j+1,u[i][j]);}printf("\n");printf("the result is:\n");printf("Y%d=%f\n",i+1,x[i]);}结果:四实验收获与教师评语。
《数值分析》实验书详解

数值分析实验指导书目录实验目的 (1)实验基本要求 (2)实验一、误差分析 (3)一、实验目的 (3)二、算法实例 (3)三、实验任务 (10)实验二、插值法 (12)一、实验目的 (12)二、算法实例 (12)三、实验任务 (19)四、思考题 (20)实验三、解线性方程组的直接法 (21)一、实验目的 (21)二、算法实例 (21)三、实验任务 (24)四、思考题 (24)实验四、解线性方程组的迭代法 (25)一、实验目的 (25)二、算法实例 (25)三、实验任务 (29)四、思考题 (29)实验五、常微分方程初值问题的数值解法 (30)一、实验目的 (30)二、算法实例 (30)三、实验任务 (40)四、思考题 (40)实验目的作为实践性非常强的课程,安排上机实验的目的,不仅是为了验证教材和授课内容,更重要的是,要通过实验深入理解方法的设计原理与处理问题的技巧,培养自行处理常规数值计算问题的能力和综合运用知识分析、解决问题的能力。
1、通过上机实验加深课堂内容的理解。
数值分析的主要任务就是研究适合于在计算机上使用的数值计算方法及与此相关的理论。
通过编程上机,就可以加深对方法运行过程的理解,同时在编程中领会和理解数值计算方法的计算要领和步骤,体会问题的条件和限制范围,理解一般问题和特殊问题的区别。
2、学会对数值计算结果的分析和处理。
数值分析实验不只是编写程序得到一个数值结果,我们应在掌握数值计算计算方法的基本原理和思想的同时,注意方法处理的技巧及其与计算机的密切结合,重视误差分析、收敛性及稳定性的讨论。
此外,还要注意算法能否在计算机上实现,应避免因数值方法选用不当、程序设计不合理而导致超过计算机的存储能力,或导致计算结果精度不高等。
3、要能灵活掌握各种数值计算方法。
由于针对同一个问题可以选用不同的数值计算方法,我们要注意各种方法的使用条件。
通过上机,比较各种方法间的异同及优缺点,以便更好的使用不同的方法来解决实际问题,使计算机成为我们最好的工具。
数值分析实验报告二2汇总

title('数据点(xi,yi)和牛顿插值曲线y=f(x)的图形')
运行结果:
实验结果分析:
最小二乘法拟合的曲线误差最小。
也可以得到三图合一的图像:
在以上命令的基础上
运行命令plot(x1,y1,'r*',x,y,'b-',t,p1,'k-',x,P2,'y-')
% f积分函数
% a/b:积分上下限
% tol:积分误差
% R:Romberg积分值
% k:二分次数
k=1;
h=b-a;
%第一步
T(k,1)=h/2*(f(a)+f(b));
err=1;
whileerr>=eps
T(k,k)= Tห้องสมุดไป่ตู้k,1);
h=h/2;
%第二步求梯形值T0
temp=0;
i=1;
whilei<2^k
实验结果分析:
本题用了三种方法计算,虽然三种方法的结果差别不大,但得到结果的过程不同,每个方法都有其优缺点。
成绩评定
签字:年月日
-3002399751579999/9007199254740992*x^3-311/1125899906842624*x^2+4128299658423301/562949953421312*x-2533274790396013/281474976710656
拉格朗日插值
实验步骤:
《数值分析》课程实验报告数值分析实验报告

《数值分析》课程实验报告数值分析实验报告《数值分析》课程实验报告姓名:学号:学院:机电学院日期:20__ 年 _ 月_ 日目录实验一函数插值方法 1 实验二函数逼近与曲线拟合 5 实验三数值积分与数值微分 7 实验四线方程组的直接解法 9 实验五解线性方程组的迭代法 15 实验六非线性方程求根 19 实验七矩阵特征值问题计算 21 实验八常微分方程初值问题数值解法 24 实验一函数插值方法一、问题提出对于给定的一元函数的n+1个节点值。
试用Lagrange公式求其插值多项式或分段二次Lagrange插值多项式。
数据如下:(1) 0.4 0.55 0.65 0.80 0.95 1.05 0.41075 0.57815 0.69675 0.90 1.00 1.25382 求五次Lagrange多项式,和分段三次插值多项式,计算, 的值。
(提示:结果为, )(2) 1 2 3 4 5 6 7 0.368 0.135 0.050 0.018 0.007 0.002 0.001 试构造Lagrange多项式,计算的,值。
(提示:结果为, )二、要求 1、利用Lagrange插值公式编写出插值多项式程序;2、给出插值多项式或分段三次插值多项式的表达式;3、根据节点选取原则,对问题(2)用三点插值或二点插值,其结果如何;4、对此插值问题用Newton插值多项式其结果如何。
Newton 插值多项式如下:其中:三、目的和意义 1、学会常用的插值方法,求函数的近似表达式,以解决其它实际问题;2、明确插值多项式和分段插值多项式各自的优缺点;3、熟悉插值方法的程序编制;4、如果绘出插值函数的曲线,观察其光滑性。
四、实验步骤(1) 0.4 0.55 0.65 0.80 0.951.05 0.41075 0.57815 0.69675 0.90 1.00 1.25382 求五次Lagrange多项式,和分段三次插值多项式,计算, 的值。
数值分析实验二

x1=0.0:0.05:1.00;
>> y1=a(4)+a(3)*x1+a(2)*x1.^2+a(1)*x1.^3;
y2=b(5)+b(4)*x1+b(3)*x1.^2+b(2)*x1.^3+b(1)*x1.^4;
>> plot(x,y,'*');
>> hold on;
(1)掌握曲线拟合的最小二乘法;
(2)将函数逼近方法与插值法进行比较。
2.实验要求(由课任教师于实验开始前公布,不低于2行,不超过3行,由学生负责填写;5号字,行距20):
3.实验内容(由课任教师指明,由学生填写,不超出本页本栏):
1.对于给函数 在区间[-1,1]上取 =-1+0.2i(i=0,1,……,10),试求3次曲线拟合,试画出拟合曲线并打印出方程,与用插值法的结果比较。
>> plot(x1,y1,'-r')
>> y2=newton(x,y,x1);
>> hold on;
>> plot(x1,y2,'-')
2.>> y=[1.00 0.41 0.50 0.61 0.91 2.02 2.16];
>> x=[0.0 0.1 0.2 0.3 0.5 0.8 1.0];
>> a=polyfit(x,y,3);
2.由实验给出数据表
x
0.0
0.1
0.2
0.3
0.5
0.8
1.0
y
1.0
0.41
数值分析实验 实验报告

数值分析实验实验报告数值分析实验实验报告引言在现代科学与工程领域,数值分析是一项重要的技术手段。
通过数值方法,我们可以利用计算机模拟和解决各种实际问题,如物理、化学、生物、经济等领域中的方程求解、优化问题、数据拟合等。
本实验旨在通过实际案例,探讨数值分析的应用和效果。
实验一:方程求解首先,我们考虑一个简单的方程求解问题。
假设我们需要求解方程f(x) = 0的根,其中f(x)是一个在给定区间[a, b]上连续且单调的函数。
为了实现这个目标,我们可以采用二分法、牛顿法、弦截法等数值方法。
在本实验中,我们选择使用二分法来求解方程f(x) = 0。
这种方法的基本思想是通过不断缩小区间[a, b]的范围,直到找到一个近似的根。
我们首先选取一个中间点c,计算f(c)的值,然后根据f(c)与0的关系,将区间[a, b]分成两部分。
重复这个过程,直到找到满足精度要求的根。
实验二:数据拟合接下来,我们考虑一个数据拟合的问题。
假设我们有一组离散的数据点,我们希望找到一个函数,使得该函数与这些数据点的拟合误差最小。
为了实现这个目标,我们可以采用最小二乘法等数值方法。
在本实验中,我们选择使用最小二乘法来进行数据拟合。
这种方法的基本思想是通过最小化数据点与拟合函数之间的误差平方和,来确定拟合函数的参数。
我们首先选择一个拟合函数的形式,如线性函数、多项式函数等。
然后,通过最小化误差平方和的方法,计算出拟合函数的参数。
实验三:优化问题最后,我们考虑一个优化问题。
假设我们需要在给定的约束条件下,找到一个使得目标函数取得最大或最小值的变量。
为了实现这个目标,我们可以采用梯度下降法、遗传算法等数值方法。
在本实验中,我们选择使用梯度下降法来解决优化问题。
这种方法的基本思想是通过迭代的方式,不断调整变量的取值,直到找到一个满足约束条件的最优解。
我们首先计算目标函数关于变量的梯度,然后根据梯度的方向和大小,更新变量的取值。
通过不断迭代,我们可以逐步接近最优解。
数值分析实验报告(二)

数值分析实验报告(二)一.实验名称:简单迭代、牛顿迭代求非线性方程的根。
二.实验目的:运用简单迭代、牛顿迭代法求方程根。
三.题目:(1)用简单迭代法求2的近似值,要求误差小于410-。
(2)用牛顿迭代法求x^3-x^2-1=0,要求误差小于0.0000001。
四.程序:(1)简单迭代法#include<iostream.h>#include<math.h>double fun(double); //申明函数int main(){double x0,x,esp;int i=0;cout<<"输入初值x0=";cin>>x0;cout<<"输入迭代精度esp=";cin>>esp;do{x=x0;x0=fun(x0);i++;if(i>1000000){cout<<"迭代失败!!";return 0;}}while(fabs(x-x0)>esp);cout<<"迭代次数为"<<i<<endl;cout<<"迭代结果为"<<x<<endl;}double fun(double x) //定义函数{return 1/(x+2); //x(x+2)=1}(2)牛顿法#include < iostream.h>#include < math.h>#define f(x) (x*x*(x-1.0)-1.0) // 举例函数x^3-x^2-1 #define g(x) (3.0*x*x-2.0*x) // 导函数3x^2-2x#define epsilon 0.0000001 // 精度#define MAXREAPT 100bool RootNewton(double &x)double xk1,xk0;xk0=x;for(int k=0;k< MAXREAPT;k++ ){if(g(xk0)==0.0 ){cout <<"迭代过程中导数为0. " << endl;return false ;}xk1=xk0-f(xk0)/g(xk0);if(fabs(xk1-xk0)<epsilon&&fabs(f(xk1))<epsilon){x=xk1;return true;}else{xk0 = xk1;}}cout << " 迭代次数超过预期. " << endl;return false ;}int main()double x;cout << " 牛顿迭代法求方程根,请输入初始迭代x0值:";cin >> x;if(RootNewton(x)){cout << " 该值附近的根为: " << x << endl;}else{cout << " 迭代失败! " << endl;}return 0 ;}五.运行结果:(1)简单迭代法:(2)牛顿法:六.体会:牛顿法在单根附近有较快的收敛速度。
《数值分析》实验报告书

N4(0.895) function [y,R]= newcz(X,Y,x,M) x=0.895; M=4; X=[0.4,0.55,0.65,0.8,0.9]; Y=[0.41075,0.57815,0.69675,0.88811,1.02652];
n=length(X); m=length(x); for t=1:m z=x(t); A=zeros(n,n);A(:,1)=Y'; s=0.0; p=1.0; q1=1.0; c1=1.0; for j=2:n for i=j:n A(i,j)=(A(i,j-1)-A(i-1,j-1))/(X(i)-X(i-j+1)); end q1=abs(q1*(z-X(j-1)));c1=c1*j; end C=A(n,n);q1=abs(q1*(z-X(n))); for k=(n-1):-1:1 C=conv(C,poly(X(k)));d=length(C); C(d)=C(d)+A(k,k); end y(k)= polyval(C, z); end R=M*q1/c1; 运行结果: ans = 1.0194
实验三、解线性方程组的直接法
解线性方程组的直接法是指经过有限步运算后能求得方程组精确解
的方法。但由于实际计算中舍入误差是客观存在的,因而使用这类方法 也只能得到近似解。目前较实用的直接法是古老的高斯消去法的变形, 即主元素消去法及矩阵的三角分解法。引进选主元的技巧是为了控制计 算过程中舍入误差的增长,减少舍入误差的影响。一般说来,列主元消 去法及列主元三角分解法是数值稳定的算法,它具有精确度较高、计算 量不大和算法组织容易等优点,是目前计算机上解中、小型稠密矩阵方 程组可靠而有效的常用方法。
Y=[0.82741,0.82659,0.82577,0.82495]; n=length(X); m=length(x); for i=1:m z=x(i);s=0.0; for k=1:n p=1.0; q1=1.0; c1=1.0; for j=1:n if j~=k p=p*(z-X(j))/(X(k)-X(j)); end q1=abs(q1*(z-X(j))); c1=c1*j; end s=p*Y(k)+s; end y(i)=s; end R=M.*q1./c1; 运行结果: ans = 0.8261 2. N3(0.596) function [y,R]= newcz(X,Y,x,M) x=0.596; M=3;
数值分析实验二

内江师范学院数值分析实验报告册编制张莉审定牟廉明专业:班级:级班学号:姓名:数学与信息科学学院2013年9月说明一、学生在做实验之前必须要准备实验,主要包括预习与本次实验相关的理论知识,熟练与本次实验相关的软件操作,收集整理相关的实验参考资料,要求学生在做实验时能带上充足的参考资料;若准备不充分,则学生不得参加本次实验,不得书写实验报告;二、要求学生要认真做实验,主要是指不得迟到、早退和旷课,在做实验过程中要严格遵守实验室规章制度,认真完成实验内容,极积主动地向实验教师提问等;三、各个实验按照学生水平分别设置了A、B、C、D四个等级,其中对应的难度系数为1、0.8、0.7、0.6,也可根据实际完成情况制定相应地的难度系数,但总体保证难度排序为A级难度最大,B级次之,C级较易,D级最简单。
四、学生可以根据自己对各个实验涉及到的知识点掌握的程度自由选取A、B、C、D等级的实验题目。
五、学生要认真工整地书写实验报告,实验报告的内容要紧扣实验的要求和目的,不得抄袭他人的实验报告;四、根据实验准备、实验态度、实验报告的书写、实验报告的内容进行综合评定,并给出实验成绩评定分。
实验名称: 实验二 插值与拟合 指导教师: 吴开腾 张莉 实验时数: 4 实验设备:安装了Matlab 、C ++、VF 软件的计算机 实验日期:2013年 10 月 23、30 日 实验地点: 第五教学楼北902 实验目的:1. 掌握插值方法的基本思想和基本步骤,能够根据实际问题选用适当地插值方法进行数值实验,并从实验过程中理解各类插值方法之间的联系与区别。
2. 理解各类插值方法优缺点,并能自行编程求解。
3. 理解插值方法与数据拟合的区别,掌握数据拟合方法解决实际问题的基本步骤和求解理论,并能通过数值实验进行验证。
实验准备:1. 在开始本实验之前,请回顾教科书的相关内容;2. 需要一台准备安装Windows XP Professional 操作系统和装有数学软件的计算机。
《数值分析》实验报告2

《数值分析》实验报告一、问题的提出求解线性方程组的迭代法,即是用某种极限过程去逐步逼近线性方程组的精确解的过程,迭代法是解大型稀疏矩阵方程组的重要方法。
二、实验名称运用MATLAB编程实现雅可比(Jacobi)迭代和高斯-赛德尔(Gauss-Seidel)迭代。
三、实验目的1、熟悉了解雅可比(Jacobi)迭代和高斯-赛德尔(Gauss-Seidel)迭代的算法。
2、学习MATLAB软件的功能。
四、基本原理五、实验环境操作环境:Windows10实验平台:Matlab7.1软件六、试验设计1、jacobi迭代法(1)算例:课本p54页例1(2)程序清单Jacobi迭代法的MATLAB函数文件Jacobi.m如下:function [y,n]=jacobi(A,b,x0,eps)if nargin==3eps=1.0e-6;elseif nargin<3errorreturnendD=diag(diag(A)); %求A的对角矩阵L=-tril(A,-1); %求A的下三角阵U=-triu(A,1); %求A的上三角阵B=D\(L+U);f=D\b;y=B*x0+f;n=1; %迭代次数while norm(y-x0)>=epsx0=y;y=B*x0+f;n=n+1;end(3)实验结果及分析:>> A=[8,-3,2;4,11,-1;6,3,12];>> b=[20,33,36]';>> [x,n]=jacobi(A,b,[0,0,0]',1.0e-6)x =3.00002.00001.0000n =162、Gauss-seidel迭代法(1)算例:课本p54页例1(2)程序清单:Gauss-Serdel迭代法的MATLAB函数文件gauseidel.m如下:function [y,n]=gauseidel(A,b,x0,eps)if nargin==3eps=1.0e-6;elseif nargin<3errorreturnendD=diag(diag(A)); %求A的对角矩阵L=-tril(A,-1); %求A的下三角阵U=-triu(A,1); %求A的上三角阵G=(D-L)\U;f=(D-L)\b;y=G*x0+f;n=1; %迭代次数while norm(y-x0)>=epsx0=y;y=G*x0+f;n=n+1;end(3)实验结果及分析:>> A=[8,-3,2;4,11,-1;6,3,12];>> b=[20,33,36]';>> [x,n]=gauseidel(A,b,[0,0,0]',1.0e-6)x =3.00002.00001.0000n =9七、结果说明:高斯-赛德尔迭代法比雅可比迭代法收敛得快一些(达到相同精度所需迭代次数较少)。
数值分析的实验报告

数值分析的实验报告数值分析的实验报告导言数值分析是一门研究数值计算方法和数值计算误差的学科,它在科学计算、工程技术和社会经济等领域具有广泛的应用。
本实验旨在通过对数值分析方法的实际应用,验证其有效性和可靠性。
实验一:方程求根方程求根是数值分析中的基础问题之一。
我们选取了一个非线性方程进行求解。
首先,我们使用二分法进行求解。
通过多次迭代,我们得到了方程的一个近似解。
然后,我们使用牛顿法进行求解。
与二分法相比,牛顿法的收敛速度更快,但需要选择一个初始点。
通过比较两种方法的结果,我们验证了牛顿法的高效性。
实验二:插值与拟合插值与拟合是数值分析中常用的数据处理方法。
我们选取了一组实验数据,通过拉格朗日插值法和最小二乘法进行插值和拟合。
通过对比两种方法的拟合效果,我们验证了最小二乘法在处理含有噪声数据时的优势。
同时,我们还讨论了插值和拟合的精度与样本点数量之间的关系。
实验三:数值积分数值积分是数值分析中的重要内容之一。
我们选取了一个定积分进行计算。
首先,我们使用复化梯形公式进行积分计算。
通过增加分割区间的数量,我们得到了更精确的结果。
然后,我们使用复化辛普森公式进行积分计算。
与复化梯形公式相比,复化辛普森公式具有更高的精度。
通过比较两种方法的结果,我们验证了复化辛普森公式的优越性。
实验四:常微分方程数值解常微分方程数值解是数值分析中的重要应用之一。
我们选取了一个常微分方程进行数值解的计算。
首先,我们使用欧拉方法进行数值解的计算。
然后,我们使用改进的欧拉方法进行数值解的计算。
通过比较两种方法的结果,我们验证了改进的欧拉方法的更高精度和更好的稳定性。
实验五:线性方程组的数值解法线性方程组的数值解法是数值分析中的重要内容之一。
我们选取了一个线性方程组进行数值解的计算。
首先,我们使用高斯消元法进行数值解的计算。
然后,我们使用追赶法进行数值解的计算。
通过比较两种方法的结果,我们验证了追赶法在求解三对角线性方程组时的高效性。
数值实验二实验报告

贵州师范大学数学与计算机科学学院学生实验报告课程名称: 数值分析 班级:数学专业2班 实验日期: 2013年 9月 26 日 学 号: 110701020016 姓名: 指导教师: 杨 一 都 实验成绩:一、实验名称实验二: Lagrange 插值与曲线拟合的最小二乘法 二、实验目的及要求1.让学生掌握Lagrange 插值与曲线拟合的最小二乘法2.让学生能够用这些方法解决一些实际问题 三、实验环境每人一台计算机,要求安装Windows XP 操作系统,Microsoft office2003、MATLAB6.5(或7.0). 四、实验内容 题1: 对函数211)(x x f +=,取n+1个等距分布的插值节点,取不同的n ,作n 次Lagrange 插值,把)(x f 和插值多项式的图象绘制在同一张图上进行比较. 题曲线拟合较好?为什么?你能找出更好的拟合曲线吗? 提示:用残差平方的大小来判断拟合的优劣,越小越好. 五、算法描述及实验步骤 1.(1)算法描述:画出211)(xx f +=的原函数图像与它的Lagrange 多项式插值图像在同一 图上进行比较。
(2)实验步骤:①.在M-file 编辑窗口编辑Lagrange 插值M 文件; ②.画出f(x)原函数图像;③.在命令窗口调用Lagrange 插值取n=10画拟合图像; ④.观察比较两个图像。
2.(1)算法描述:分别用一次、二次、和三次多项式曲线,以及最小二乘法拟合这些数据点, 找出哪一种曲线拟合较好。
(2)实验步骤:①. 在M-file 编辑窗口编辑函数式M 文件konghaijun.m ;②.在MATLAB命令窗口中调用konghaijun.m函数运行即可;六、调试过程及实验结果grange插值2.曲线拟合的最小二乘法由图像可得三次多项式曲线拟合较好,七、总结1、通过这次实验,我初步掌握了Lagrange插值与曲线拟合的最小二乘法及用这些方法解决一些实际问题。
数值分析实验(2)

实验二 插值法 P50专业班级:信计131班 姓名:段雨博 学号:2013014907 一、实验目的1、熟悉MATLAB 编程;2、学习插值方法及程序设计算法。
二、实验题目1、已知函数在下列各点的值为i x 0.2 0.4 0.6 0.8 1.0()i f x0.980.920.810.640.38试用4次牛顿插值多项式()4P x 及三次样条函数()S x (自然边界条件)对数据进行插值用图给出(){},,0.20.08,0,1,11,10iiix y x i i =+=,()4P x 及()S x 。
2、在区间[]1,1-上分别取10,20n =用两组等距节点对龙格函数()21125f x x=+作多项式插值及三次样条插值,对每个n 值,分别画出插值函数及()f x 的图形。
3、下列数据点的插值 x 0 1 4 9 16 25 36 49 64 y 0 12345678可以得到平方根函数的近似,在区间[]0,64上作图 (1)用这9个点作8次多项式插值()8L x (2)用三次样条(第一边界条件)程序求()S x从得到结果看在[]0,64上,哪个插值更精确;在区间[]0,1上,两种插值哪个更精确? 三、实验原理与理论基础 1、拉格朗日差值公式)()(111k kk kk k x x x x y y y x L ---+=++ 点斜式kk kk k k k kx x x x y x x x x y x L --+--=++++11111)( 两点式2、n 次插值基函数 ....,2,1,0,)()(0n j y x l y x L ijnk kk j n ===∑=n k x x x x x x x x x x x x x l n k n k k k k k ,...,1,0,)()(...)()(...)()()(1100=------=--3、牛顿插值多项式...))(](,,[)](,[)()(102100100+--+++=x x x x x x x f x x x x f x f x P n ))...(](,...,[100---+n n x x x x x x f)(],...,,[)()()(10x x x x f x P x f x R n n n n +=-=ω4、三次样条函数若函数],,[)(2b a C x S ∈且在每个小区间],[1+j j x x 上是三次多项式,其中,b x x x a n =<<<=...10是给定节点,则称)(x S 是节点n x x x ,...,,10上的三次样条函数。
数值分析实验二分法

0.73908513321516
三本次实验总结
通过做此实验,我对MATLAB有更进一步的了解,了解了MATLAB强大的功能以及如何用MATLAB来解决实际问题,激发了我学习MATLAB的兴趣,更加使我认识到MATLAB在我们的工作生活中都有广泛的应用。对于此次编程实验,我也意识到自己对MATLAB还不够了解,今后需要花更多时间在这门课上,以求更好的掌握MATLAB,同时这次试验也让我对用二分法和牛顿法解决数学问题有了更深一步的了解。
源代码
clc
close all
format long;
f=input('f(x)=');
qujian=input('输入区间=') ;
err=input('误差范围;');
a=qujian(1);
b=qujian(2);
yc=1;
while((b-a)>err)&(yc~=0);
c=(a+b)/2; %设定中点
x =
1.73205566406250
2牛顿法实验f(x)=x-cosx的正根(精度精确到0.000001)
算法实现
1:构造区间[-1,1],代入方程f(x),如果f(-1)*f(1)<0说明根的区间在[-1,1];
2:利用fzero(’x-cos(x)’),取得临界点0.5;
3:取f(x)的一介导数,构造牛顿方法;
四教师评语
牛顿法和弦截法:与牛顿法相比,弦截法的收敛速度也是比较快的。可以证明,弦截法具有超线性收敛速度。
相同之处:都是线性化方法。
不同之处:牛顿法在计算xk+1时只用到前一步的值xk,故这种方法称为单点迭代法。
数值分析(计算方法)实验二

《数值分析》课程实验指导书实验二函数逼近与曲线拟合一、问题提出二、实验程序及结果分析:先写出线性最小二乘法的M文件function c=lspoly(x,y,m)% x是数据点的横坐标组成的向量,y是纵坐标组成的向量% m是要构成的多项式的次数,c是多项式由高次到低次的系数所组成的向量n=length(x);b=zeros(1:m+1);f=zeros(n,m+1);for k=1:m+1f(:,k)=x.^(k-1);enda=f'*f;b=f'*y';c=a\b;c=flipud(c);方法一:近似解析表达式为:y(t)=a1t+a2t2+a3t3第二步在命令窗口输入:lspoly([0,5,10,15,20,25,30,35,40,45,50,55],[0,1.27,2.16,2.86,3.44,3.87,4.15,4.37,4.51,4.58,4.02,4. 64],2)回车得到:ans =0.0000-0.00520.26340.0178即所求的拟合曲线为y=-0.0052t2+0.2634t+0.0178在编辑窗口输入如下命令:>>x=[0,5,10,15,20,25,30,35,40,45,50,55];y=[0,1.27,2.16,2.86,3.44,3.87,4.15,4.37,4.51,4.58,4.02,4 .64];>> t=0:0.1:55;>> z=-0.0052*t.^2+0.2634*t+0.0178;>> plot(x,y,'ro',t,z);grid命令执行得到如下图(图2-1)0102030405060图2-1 拟合多项式与数据点的关系方法二:假设近似表达式为:y(t)=c0+c1t+c2t2第一步在命令窗口输入:>>lspoly([0,5,10,15,20,25,30,35,40,45,50,55],[0,1.27,2.16,2.86,3.44,3.87,4.15,4.37,4.51, 4.58,4.02,4.64],2)回车得到:ans =-0.00240.20370.2305即所求的拟合曲线为y=-0.0024t2+0.2037t+0.2305在编辑窗口输入如下命令:>>x=[0,5,10,15,20,25,30,35,40,45,50,55];y=[0,1.27,2.16,2.86,3.44,3.87,4.15,4.37,4.51,4. 58,4.02,4.64];>> t=0:0.1:55;>> z=-0.0024*t.^2+0.2037*t+0.2305;>> plot(x,y,'ro',t,z);grid命令执行得到如下图(图2-2)图2-2 拟合多项式与数据点的关系三、实验结论在利用数据的最小二乘法求拟合曲线时,选取合适的近似表达式很重要,应通过不断的试验找出较为合适的近似表达式,这样才能尽可能的提高拟合精度。
11级数值分析2实验项目

数值分析2实验项目实验一 简单迭代法与加速方法一、目的与要求:1、掌握求解非线性方程实根的简单迭代法的编程运算2、会分析迭代步数,设计容许误差二、实验内容:1、方程324100x x +-=可以等价化成以下三种形式:(i) 1/210(4)x x x =- (ii) 1/210()4x x =+ (iii) 32241038x x x x x x+-=-+ 针对三种等价形式给出三种不同的简单迭代格式并使用每种格式计算方程在区间[1,2]上的解,初值选为1.5,容许误差选为1.0E-5,即510-;分析每种格式的收敛性;分析收敛格式的迭代步数与计算时间.2、结合上述问题中(ii)相应的迭代格式,利用Stenffenson 迭代法求原方程的解。
初值选为1.5,容许误差选为1.0E-5,分析迭代步数与计算时间,并与上述简单迭代法作比较.实验二 Newton 迭代法一、目的与要求:掌握求解非线性方程实根的Newton 切线法的编程运算二、实验内容:1、用Newton 切线法求xx e -=在0.5附近的根,2、用Newton 切线法求方程310x x --=在1.5附近的一个根. (选做)3、用Newton 切线法计算3k =,4k =时,方程2((3)0k x x -=在1.3附近的根以及2.5附近的根,比较计算两根时的迭代次数,并与理论结论作比较. 实验三 Newton 下山法与重根加速法一、目的与要求:掌握求解非线性方程实根的Newton 下山法与重根加速法的编程运算二、实验内容:1、分别使用Newton 切线法与Newton 下山法求解方程310x x --=在 1.5x =附近的根,但是初值选为0.6x =,根据计算结果,验证下山法在初值选取范围上的优越性。
2、分别使用Newton 切线法与重根加速法计算3k =,4k =时,方程2((3)0k x x -=在1.3附近的根,在相同的容许误差下,比较两种方法的计算时间与迭代次数.实验四 解非线性方程组的Newton 迭代法一、目的与要求:掌握求解非线性方程方程组的Newton 迭代法编程运算二、实验内容:使用Newton 迭代法求解非线性方程组122212230450x x x x +-=⎧⎨+-=⎩,容许误差选为1.0E-5,给出初值分别选取为(1.5,1.0),(2.0,2.0),(1000,1000)时迭代步数,并分析迭代步数之间差别的原因.实验五 Euler 方法和梯形方法一、目的与要求:掌握求解一阶常微分方程初值问题Euler 方法和梯形方法编程运算二、实验内容:1. 分别使用Euler 方法、梯形方法和预估-校正方法在步长选为1/10时计算一阶常微分方程初值问题⎪⎩⎪⎨⎧=<<++-=1)0(110,1y x y y dx d (该问题的精确解为x e x y x +=-)(), 将误差(精确解与数值解的差)列表, 并画出精确解与数值解的函数图象.2. 使用Euler 方法和梯形方法在步长选为1/8,1/16,1/32时分别计算下述一阶常微分方程初值问题'()4(0,1](0)1y x x y ⎧=∈⎪⎨=⎪⎩(该问题的精确解为22()(1)y x x =+) 给出(1)y 的近似值与误差,将误差(精确解与数值解的差)列表,并画出精确解与数值解的函数图象.(选作)实验六 经典Runge-kutta 方法一、目的与要求:掌握求解一阶常微分方程初值问题经典Runge-kutta 方法编程运算二、实验内容:1.用经典Runge-kutta 方法在步长选为1/10时计算一阶常微分方程初值问题⎪⎩⎪⎨⎧=<<++-=1)0(110,1y x y y dx d (该问题的精确解为x e x y x +=-)(), 将误差(精确解与数值解的差)列表, 并画出精确解与数值解的函数图象. 实验七 四阶Adama 显式和隐式方法一、目的与要求:掌握求解一阶常微分方程初值问题四阶Adama 显式和隐式方法编程运算二、实验内容:1.分别用四阶Adama 显式和隐式方法在步长选为1/10时计算一阶常微分方程初值问题⎪⎩⎪⎨⎧=<<++-=1)0(110,1y x y y dx d (该问题的精确解为x e x y x +=-)(), 将误差(精确解与数值解的差)列表, 并画出精确解与数值解的函数图象. 实验八 计算矩阵主特征值及主特征向量(选作)一、目的与要求:掌握求解矩阵主特征值及主特征向量的改进幂法编程运算二、实验内容:用改进幂法求解矩阵⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡1634310232的主特征值及主特征向量,并列表.。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验2.1(多项式插值的振荡现象)问题提出:考虑在一个固定的区间上用插值逼近一个函数。
显然拉格朗日插值中使用的节点越多,插值多项式的次数就越高。
我们自然关心插值多项式的次数增加时,()n L x 是否也更加靠近被逼近的函数,龙格给出的一个例子是极著名并富有启发性的,设区间[-1,1]上函数 21()125f x x =+实验内容:考虑区间[-1,1]的一个等距划分,分点为 21,0,1,2,...,i ix i n n=-+= 则拉格朗日插值多项式为 201()()125nn i i iL x l x x==+∑其中的(),0,1,2,...,i l x i n =是n 次拉格朗日插值基函数。
实验要求:(1)选择不断增大的分点数目2,3...,n =画出原函数()f x 及插值多项式函数()n L x 在 [-1,1]上的图像,比较并分析实验结果。
(2)选择其他的函数,例如定义在区间[-5,5]上的函数4(),()arctan 1xh x g x x x==+ 重复上述的实验看其结果如何。
(3)区间[a,b]上切比雪夫点的定义为(21)cos ,1,2,...,1222(1)k a b b ak x k n n π⎛⎫+--=+=+ ⎪+⎝⎭以121,,...,n x x x +为插值节点构造上述各函数的拉格朗日插值多项式,比较其结果。
程序清单:1. 被逼近函数的函数文件func1.mfunction y=func1(x,c)%直接用被逼近函数计算函数值,c 用来选择函数 if c==1;y=1./(1+25*x.^2); end; if c==2;y=x./(1+x.^4); end; if c==3;y=atan(x);end;2.拉格朗日插值函数文件lagr.mfunction yy=lagr(x,y,xx)%用拉格朗日插值多项式进行插值,x为插值点的自变量列阵,y为对应的函数值列阵,xx为%待插值的自变量列阵,yy为求得的对应于xx的函数值列阵yy=xx-xx;%初始化为0向量n=length(x)-1;for i=0:n;z=yy;k=0;for j=0:n;if j~=ik=k+1;if k==1;z=(xx-x(j+1))/(x(i+1)-x(j+1));elsez=z.*(xx-x(j+1))/(x(i+1)-x(j+1));end;end;end;yy=yy+z*y(i+1);end;2.主程序main1.mm=input('请输入节点数目:');chof=input('请选择函数:(1:1/(1+25*x^2)) 2:x/(1+x^4) 3:arctanx)');div=input('请选择节点方式:(1.均布节点2.切比雪夫点)');%生成用于画图的自变量序列if chof==1;t=-1:0.01:1;else;t=-5:0.01:5;end;y1=func1(t,chof);%直接求t对应的函数值%按要求构造节点的自变量序列n=m-1;for i=0:n;if div==1;if chof==1;nod(i+1)=-1+2*i/n;else;nod(i+1)=-5+10*i/n;end;end;if div==2;if chof==1;nod(i+1)=cos((2*i+1)*pi/(2*(n+1))); elsenod(i+1)=5*cos((2*i+1)*pi/(2*(n+1))); end; end; end;nodv=func1(nod,chof);%求节点处函数值 y=lagr(nod,nodv,t); plot(t,y1,t,y); t=0; y=0; y1=0; nod=0; nodv=0;实验结果及其分析:(1) 分点数分别为2,3,5,8,11,15时的函数21()125f x x =+和插值多项式函数()n L x 的图像如下:n=2: n=3n=5: n=8:n=11: n=15:分析:从图上可以看出随着分点数目的增加区间端部的插值函数的值与原函数的误差越来达,而区间中部的误差越来越小,这就是所谓的龙格现象,这是等距节点的高次插值多项式的典型病态现象。
(2) 对于函数4()1xh x x =+情况如下: n=4: n=8:n=11: n=15:对于函数()arctan g x x =情况如下:n=3: n=7:n=11: n=15:分析:从图上可以看出对于上面这两种函数也有龙格现象出现。
(3) 若采用切比雪夫点则结果如下:21()125f x x =+:n=11: n=15:4()1xh x x =+: n=11: n=20:()arctan g x x =:n=11:分析:采用切比雪夫点有效的抑制了龙格现象,由于切比雪夫点在区间的端部较为密集而在区间中部较为稀疏,因此它有利于减小端部的误差,防止发生龙格现象。
实验2.3 (曲线逼近方法的比较)问题提出:曲线的拟合和插值,是逼近函数的基本方法,每种方法具有各自的特点和特定的适用范围,实际工作中合理选择方法是重要的。
实验内容:任然考虑实验2.1中的著名问题,用Matlab程序给出了该函数的二次和三次拟合多项式。
实验要求:(1)将拟合的结果与拉格朗日插值及样条插值的结果比较。
(2)归纳总结数值实验的结果,试定性地说明函数逼近各种方法的适用范围,及实际应用中选择方法应注意的问题。
程序清单:x=-1:0.2:1;y=1./(1+25*x.*x);xx=-1:0.02:1;%多项式拟合p2=polyfit(x,y,3);yy=polyval(p2,xx);plot(x,y,'o',xx,yy);xlabel('x');ylabel('y');hold on;%拉格朗日插值yy=lagr(x,y,xx);plot(xx,yy,'b');%样条插值yy=spline(x,y,xx);plot(xx,yy,'r');hold off;当需要分别画各种方法的图时,可对上面的程序进行相应的修改。
实验结果及其分析:对于实验2.1中的著名问题用各种逼近方法得到的结果分别如下:二次多项式拟合:六次多项式拟合:拉格朗日插值:三次样条插值:分析:从结果来看三次多项式拟合结果不理想,六次多项式拟合在中部稍好而在端部不理想, 拉格朗日插值在端部出现龙格现象,三次样条曲线拟合的结果较为理想。
(3) 曲线拟合适用于曲线不要求通过每一个数据点而只需反映数据点的分布趋势的情况,对于曲线拟合重要的是选好模型,例如前面的情况用多项式模型就不太合适,因此效果不理想。
而拉格朗日插值适用于严格要求曲线过每一个数据点,且在整个逼近区间上要求有一个统一表达式的情形,它的缺点是当通过的点数增多且点的分布不能满足一定要求时会出现龙格现象,此时在区间中部逼近较理想,端部的情况则往往很坏。
样条曲线插值适合于严格要求曲线过每个数据点,点数较多的情形,也就是拉格朗日插值不适用的情形。
它的适用范围较广,经常采用。
实验2.5 (高维积分数值计算的蒙特卡罗方法)问题提出:高维空间中的积分,如果维数不很高且积分区域是规则的或者能等价地写成多重积分的形式,可以用一元函数积分的数值方法来计算高维空间的积分。
蒙特卡罗方法对计算复杂区域甚至不连通的区域上的积分并没有特殊的困难。
实验内容:对于一般的区域Ω,计算其测度(只要理解为平面上的面积或空间中的体积)的一般方法是:先找一个规则的区域A 包含Ω,且A 的测度是已知的。
生成区域A 中m 个均匀分布的随机点,1,2,...,,i p i m =如果其中有n 个落在区域Ω中,则区域Ω的测度()m Ω为n/m 倍A 的测度。
函数()f x 在区域Ω上的积分可以近似为:区域Ω的测度与函数()f x 在Ω中n 个随机点上平均值的乘积。
1()()()k k p f x dx m f p nΩ∈Ω≈Ω⨯∑⎰实验要求:假设冰激凌的下部为一锥体而上面为一半球,考虑冰激凌体积问题:计算锥面222z x y =+上方和球面222(1)1x y z ++-=内部区域的体积。
如果使用球面坐标,该区域可以表示为如下的积分:2cos /422sin d d d ϕππρϕϕρθ⎰⎰⎰用蒙特卡罗方法可以计算该积分。
另一方面,显然这样的冰激凌可以装在如下立方体的盒子里 11,11,02x y z -≤≤-≤≤≤≤而该立方体的体积为8。
只要生成这个盒子里均匀分布的随机点,落入冰激凌锥点的个数与总点数之比再乘以8就是冰激凌锥的体积。
比较两种方法所得到的结果。
类似的方法可以计算复杂区域的测度(面积或体积)。
试求由下列关系所界定区域的测度:01,12,13(1)sin()0xx y z e y z y ≤≤≤≤-≤≤⎧⎪≤⎨⎪≥⎩33213,14(2)29201,01,01(3)sin 1x y x y x y y e x y z x y z x z e ≤≤-≤≤⎧⎪+≤⎨⎪≥-⎩≤≤≤≤≤≤⎧⎪+≤⎨⎪-+≤⎩程序清单:1. 计算冰激凌的体积n=input('请输入生成的随机点的数目:'); m=0; for i=1:n;p=rand(1,3); x=-1+2*p(1); y=-1+2*p(2); z=2*p(3);if x^2+y^2+(z-1)^2<1&x^2+y^2<z^2; m=m+1; end; end; 8*m/n2.(1)区域的测度n=input('请输入生成的随机点的数目:'); m=0; for i=1:n;p=rand(1,3); x=p(1); y=1+p(2); z=-1+4*p(3);if exp(x)<=y&sin(z)*y>=0; m=m+1;end;end;8*m/n3.(2)区域的测度n=input('请输入生成的随机点的数目:'); m=0;for i=1:n;p=rand(1,2);x=1+2*p(1);y=-1+5*p(2);if x^3+y^3<=29&exp(x)-2<=y;m=m+1;end;end;10*m/n4.(3)区域的测度n=input('请输入生成的随机点的数目:'); m=0;for i=1:n;p=rand(1,3);x=p(1);y=p(2);z=p(3);if x^2+sin(y)<=z&x-z+exp(y)<=1;m=m+1;end;end;m/n实验结果及其分析:(1)直接积分算得冰激凌的体积为。