数值分析2016上机实验报告
数值分析上机实习报告
指导教师:姓名:学号:专业:联系电话:上海交通大学目录序言 (3)实验课题(一) 雅可比迭代法和高斯-塞得尔迭代法的收敛性和收敛速度 (4)数值分析 (6)实验课题(二) 松弛因子对SOR法收敛速度的影响 (6)数值分析 (12)总结 (13)附录(程序清单) (14)1.雅可比迭代法和高斯-塞得尔迭代法的收敛性和收敛速度 (14)雅可比迭代法: (14)高斯-塞得尔迭代法: (16)2.松弛因子对SOR法收敛速度的影响 (18)松弛法(SOR) (18)序言随着科学技术的发展,提出了大量复杂的数值计算问题,在实际解决这些计算问题的长期过程中,形成了计算方法这门学科,专门研究各种数学问题的数值解法(近似解法),包括方法的构造和求解过程的误差分析,是一门内容丰富,有自身理论体系的实用性很强的学科。
解决工程问题,往往需要处理很多数学模型,这就要花费大量的人力和时间,但是还有不少数学模型无法用解析法得到解。
使用数值方法并利用计算机,就可以克服这些困难。
事实上,科学计算已经与理论分析、科学实验成为平行的研究和解决科技问题的科学手段,经常被科技工作者所采用。
作为科学计算的核心内容——数值分析(数值计算方法),已逐渐成为广大科技工作者必备的基本知识并越来越被人重视。
由于数值方法是解数值问题的系列计算公式,所以数值方法是否有效,不但与方法本身的好坏有关,而且与数值问题本身的好坏也有关,因此,研究数值方法时,不但需要研究数值方法的好坏,即数值稳定性问题,而且还需要研究数值问题本身的好坏,即数值问题的性态,以及它们的判别问题。
数值计算的绝大部分方法都具有近似性,而其理论又具有严密的科学性,方法的近似值正是建立在理论的严密性基础上,根据计算方法的这一特点。
因此不仅要求掌握和使用算法,还要重视必要的误差分析,以保证计算结果的可靠性。
数值计算还具有应用性强的特点,计算方法的绝大部分方法如求微分方程近似解,求积分近似值,求解超越方程,解线性方程组等都具有较强的实用性,而插值法,最小二乘法,样条函数等也都是工程技术领域中常用的,有实际应用价值的方法。
优质文档精选——数值分析上机实验报告
数值分析上机实验报告《数值分析》上机实验报告1.用Newton 法求方程 X 7-X 4+14=0在(0.1,1.9)中的近似根(初始近似值取为区间端点,迭代6次或误差小于0.00001)。
1.1 理论依据:设函数在有限区间[a ,b]上二阶导数存在,且满足条件{}αϕ上的惟一解在区间平方收敛于方程所生的迭代序列迭代过程由则对任意初始近似值达到的一个中使是其中上不变号在区间],[0)(3,2,1,0,)(')()(],,[x |))(),((|,|,)(||)(|.4;0)(.3],[)(.20)()(.110......b a x f x k x f x f x x x Newton b a b f a f mir b a c x f ab c f x f b a x f b f x f k k k k k k ==-==∈≤-≠>+令)9.1()9.1(0)8(4233642)(0)16(71127)(0)9.1(,0)1.0(,1428)(3225333647>⋅''<-=-=''<-=-='<>+-=f f x x x x x f x x x x x f f f x x x f故以1.9为起点⎪⎩⎪⎨⎧='-=+9.1)()(01x x f x f x x k k k k 如此一次一次的迭代,逼近x 的真实根。
当前后两个的差<=ε时,就认为求出了近似的根。
本程序用Newton 法求代数方程(最高次数不大于10)在(a,b )区间的根。
1.2 C 语言程序原代码:#include<stdio.h>#include<math.h> main(){double x2,f,f1;double x1=1.9; //取初值为 1.9 do{x2=x1;f=pow(x2,7)-28*pow(x2,4)+14; f1=7*pow(x2,6)-4*28*pow(x2,3); x1=x2-f/f1;}while(fabs(x1-x2)>=0.00001||x1<0.1); //限制循环次数 printf("计算结果:x=%f\n",x1);}1.3 运行结果:1.4 MATLAB 上机程序function y=Newton(f,df,x0,eps,M) d=0;for k=1:Mif feval(df,x0)==0d=2;breakelsex1=x0-feval(f,x0)/feval(df,x0);ende=abs(x1-x0);x0=x1;if e<=eps&&abs(feval(f,x1))<=epsd=1;breakendendif d==1y=x1;elseif d==0y='迭代M次失败';elsey= '奇异'endfunction y=df(x)y=7*x^6-28*4*x^3;Endfunction y=f(x)y=x^7-28*x^4+14;End>> x0=1.9;>> eps=0.00001;>> M=100;>> x=Newton('f','df',x0,eps,M);>> vpa(x,7)1.5 问题讨论:1.使用此方法求方解,用误差来控制循环迭代次数,可以在误差允许的范围内得到比较理想的计算结果。
数值分析上机实验报告(插值)
数值分析第一次上机练习实验报告——Lagrange 插值与三次样条插值一、 问题的描述设()2119f x x =+, []1,1x ∈-,取15iix =-+,0,1,2,...,10i =.试求出10次Lagrange 插值多项式()10L x 和三次样条插值函数()S x (采用自然边界条件),并用图画出()f x ,()10L x ,()S x .二、 方法描述——Lagrange 插值与三次样条插值我们取15i ix =-+,0,1,2,...,10i =,通过在i x 点的函数值()2119i i f x x =+来对原函数进行插值,我们记插值函数为()g x ,要求它满足如下条件:()()21,0,1,2,...,1019i i i g x f x i x ===+ (1)我们在此处要分别通过Lagrange 插值(即多项式插值)与三次样条插值的方法对原函数()2119f x x=+进行插值,看两种方法的插值结果,并进行结果的比较。
10次的Lagrange 插值多项式为:()()10100i i i L x y l x ==∑ (2)其中:()21,0,1,2,...,1019i i iy f x i x ===+ 以及()()()()()()()()()011011......,0,1,2,...,10......i i n i i i i i i i n x x x x x x x x l x i x x x x x x x x -+-+----==----我们根据(2)进行程序的编写,我们可以通过几个循环很容易实现函数的Lagrange 插值。
理论上我们根据区间[]1,1-上给出的节点做出的插值多项式()n L x 近似于()f x ,而多项式()n L x 的次数n 越高逼近()f x 的精度就越好。
但实际上并非如此,而是对任意的插值节点,当n →+∞的时候()n L x 不一定收敛到()f x ;而是有时会在插值区间的两端点附近会出现严重的()n L x 偏离()f x 的现象,即所谓的Runge 现象。
数值分析实验报告--实验2--插值法
1 / 21数值分析实验二:插值法1 多项式插值的震荡现象1.1 问题描述考虑一个固定的区间上用插值逼近一个函数。
显然拉格朗日插值中使用的节点越多,插值多项式的次数就越高。
我们自然关心插值多项式的次数增加时, 是否也更加靠近被逼近的函数。
龙格(Runge )给出一个例子是极著名并富有启发性的。
设区间[-1,1]上函数21()125f x x=+ (1)考虑区间[-1,1]的一个等距划分,分点为n i nix i ,,2,1,0,21 =+-= 则拉格朗日插值多项式为201()()125nn ii iL x l x x ==+∑(2)其中的(),0,1,2,,i l x i n =是n 次拉格朗日插值基函数。
实验要求:(1) 选择不断增大的分点数目n=2, 3 …. ,画出原函数f(x)及插值多项式函数()n L x 在[-1,1]上的图像,比较并分析实验结果。
(2) 选择其他的函数,例如定义在区间[-5,5]上的函数x x g xxx h arctan )(,1)(4=+=重复上述的实验看其结果如何。
(3) 区间[a,b]上切比雪夫点的定义为 (21)cos ,1,2,,1222(1)k b a b ak x k n n π⎛⎫+--=+=+ ⎪+⎝⎭(3)以121,,n x x x +为插值节点构造上述各函数的拉格朗日插值多项式,比较其结果,试分析2 / 21原因。
1.2 算法设计使用Matlab 函数进行实验, 在理解了插值法的基础上,根据拉格朗日插值多项式编写Matlab 脚本,其中把拉格朗日插值部分单独编写为f_lagrange.m 函数,方便调用。
1.3 实验结果1.3.1 f(x)在[-1,1]上的拉格朗日插值函数依次取n=2、3、4、5、6、7、10、15、20,画出原函数和拉格朗日插值函数的图像,如图1所示。
Matlab 脚本文件为Experiment2_1_1fx.m 。
可以看出,当n 较小时,拉格朗日多项式插值的函数图像随着次数n 的增加而更加接近于f(x),即插值效果越来越好。
数值分析实验报告5篇
1.69376699767424 0.92310666706964 0.08471614569741 0.40804026409411
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
讨论:
利用这种方法进行这类实验,可以很精确的扰动敏感性的一般规律。即 当对扰动项的系数越来越小时,对其多项式扰动的结果也就越来越小, 即扰动敏感性与扰动项的系数成正比,扰动项的系数越大,对其根的扰 动敏感性就越明显,当扰动的系数一定时,扰动敏感性与扰动的项的幂 数成正比,扰动的项的幂数越高,对其根的扰动敏感性就越明显。
解线性方程组的直接方法
实验 (主元的选取与算法的稳定性) 问题提出:Gauss消去法是我们在线性代数中已经熟悉的。但由于计算 机的数值运算是在一个有限的浮点数集合上进行的,如何才能确保 Gauss消去法作为数值算法的稳定性呢?Gauss消去法从理论算法到数值 算法,其关键是主元的选择。主元的选择从数学理论上看起来平凡,它 却是数值分析中十分典型的问题。 实验内容:考虑线性方程组 编制一个能自动选取主元,又能手动选取主元的求解线性方程组的 Gauss消去过程。 实验要求: (1)取矩阵,则方程有解。取n=10计算矩阵的条件数。让程序自动选 取主元,结果如何? (2)现选择程序中手动选取主元的功能。每步消去过程总选取按模最 小或按模尽可能小的元素作为主元,观察并记录计算结果。若每步消去 过程总选取按模最大的元素作为主元,结果又如何?分析实验的结果。 (3)取矩阵阶数n=20或者更大,重复上述实验过程,观察记录并分析 不同的问题及消去过程中选择不同的主元时计算结果的差异,说明主元
数值分析上机实践报告
数值分析上机实践报告一、实验目的本次实验主要目的是通过上机操作,加深对数值分析算法的理解,并熟悉使用Matlab进行数值计算的基本方法。
在具体实验中,我们将实现三种常见的数值分析算法:二分法、牛顿法和追赶法,分别应用于解决非线性方程、方程组和线性方程组的求解问题。
二、实验原理与方法1.二分法二分法是一种常见的求解非线性方程的数值方法。
根据函数在给定区间端点处的函数值的符号,不断缩小区间的长度,直到满足精度要求。
2.牛顿法牛顿法是求解方程的一种迭代方法,通过构造方程的泰勒展开式进行近似求解。
根据泰勒展式可以得到迭代公式,利用迭代公式不断逼近方程的解。
3.追赶法追赶法是用于求解三对角线性方程组的一种直接求解方法。
通过构造追赶矩阵,采用较为简便的向前追赶和向后追赶的方法进行计算。
本次实验中,我们选择了一组非线性方程、方程组和线性方程组进行求解。
具体的实验步骤如下:1.调用二分法函数,通过输入给定区间的上下界、截止误差和最大迭代次数,得到非线性方程的数值解。
2.调用牛顿法函数,通过输入初始迭代点、截止误差和最大迭代次数,得到方程组的数值解。
3.调用追赶法函数,通过输入追赶矩阵的三个向量与结果向量,得到线性方程组的数值解。
三、实验结果与分析在进行实验过程中,我们分别给定了不同的参数,通过调用相应的函数得到了实验结果。
下面是实验结果的汇总及分析。
1.非线性方程的数值解我们通过使用二分法对非线性方程进行求解,给定了区间的上下界、截止误差和最大迭代次数。
实验结果显示,根据给定的输入,我们得到了方程的数值解。
通过与解析解进行比较,可以发现二分法得到的数值解与解析解的误差在可接受范围内,说明二分法是有效的。
2.方程组的数值解我们通过使用牛顿法对方程组进行求解,给定了初始迭代点、截止误差和最大迭代次数。
实验结果显示,根据给定的输入,我们得到了方程组的数值解。
与解析解进行比较,同样可以发现牛顿法得到的数值解与解析解的误差在可接受范围内,说明牛顿法是有效的。
数值分析上机实习报告(西南交通大学)
数值分析上机实习报告姓名:学号:专业:大地测量学与测量工程电话:序言1.所用程序语言:本次数值分析上机实习采用Visual c#作为程序设计语言,利用Visual c#可视化的编程实现方法,采用对话框形式进行设计计算程序界面,并将结果用表格或文档的格式给出。
2.程序概述:(1)第一题是采用牛顿法和steffensen法分别对两个题进行分析,编好程序后分别带入不同的初值,观察与真实值的差别,分析出初值对结果的影响,分析两种方法的收敛速度。
(2)第二题使用Visual c#程序设计语言完成了“松弛因子对SOR法收敛速度的影响”,通过在可视化界面下输入不同的n和w值,点击按钮直接可看到迭代次数及计算结果,观察了不同的松弛因子w对收敛速度的影响。
目录一.用牛顿法,及牛顿-Steffensen法............ 错误!未定义书签。
1. 计算结果.................................... 错误!未定义书签。
2. 结果分析 (5)3. 程序清单 (5)二.松弛因子对SOR法收敛速度的影响 (8)1. 迭代次数计算结果 (8)2. 计算X()结果 (10)3. 对比分析 (12)4. 程序清单: (12)三.实习总结 (14)实验课题(一)用牛顿法,及牛顿-Steffensen法题目:分别用牛顿法,及牛顿-Steffensen法(1)求ln(x+sin x)=0的根。
初值x0分别取0.1, 1,1.5, 2, 4进行计算。
(2)求sin x=0的根。
初值x0分别取1,1.4,1.6, 1.8,3进行计算。
分析其中遇到的现象与问题。
1、计算结果由于比较多每种方法中只选取了其中两个的图片例在下面:2、结果分析通过对以上的牛顿法和steffensen法的练习,我发现在初值的选取很重要,好的初值选出后可以很快的达到预定的精度,要是选的不好就很慢,而且在有的时候得出的还是非数字,所以初始值的选取很重要。
数值分析实验报告--实验6--解线性方程组的迭代法
1 / 8数值分析实验六:解线性方程组的迭代法2016113 张威震1 病态线性方程组的求解1.1 问题描述理论的分析表明,求解病态的线性方程组是困难的。
实际情况是否如此,会出现怎样的现象呢?实验内容:考虑方程组Hx=b 的求解,其中系数矩阵H 为Hilbert 矩阵,,,1(),,,1,2,,1i j n n i j H h h i j n i j ⨯===+-这是一个著名的病态问题。
通过首先给定解(例如取为各个分量均为1)再计算出右端b 的办法给出确定的问题。
实验要求:(1)选择问题的维数为6,分别用Gauss 消去法、列主元Gauss 消去法、J 迭代法、GS 迭代法和SOR 迭代法求解方程组,其各自的结果如何?将计算结果与问题的解比较,结论如何?(2)逐步增大问题的维数(至少到100),仍然用上述的方法来解它们,计算的结果如何?计算的结果说明了什么?(3)讨论病态问题求解的算法1.2 算法设计首先编写各种求解方法的函数,Gauss 消去法和列主元高斯消去法使用实验5中编写的函数myGauss.m 即可,Jacobi 迭代法函数文件为myJacobi.m ,GS 迭代法函数文件为myGS.m ,SOR 方法的函数文件为mySOR.m 。
1.3 实验结果1.3.1 不同迭代法球求解方程组的结果比较选择H 为6*6方阵,方程组的精确解为x* = (1, 1, 1, 1, 1, 1)T ,然后用矩阵乘法计算得到b ,再使用Gauss 顺序消去法、Gauss 列主元消去法、Jacobi 迭代法、G-S 迭代法和SOR 方法分别计算得到数值解x1、x2、x3、x4,并计算出各数值解与精确解之间的无穷范数。
Matlab 脚本文件为Experiment6_1.m 。
迭代法的初始解x 0 = (0, 0, 0, 0, 0, 0)T ,收敛准则为||x(k+1)-x(k)||∞<eps=1e-6,SOR方法的松弛因子选择为w=1.3,计算结果如表1。
数值分析实验报告
《数值分析》实验报告班级:姓名:学号:指导老师:实验基本要求一、上机前的准备工作1、复习和掌握与本次实验有关的教学内容。
2、根据本次实验要求,在纸上编写算法及上机的程序,并经过人工模拟运行检验,减少不必要的错误,提高上机效率。
切忌不编程序、不作人工检查就进行程序输入,这只能使上机调试的难度增加,甚至可能带来学习自信心的下降,影响后续课程的学习。
二、上机实验步骤1、启动开发环境;2、建立源程序文件,输入源程序;3、编译产生目标程序,连接生成可执行程序,运行程序,输出结果;4、对数值计算结果进行误差分析,讨论数值算法的收敛性与稳定性;5、整理实验报告。
三、实验报告实验报告是记录实验工作全过程的技术文档,实验报告的撰写是科学技术工作的一个组成部分。
《数值分析》实验报告包括下列要求:1、实验原理;2、实验内容和要求;3、数值算法描述,包括数据输入、数据处理和数据输出;4、算法的实现(1)给出具体的计算实例,(2)经调试正确的源程序清单,(3)对具体的数值例子给出数值结果;5、计算结果的误差分析,算法的收敛性与稳定性的讨论;6、实验心得。
实验一、误差分析一、实验目的1、通过上机编程,复习巩固以前所学程序设计语言及上机操作指令;2、通过上机计算,了解误差、绝对误差、误差界、相对误差界的有关概念;3、 通过上机计算,了解舍入误差所引起的数值不稳定性。
二、实验原理误差问题是数值分析的基础,又是数值分析中一个困难的课题。
在实际计算中,如果选用了不同的算法,由于舍入误差的影响,将会得到截然不同的结果。
因此,选取算法时注重分析舍入误差的影响,在实际计算中是十分重要的。
同时,由于在数值求解过程中用有限的过程代替无限的过程会产生截断误差,因此算法的好坏会影响到数值结果的精度。
三、实验任务对20,,2,1,0 =n ,计算定积分⎰+=105dx x x y nn . 算法1:利用递推公式151--=n n y ny , 20,,2,1 =n , 取 ⎰≈-=+=100182322.05ln 6ln 51dx x y . 算法2:利用递推公式n n y n y 51511-=- 1,,19,20 =n . 注意到⎰⎰⎰=≤+≤=1010202010201051515611261dx x dx x x dx x , 取 008730.0)12611051(20120≈+≈y . 思考:从计算结果看,哪个算法是不稳定的,哪个算法是稳定的。
《数值分析》上机实验报告
数值分析上机实验报告《数值分析》上机实验报告1.用Newton 法求方程 X 7-X 4+14=0在(0.1,1.9)中的近似根(初始近似值取为区间端点,迭代6次或误差小于0.00001)。
1.1 理论依据:设函数在有限区间[a ,b]上二阶导数存在,且满足条件{}αϕ上的惟一解在区间平方收敛于方程所生的迭代序列迭代过程由则对任意初始近似值达到的一个中使是其中上不变号在区间],[0)(3,2,1,0,)(')()(],,[x |))(),((|,|,)(||)(|.4;0)(.3],[)(.20)()(.110......b a x f x k x f x f x x x Newton b a b f a f mir b a c x f ab c f x f b a x f b f x f k k k k k k ==-==∈≤-≠>+令)9.1()9.1(0)8(4233642)(0)16(71127)(0)9.1(,0)1.0(,1428)(3225333647>⋅''<-=-=''<-=-='<>+-=f f x x x x x f x x x x x f f f x x x f故以1.9为起点⎪⎩⎪⎨⎧='-=+9.1)()(01x x f x f x x k k k k 如此一次一次的迭代,逼近x 的真实根。
当前后两个的差<=ε时,就认为求出了近似的根。
本程序用Newton 法求代数方程(最高次数不大于10)在(a,b )区间的根。
1.2 C语言程序原代码:#include<stdio.h>#include<math.h>main(){double x2,f,f1;double x1=1.9; //取初值为1.9do{x2=x1;f=pow(x2,7)-28*pow(x2,4)+14;f1=7*pow(x2,6)-4*28*pow(x2,3);x1=x2-f/f1;}while(fabs(x1-x2)>=0.00001||x1<0.1); //限制循环次数printf("计算结果:x=%f\n",x1);}1.3 运行结果:1.4 MATLAB上机程序function y=Newton(f,df,x0,eps,M)d=0;for k=1:Mif feval(df,x0)==0d=2;breakelsex1=x0-feval(f,x0)/feval(df,x0);ende=abs(x1-x0);x0=x1;if e<=eps&&abs(feval(f,x1))<=epsd=1;breakendendif d==1y=x1;elseif d==0y='迭代M次失败';elsey= '奇异'endfunction y=df(x)y=7*x^6-28*4*x^3;Endfunction y=f(x)y=x^7-28*x^4+14;End>> x0=1.9;>> eps=0.00001;>> M=100;>> x=Newton('f','df',x0,eps,M);>> vpa(x,7)1.5 问题讨论:1.使用此方法求方解,用误差来控制循环迭代次数,可以在误差允许的范围内得到比较理想的计算结果。
数值分析实验报告
南京信息工程大学数值分析实验报告(一)实验名称数值分析 实验日期 2016.5.13得分指导教师专业 数学与应用数学 年级 大二 班级 应用数学1班 姓名 丁晨 学号 20141323001一、 实验目的(1) 了解插值的基本原理(2) 了解拉格朗日插值,牛顿差值和样条差值的基本思想; 二、实验内容试用4次牛顿插值多项式P 4(x )及三次样条函数S (x )对数据进行插值。
用图给出{(x i,y i ),x i =0.2+0.08i,i=0,1,11,10}P 4(x)及S (x )2.在区间[1,1]上,取n=10,20用两组等距节点对龙格函数f(x)=22511x作三次样条差值,对每个n 分别画出差值函数和f (x )的图形。
3.三、实验求解 1.程序代码: clc;x1=[0.2 0.4 0.6 0.8 1.0];y1=[0.98 0.92 0.81 0.64 0.38]; n=length(y1); c=y1(:);for j=2:n %求差商 for i=n:-1:jc(i)=(c(i)-c(i-1))/(x1(i)-x1(i-j+1)); end endsyms x df d;df(1)=1;d(1)=y1(1);for i=2:n %求牛顿差值多项式 df(i)=df(i-1)*(x-x1(i-1)); d(i)=c(i-1)*df(i); endP4=vpa(sum(d),5) %P4即为4次牛顿插值多项式,并保留小数点后5位数 pp=csape(x1,y1, 'variational');%调用三次样条函数 q=pp.coefs;q1=q(1,:)*[(x-.2)^3;(x-.2)^2;(x-.2);1]; q1=vpa(collect(q1),5)q2=q(1,:)*[(x-.4)^3;(x-.4)^2;(x-.4);1]; q2=vpa(collect(q2),5)q3=q(1,:)*[(x-.6)^3;(x-.6)^2;(x-.6);1]; q3=vpa(collect(q3),5)q4=q(1,:)*[(x-.8)^3;(x-.8)^2;(x-.8);1]; q4=vpa(collect(q4),5)%求解并化简多项式运行matlab 程序结果如下:P4 =0.98*x - 0.3*(x - 0.2)*(x - 0.4) - 0.625*(x - 0.2)*(x - 0.4)*(x - 0.6) - 0.20833*(x - 0.2)*(x - 0.4)*(x - 0.8)*(x - 0.6) + 0.784q1 =- 1.3393*x^3 + 0.80357*x^2 - 0.40714*x + 1.04q2 =- 1.3393*x^3 + 1.6071*x^2 - 0.88929*x + 1.1643q3 =- 1.3393*x^3 + 2.4107*x^2 - 1.6929*x + 1.4171q4 =- 1.3393*x^3 + 3.2143*x^2 - 2.8179*x + 1.86290.10.20.30.40.50.60.70.80.910.40.50.60.70.80.911.1所以4次牛顿差值多项式4()P x =0.98*x - 0.3*(x - 0.2)*(x - 0.4) - 0.625*(x - 0.2)*(x- 0.4)*(x - 0.6) - 0.20833*(x - 0.2)*(x - 0.4)*(x - 0.8)*(x - 0.6) + 0.784三次样条差值多项式()Q x323232321.33930.803570.40714 1.04,[0.2,0.4]1.3393 1.60710.88929 1.1643,[0.4,0.6]1.3393 2.4107 1.6929 1.4171,[0.6,0.8]1.3393 3.21432.8179 1.8629,[0.8,1.0]x x x x x x x x x x x x x x x x ⎧-+-+∈⎪-+-+∈⎪⎨-+-+∈⎪⎪-+-+∈⎩2.三次样条差值: 1.M 文件: x=-1:0.0001:1; y=1./(1+25*x.^2); x1=-1:0.2:1;y1=interp1(x,y,x1,'spline'); plot(x1,y1,'o',x,y) grid on xlabel('x') ylabel('y') y1matlab 运行结果如下: y1 =0.0385 0.0588 0.1000 0.2000 0.5000 1.0000 0.5000 0.2000 0.1000 0.05880.0385。
数值分析上机实验报告
对于二分法,只要能够保证在给定的区间内有根,使能够收敛的,当时收敛的速度和给定的区间有关,二且总体上来说速度比较慢。Newton法,收敛速度要比二分法快,但是最终其收敛的结果与初值的选取有关,初值不同,收敛的结果也可能不一样,也就是结果可能不时预期需要得结果。改进的Newton法求解重根问题时,如果初值不当,可能会不收敛,这一点非常重要,当然初值合适,相同情况下其速度要比Newton法快得多。
结果分析和讨论:
1.用二分法计算方程 在[1,2]内的根。( ,下同)
计算结果为
x=;
f(x)=;
k=18;
由f(x)知结果满足要求,但迭代次数比较多,方法收敛速度比较慢。
2.用二分法计算方程 在[1,]内的根。
计算结果为
x=;
f(x)=;
k=17;
由f(x)知结果满足要求,但迭代次数还是比较多。
3.用Newton法求解下列方程
程序设计:
本实验采用Matlab的M文件编写。其中待求解的方程写成function的方式,如下
function y=f(x);
y=-x*x-sin(x);
写成如上形式即可,下面给出主程序。
二分法源程序:
clear
%%%给定求解区间
b=;
a=0;
%%%误差
R=1;
k=0;%迭代次数初值
while (R>5e-6) ;
%%%改进常数或重根数
miu=2;
%%%初始值x0
x0=input('input initial value x0>>');
k=0;%迭代次数
max=100;%最大迭代次数
R=eval(subs(f,'x0','x'));%求解f(x0),以确定初值x0时否就是解
数值分析实验报告
x0[i] = 0.01*i;//采用循环对数组变量x[100]赋值
}
rk_getback(x0, y0, 0.01, -50);//调用R-K函数计算得到每一个x(n)对应的y(n)值
CSeries embro = (CSeries)m_chart.Series(0);//使用画图控件Teechart进行画图
}
for (i = 0; i <= 200; i++)//利用插值多项式计算201个数值用于绘图
{
a1[i] = u + i*0.01;
b1[i] = 1 / (1 + 25 * a1[i] * a1[i]);
y[i] = Lagrange(a1[i], n, a2, b2);
}
m_chart.AddSeries(0);//用teechart绘制插值多项式函数图像
m3 = m.transpose()*y;//计算Y矩阵
m4 = m2*m3;//计算系数矩阵
CSeries serdemo = (CSeries)m_mchart.Series(0);//创建CSeries对象
MatrixXd m5(1, 4),m6(1,1);//创建1*4和1*1的矩阵
int i;
考虑在一个固定的区间上用插值逼近一个函数。显然Lagrange插值中使用的节点越多,插值多项式的次数就越高。我们自然关心插值多项式的次数增加时, 是否也更加靠近被逼近的函数。Runge给出的一个例子是极著名并富有启发性的。设区间[-1,1]上函数
考虑区间[-1,1]的一个等距划分,分点为
则拉格朗日插值多项式为
int i, n =19;
double j = 2.0 / (n ), u = -1.0, v = 1.0;
数值分析拟合实验报告(3篇)
第1篇一、实验目的本次实验旨在通过数值分析方法对一组已知数据点进行拟合,掌握线性插值、多项式插值、样条插值等方法的基本原理和实现过程,并学会使用MATLAB进行数值拟合。
二、实验内容1. 线性插值线性插值是一种简单的插值方法,适用于数据点分布较为均匀的情况。
其基本原理是通过两个相邻的数据点,利用线性关系拟合出一条直线,然后通过该直线来估算未知的值。
2. 多项式插值多项式插值是一种较为精确的插值方法,通过构造一个多项式函数来逼近已知数据点。
其基本原理是利用最小二乘法求解多项式的系数,使得多项式在已知数据点上的误差最小。
3. 样条插值样条插值是一种更灵活的插值方法,通过构造一系列样条曲线来逼近已知数据点。
其基本原理是利用最小二乘法求解样条曲线的系数,使得样条曲线在已知数据点上的误差最小。
三、实验步骤1. 线性插值(1)在MATLAB中输入已知数据点,如:x = [1, 2, 3, 4, 5];y = [2, 4, 6, 8, 10];(2)使用MATLAB内置函数`linspace`生成插值点:xi = linspace(1, 5, 100);(3)使用MATLAB内置函数`interp1`进行线性插值:yi = interp1(x, y, xi, 'linear');(4)绘制插值曲线:plot(xi, yi, 'b-', x, y, 'ro');2. 多项式插值(1)在MATLAB中输入已知数据点,如:x = [1, 2, 3, 4, 5];y = [2, 4, 6, 8, 10];(2)使用MATLAB内置函数`polyfit`求解多项式系数:p = polyfit(x, y, 3);(3)使用MATLAB内置函数`polyval`进行多项式插值:yi = polyval(p, xi);(4)绘制插值曲线:plot(xi, yi, 'b-', x, y, 'ro');3. 样条插值(1)在MATLAB中输入已知数据点,如:x = [1, 2, 3, 4, 5];y = [2, 4, 6, 8, 10];(2)使用MATLAB内置函数`spline`进行样条插值:yi = spline(x, y, xi);(3)绘制插值曲线:plot(xi, yi, 'b-', x, y, 'ro');四、实验结果与分析1. 线性插值线性插值方法简单易行,但精度较低,适用于数据点分布较为均匀的情况。
数值分析的实验报告
数值分析的实验报告数值分析的实验报告导言数值分析是一门研究数值计算方法和数值计算误差的学科,它在科学计算、工程技术和社会经济等领域具有广泛的应用。
本实验旨在通过对数值分析方法的实际应用,验证其有效性和可靠性。
实验一:方程求根方程求根是数值分析中的基础问题之一。
我们选取了一个非线性方程进行求解。
首先,我们使用二分法进行求解。
通过多次迭代,我们得到了方程的一个近似解。
然后,我们使用牛顿法进行求解。
与二分法相比,牛顿法的收敛速度更快,但需要选择一个初始点。
通过比较两种方法的结果,我们验证了牛顿法的高效性。
实验二:插值与拟合插值与拟合是数值分析中常用的数据处理方法。
我们选取了一组实验数据,通过拉格朗日插值法和最小二乘法进行插值和拟合。
通过对比两种方法的拟合效果,我们验证了最小二乘法在处理含有噪声数据时的优势。
同时,我们还讨论了插值和拟合的精度与样本点数量之间的关系。
实验三:数值积分数值积分是数值分析中的重要内容之一。
我们选取了一个定积分进行计算。
首先,我们使用复化梯形公式进行积分计算。
通过增加分割区间的数量,我们得到了更精确的结果。
然后,我们使用复化辛普森公式进行积分计算。
与复化梯形公式相比,复化辛普森公式具有更高的精度。
通过比较两种方法的结果,我们验证了复化辛普森公式的优越性。
实验四:常微分方程数值解常微分方程数值解是数值分析中的重要应用之一。
我们选取了一个常微分方程进行数值解的计算。
首先,我们使用欧拉方法进行数值解的计算。
然后,我们使用改进的欧拉方法进行数值解的计算。
通过比较两种方法的结果,我们验证了改进的欧拉方法的更高精度和更好的稳定性。
实验五:线性方程组的数值解法线性方程组的数值解法是数值分析中的重要内容之一。
我们选取了一个线性方程组进行数值解的计算。
首先,我们使用高斯消元法进行数值解的计算。
然后,我们使用追赶法进行数值解的计算。
通过比较两种方法的结果,我们验证了追赶法在求解三对角线性方程组时的高效性。
数值分析上机实验报告
数值分析上机实验报告数值分析上机实验报告一、引言数值分析是一门研究利用计算机进行数值计算的学科。
通过数值分析,我们可以使用数学方法和算法来解决实际问题,例如求解方程、插值和逼近、数值积分等。
本次上机实验旨在通过编程实现数值计算方法,并应用于实际问题中。
二、实验目的本次实验的目的是掌握数值计算方法的基本原理和实现过程,加深对数值分析理论的理解,并通过实际应用提高编程能力。
三、实验内容1. 数值求解方程首先,我们使用二分法和牛顿迭代法分别求解非线性方程的根。
通过编写程序,输入方程的初始值和精度要求,计算得到方程的根,并与理论解进行对比。
2. 数值插值和逼近接下来,我们使用拉格朗日插值和最小二乘法进行数据的插值和逼近。
通过编写程序,输入给定的数据点,计算得到插值多项式和逼近多项式,并绘制出插值曲线和逼近曲线。
3. 数值积分然后,我们使用梯形法和辛普森法进行定积分的数值计算。
通过编写程序,输入被积函数和积分区间,计算得到定积分的近似值,并与解析解进行比较。
四、实验步骤1. 数值求解方程(1)使用二分法求解非线性方程的根。
根据二分法的原理,编写程序实现二分法求解方程的根。
(2)使用牛顿迭代法求解非线性方程的根。
根据牛顿迭代法的原理,编写程序实现牛顿迭代法求解方程的根。
2. 数值插值和逼近(1)使用拉格朗日插值法进行数据的插值。
根据拉格朗日插值法的原理,编写程序实现数据的插值。
(2)使用最小二乘法进行数据的逼近。
根据最小二乘法的原理,编写程序实现数据的逼近。
3. 数值积分(1)使用梯形法进行定积分的数值计算。
根据梯形法的原理,编写程序实现定积分的数值计算。
(2)使用辛普森法进行定积分的数值计算。
根据辛普森法的原理,编写程序实现定积分的数值计算。
五、实验结果与分析1. 数值求解方程通过二分法和牛顿迭代法,我们成功求解了给定非线性方程的根,并与理论解进行了对比。
结果表明,二分法和牛顿迭代法都能够较好地求解非线性方程的根,但在不同的问题中,二者的收敛速度和精度可能会有所差异。
数值分析实验报告
数值分析实验报告数值分析实验报告导言数值分析是一门研究利用计算机进行数值计算和数值模拟的学科。
通过数值分析,我们可以利用数学方法和计算机技术解决实际问题,提高计算效率和精度。
本实验报告将介绍我们在数值分析实验中所进行的研究和实践。
一、实验目的本次实验的目的是通过数值分析方法,研究和解决实际问题。
具体而言,我们将通过数值计算方法,对某个物理模型或数学模型进行求解,并分析结果的准确性和稳定性。
二、实验方法我们采用了有限差分法作为数值计算的方法。
有限差分法是一种常用的数值分析方法,适用于求解偏微分方程和差分方程。
通过将连续的问题离散化为离散的差分方程,我们可以得到数值解。
三、实验步骤1. 确定问题:首先,我们需要确定要研究的问题。
在本次实验中,我们选择了热传导问题作为研究对象。
2. 建立数学模型:根据研究问题的特点,我们建立了相应的数学模型。
在热传导问题中,我们可以利用热传导方程描述热量的传递过程。
3. 离散化:为了进行数值计算,我们需要将连续的问题离散化为离散的差分方程。
在热传导问题中,我们可以将空间和时间进行离散化。
4. 求解差分方程:通过求解离散化的差分方程,我们可以得到数值解。
在热传导问题中,我们可以利用迭代法或直接求解法得到数值解。
5. 分析结果:最后,我们需要对数值解进行分析。
我们可以比较数值解和解析解的差异,评估数值解的准确性和稳定性。
四、实验结果通过数值计算,我们得到了热传导问题的数值解。
我们将数值解与解析解进行比较,并计算了误差。
结果显示,数值解与解析解的误差在可接受范围内,证明了数值计算的准确性。
此外,我们还对数值解进行了稳定性分析。
通过改变离散化步长,我们观察到数值解的变化趋势。
结果显示,随着离散化步长的减小,数值解趋于稳定,证明了数值计算的稳定性。
五、实验总结通过本次实验,我们深入了解了数值分析的基本原理和方法。
我们通过数值计算,成功解决了热传导问题,并对数值解进行了准确性和稳定性分析。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
序言数值分析是计算数学的范畴,有时也称它为计算数学、计算方法、数值方法等,其研究对象是各种数学问题的数值方法的设计、分析及其有关的数学理论和具体实现的一门学科,它是一个数学分支。
是科学与工程计算(科学计算)的理论支持。
许多科学与工程实际问题(核武器的研制、导弹的发射、气象预报)的解决都离不开科学计算。
目前,试验、理论、计算已成为人类进行科学活动的三大方法。
数值分析是计算数学的一个主要部分,计算数学是数学科学的一个分支,它研究用计算机求解各种数学问题的数值计算方法及其理论与软件实现。
现在面向数值分析问题的计算机软件有:C,C++,MATLAB,Python,Fortran等。
MATLAB是matrix laboratory的英文缩写,它是由美国Mathwork公司于1967年推出的适合用于不同规格计算机和各种操纵系统的数学软件包,现已发展成为一种功能强大的计算机语言,特别适合用于科学和工程计算。
目前,MATLAB应用非常广泛,主要用于算法开发、数据可视化、数值计算和数据分析等,除具备卓越的数值计算能力外,它还提供了专业水平的符号计算,文字处理,可视化建模仿真和实时控制等功能。
本实验报告使用了MATLAB软件。
对不动点迭代,函数逼近(lagrange插值,三次样条插值,最小二乘拟合),追赶法求解矩阵的解,4RungeKutta方法求解,欧拉法及改进欧拉法等算法做了简单的计算模拟实践。
并比较了各种算法的优劣性,得到了对数值分析这们学科良好的理解,对以后的科研数值分析能力有了极大的提高。
目录序言 (1)问题一非线性方程数值解法 (3)1.1 计算题目 (3)1.2 迭代法分析 (3)1.3计算结果分析及结论 (4)问题二追赶法解三对角矩阵 (5)2.1 问题 (5)2.2 问题分析(追赶法) (6)2.3 计算结果 (7)问题三函数拟合 (7)3.1 计算题目 (7)3.2 题目分析 (7)3.3 结果比较 (12)问题四欧拉法解微分方程 (14)4.1 计算题目 (14)4.2.1 方程的准确解 (14)4.2.2 Euler方法求解 (14)4.2.3改进欧拉方法 (16)问题五四阶龙格-库塔计算常微分方程初值问题 (17)5.1 计算题目 (17)5.2 四阶龙格-库塔方法分析 (18)5.3 程序流程图 (18)5.4 标准四阶Runge-Kutta法Matlab实现 (19)5.5 计算结果及比较 (20)问题六舍入误差观察 (22)6.1 计算题目 (22)6.2 计算结果 (22)6.3 结论 (23)7 总结 (24)附录问题一 非线性方程数值解法1.1 计算题目编写不动点迭代法求根程序:把方程010423=-+x x 写成至少四种x=g (x )的形式,取初值5.1x 0=,进行不动点迭代求根,并比较收敛性及收敛速度。
1.2 迭代法分析将方程f (x )=0改写成其等价形式)(x x φ=取方程根的某一近似值x0作为初始点,由函数)(01x x φ=可计算出x 1,如此下去,设当前点为x k ,有)(x φ计算出x k+1,即)(1k k x x φ=+ k=0,1,.....称为迭代公式。
(收敛条件)设)(x φ在[a ,b]上有连续的一阶导数,并满足:].,[,1)()2(;)(],,[)1('b a x L x b x a b a x ∈∀≤≤≤≤∈∀φφ有则有函数φ(x)在区间[a,b]上存在唯一的不动点(方程的根)x*;对任何x0属于[a,b],可由迭代公式得到序列{x k }均收敛到方程的根x*。
设上述条件成立时,算法的中止条件为:k k k x k kx k x x L L x x x x L L x x --≤---≤-+--1*01*11 现将方程010423=-+x x 改写成如下四种x=φ(x )形式并计算收敛性。
(1)21031k k x x -=+ 计算得φ’(x0) 不收敛 (2)321410x x k -=+计算得φ’(x0) 不收敛 (3)k k k x x x 41021+=+ 计算得φ’(x0) 不收敛 (4)4101+=+k k x x 计算得φ’(x0) 收敛 1.3计算结果分析及结论在command 窗口输入func=inline(‘φ(x)’);[y k ]=StablePoint(1.5,func) 函数相对误差为3-10*1。
计算结果如下表1-1:从计算结果看到,迭代法(2)(3)均不收敛,因为他们不满足局部收敛条件,而迭代法(4)比迭代法(1)收敛快,只需要四步就可以计算得到近似值。
在做不动点迭代时,为使误差尽可能小且数据稳定。
由局部收敛性定理,在将函数f(x)化作x=φ(x )时,应尽可能构造函数使φ(x )收敛。
表1-1 迭代法计算结果问题二追赶法解三对角矩阵2.1 问题编写有效程序解线性方程组Ax=b,其中2.2 问题分析(追赶法)我们利用矩阵的直接三角分解法来推导三对角的计算公式,由系数矩阵A的特点,可以将方程分解为两个三角矩阵的乘积,即A=LU。
其中L 为下三角矩阵,U为单位上三角矩阵。
用追赶法求解严格占优矩阵Ax=f 等价于解两个三角方程组:①Ly=f,求y。
②Ux=y,求x。
从而得到解三对角方程组的追赶法公式:1)计算{βi}的递推公式β1=c1/b1,Βi=ci/(bi-aiβi-1),i=2,3,4,n-1;2)解Ly=fy1=f1/b1,Yi=(fi-aiyi-1)/(bi-aiβi-1),i=2,3,...,n;3)解Ux=yXn=yn ,Xi=yi-βixi+1,i=n-1,n-2,...,2,12.3 计算结果当b=(1,2,3,4,5,...,50)T 时,即初始值为matrix=[1:1:50],计算得x=(0.3333,0.6667,....,13.1186)。
只需要不断更换matrix 控制输入b 向量,就可以得到解x 。
MA TLAB 程序为附录程序2。
问题三 函数拟合3.1 计算题目 对函数22511)(xx f +=在区间[-1,1]上取xi=-1+0.2i (i=0.1....,10) (a )对函数做多项式插值和三次样条插值,并画出插值函数及f (x )的函数;(b )对函数求其三次拟合曲线并画出拟合曲线的图像,与(a)中结果进行比较。
3.2 题目分析3.2.1 Lagrange 插值对于插值函数)(x ϕ,我们通常可以选择多种不同的函数类型,但由于代数多项式具有简单和一些良好的特性,我们常选用代数多项式作为插值函数.首先我们来看这样一个问题:给定两个插值点),(),,(1,100y x y x 其中,10x x ≠怎样做通过这两点的一次插值函数?过两点作一条直线,这条直线就是通过这两点的一次多项式插值函数,简称线性插值.下面先用待定系数法构造插值直线.设直线方程为,)(101x a a x L +=将)(),,(1,100y x y x 分别代入直线方程)(1x L ,得⎩⎨⎧=+=+11100010y x a a y x a a , 当10x x ≠时,因01110≠x x 所以方程组有解,且解唯一.这也表明,平面上两个点有且仅有一条直线通过,用待定系数法构造插值多项式的方法简单直观,容易看到解的存在性和唯一性,但要解一个方程组才能得到插值函数的系数,因工作量大且不便向高阶推广,故这种构造方法不宜采用.当10x x ≠时,若用两点式表示这条直线,则有: 101001011)(y x x x x y x x x x x L --+--= 这种形式称为Lagrange 插值多项式. 记)(),(,)(,)(1001011010x l x l x x x x x l x x x x x l --=--=称为插值基函数,计算),(),(10x l x l 的值,可知 .,0,1)(⎩⎨⎧≠===ji j i x l ij j i δ 在Lagrange 插值多项式中,可将)(1x L 看作两条直线0101y x x x x --与1010y x x x x --的叠加,并可看到两个插值点的作用和地位是平等的。
如果我们给定三个插值点2,1,0)),(,(=i x f x i i ,其中i x 互不相等,那么该怎样构造函数)(x f 的二次(抛物线)插值多项式呢?仿照线性插值的Lagrange 插值,我们可设)(),()()()()()()(2211002x l x f x l x f x l x f x l x L i ++=为二次函数。
对)(0x l 来说,要求21,x x 是它的零点,因此可设),)(()(210x x x x A x l --=同理)(),(21x l x l 也有相应形式。
),())(()())(()())(()(2101200212x f x x x x C x f x x x x B x f x x x x A x L --+--+--=∴ 将210,,x x x x =分别代入,可得 ))((1,))((1,))((1120221012010x x x x C x x x x B x x x x A --=--=--= 有)())(())(()())(())(()())(())(()(2120210121012002010212x f x x x x x x x x x f x x x x x x x x x f x x x x x x x x x L ----+----+----=一般地,当给定n+1个互不相同的插值节点时,就可得出函数的n 次插值多项式: )())(()()())(()()()()(11011000n i i i i i i n i i n i i n i i i n x x x x x x x x x x x x x x x x x f x f l x L --------==+-+-==∑∑ 下面我们以定理的形式来给出Lagrange 插值多项式的误差估计。
设)(x f 在区间[]b a ,上有直到n+1阶导数,n x x x ,,,10 是[]b a ,上n+1个互异节点,)(x P n 满足)()(i i n x f x p =的n 次插值多项式,则对[]b a x ,∈∀,有)()!1()()(1)1(x n f x R n n n +++=ωξ,其中()b a x x x n i i n ,,)()(01∈-=∏=+ξω,且依赖于.x 。
3.2.2 三次样条插值所谓三次样条插值多项式)(x S n 是一种分段函数,它在节点i x 011()n n a x x x x b -=<<⋅⋅⋅<<=分成的每个小区间1[,]i i x x -上是3次多项式,其在此区间上的表达式如下:22331111111()[()()]()()666[,]1,2,,.i i i i i i i i i i i i i i ii i h x x h x x S x x x M x x M y M y M h h h x x x i n --------=-+-+-+-∈=⋅⋅⋅,, 因此,只要确定了i M 的值,就确定了整个表达式,i M 的计算方法如下: 令:11111111116()6(,,)i i i i i i i i i i i i i i i i i i i i i h h h h h h y y y y d f x x x h h h h μλμ++++--+++⎧===-⎪++⎪⎨--⎪=-=⎪+⎩, 则i M 满足如下n-1个方程:1121,2,,1i i i i i i M M M d i n μλ-+++==⋅⋅⋅-,对于第一种边界条件下有⎪⎪⎩⎪⎪⎨⎧-=+-=+---000110111)'],([62]),['(62h f x x M M h x x f f M M n n n n n n 如果令,]),['(6,1,)'],[(6,111000100---==-==n n n n n n h x x f f d h f x x f d μλ那么解就可以为 ⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛----n n n n n n n d d d d M M M M 110110111102222 μλμλμλ3.2.3 曲线拟合由已知的离散数据点选择与实验点误差最小的曲线)(...)()()(1100x a x a x a x S n n ϕϕϕ+++=称为曲线拟合的最小二乘法。