计算方法实验报告习题1(浙大版)
- 格式:doc
- 大小:156.00 KB
- 文档页数:8
计算方法实验报告计算方法实验报告概述:计算方法是一门研究如何用计算机解决数学问题的学科。
在本次实验中,我们将学习和应用几种常见的计算方法,包括数值逼近、插值、数值积分和常微分方程求解。
通过实验,我们将深入了解这些方法的原理、应用场景以及其在计算机科学和工程领域的重要性。
数值逼近:数值逼近是一种通过使用近似值来计算复杂函数的方法。
在实验中,我们通过使用泰勒级数展开和牛顿迭代法等数值逼近技术,来计算函数的近似值。
这些方法在科学计算和工程领域中广泛应用,例如在信号处理、图像处理和优化问题中。
插值:插值是一种通过已知数据点来估算未知数据点的方法。
在实验中,我们将学习和应用拉格朗日插值和牛顿插值等方法,以及使用这些方法来构造函数的近似曲线。
插值技术在数据分析、图像处理和计算机图形学等领域中具有重要的应用价值。
数值积分:数值积分是一种通过将函数曲线划分为小矩形或梯形来估算函数的积分值的方法。
在实验中,我们将学习和应用矩形法和梯形法等数值积分技术,以及使用这些方法来计算函数的近似积分值。
数值积分在物理学、金融学和统计学等领域中被广泛使用。
常微分方程求解:常微分方程求解是一种通过数值方法来求解微分方程的方法。
在实验中,我们将学习和应用欧拉法和龙格-库塔法等常微分方程求解技术,以及使用这些方法来求解一些常见的微分方程。
常微分方程求解在物理学、生物学和工程学等领域中具有广泛的应用。
实验结果:通过实验,我们成功地应用了数值逼近、插值、数值积分和常微分方程求解等计算方法。
我们得到了准确的结果,并且在不同的应用场景中验证了这些方法的有效性和可靠性。
这些实验结果将对我们进一步理解和应用计算方法提供重要的指导和支持。
结论:计算方法是计算机科学和工程领域中的重要学科,它提供了解决复杂数学问题的有效工具和方法。
通过本次实验,我们深入了解了数值逼近、插值、数值积分和常微分方程求解等计算方法的原理和应用。
这些方法在科学研究、工程设计和数据分析等领域中具有广泛的应用价值。
计算方法A上机实验报告姓名:苏福班级:硕4020 学号:3114161019一、上机练习目的1)复习和巩固数值计算方法的基本数学模型,全面掌握运用计算机进行数值计算的具体过程及相关问题。
2)利用计算机语言独立编写、调试数值计算方法程序,培养学生利用计算机和所学理论知识分析解决实际问题的能力。
二、上机练习任务1)利用计算机语言编写并调试一系列数值方法计算通用程序,并能正确计算给定题目,掌握调试技能。
2)掌握文件使用编程技能,如文件的各类操作,数据格式设计、通用程序运行过程中文件输入输出运行方式设计等。
3)写出上机练习报告。
三、上机题目1. 共轭梯度法求解线性方程组。
(第三章)2. 三次样条插值(第四章)3. 龙贝格积分(第六章)4. 四阶龙格-库塔法求解常微分方程的初值问题四、上机报告题目1:共轭梯度法求解线性方程组1.算法原理共轭梯度法是把求解线性方程组的问题转化为求解一个与之等价的二次函数极小值的问题。
从任意给定的初始点出发,沿一组关于矩阵A共轭的方向进行线性搜索,在无舍入误差的假定下,最多迭代n 次(其中n 为矩阵A 的阶数),就可求得二次函数的极小值,也就求得了线性方程组Ax b =的解。
定理:设A 是n 阶对称正定矩阵,则x *是方程组Ax b =的解得充分必要条件是x *是二次函数1()2TT f x x Ax b x =-的极小点,即 ()()min nx R Ax b f x f x **∈=⇔=共轭梯度法的计算公式:(0)(0)(0)()()()()(1)()()(1)(1)(1)()()()(1)(1)()k T k k k T k k k k k k k k T k k k T k k k k k d r b Ax r d d Ad xx d r b Ax r Ad d Ad d r d ααββ++++++⎧==-⎪⎪=⎪⎪=+⎪⎨=-⎪⎪⎪=-⎪⎪=+⎩2. 程序框图(1)编写共轭梯度法求解对称正定矩阵的线性方程组见附录(myge.m):function x=myge(A,b)输入对称正定矩阵及对应的列向量,初始向量设为0,精度取为810 。
《计算方法》实验报告实验题目实验报告1:非线性方程组的求解···················P1~2实验报告2:线性方程组解法·······················P3~4 实验报告3:Lagrange 插值多项式··················P5~7姓名:学号:班级:指导老师:时间:专业 序号 日期实验报告1:非线性方程组的求解【实验目的】1.用MATLAB 来实践进行牛顿法的变形,即对牛顿法进行了修正,使其应用更为方便,掌握用MATLAB 运用割线法求解非线性方程组。
2.运用MATLAB 进行隐函数作图。
【实验内容】[方法] 设a,b 为迭代初值,求两点(a,f(a)) 与 (b,f(b)) 的连线(割线)与 x 轴的交点记为 c ,再把迭代初值换成 b,c,重复计算.[要求] 把下面程序复制为新的 M-文件,去掉开头的 %再把 '?' 部分改写正确就是一个完整的程序,找前面一个例子试算【解】在牛顿迭代公式中用差商代替导数。
带入初值(a,f(a)),(b,f(b)),两点的连线与x 轴的交点作为c ,再把迭代初值换为b ,c ,重复计算。
【计算机求解】以y= x-exp(-x)为例初值a=0,b=1,误差不超过1.0*10^(-5)进行计算。
计算方法与实习实验报告目录实习题1-1 (2)实习题2-1(1) (3)实习题3-2 (4)实习题3-5(1) (6)实习题4-2 (9)实习题5-1 (10)实习题6 (13)实习题1-1用2种不同的顺序计算644834.11000012≈∑=-n n,分析其误差的变化。
算法1:从n=1开始累加,n 逐步增大,直至n=10000 算法2:从n=10000开始累加,n 逐步减小,直至n=1 算法1的Matlab 程序如下: m=0;for n=1:10000 yl=1/(n.*n); m=m+yl; endformat long m算法1的输出结果m=1.644834071848065算法2的Matlab 程序如下: m=0;for n=10000:-1:1 yl=1/(n.*n); m=m+yl; endformat long m算法2的输出结果m=1.644834071848060结论分析:由运行结果可以发现,当从n=1开始计算时,算出结果为1.644834071848065,而当从n=10000开始计算时,算出结果为1.644834071848060.与题中所给结果相比,可知从n=10000开始计算时,所得近似结果更接近真实值。
原因是从n=1开始算时,由于被累加的数是越来越小的,而且开始的几个数比后面的数大得多,而浮点数保留位数有限,因此在累加过程中出现了大数吃小数的现象,导致误差较大。
而从n=10000开始累加就很好地避免以上问题,从而能够更接近精确值。
实习题2-1(1)用牛顿法求方程02=-x e x 的根算法:给定初始值0x ,ε为根的容许误差,η为)(x f 的容许误差,N 为迭代次数的容许值。
①如果0)(0'=x f 或迭代次数大于N ,则算法失败,结束;否则执行②。
②计算)()(0'001x f x f x x -=。
③若01x x -<ε或)(1x f <η,则输出1x ,程序结束;否则执行④。
计算方法实验报告年级班级:学号:姓名:日期:计算方法实验(一)实验目的:1、掌握MATLAB控制语句2、熟悉数组运算3、MATLAB图形处理功能4、MATLAB程序初步设计实验内容:一、数组运算1、已知向量a=1:12, 用reshape命令将其编程2*6矩阵。
>> a=1:12;>> reshape(a,2,6)ans =1 3 5 7 9 112 4 6 8 10 122、已知a=[1 2 3;2 3 4;3 4 5]; b=[1 1 1;2 2 2;3 3 3]; 在计算机上运行下面的命令,并写出计算结果。
a.*b a*b a.\b a./b3、已知b=[1 1 1;2 2 2;3 3 3]; 在计算机上运行 b^3 b.^3 b*b*b并写出计算结果。
二、程序设计(写出程序,并给出计算结果)1、利用循环语句编写程序,求1^2+2^2+3^2+…+100^2。
2、利用选择语句编写函数文件demo3实现sgn函数功能,并计算demo3(0) demo3(90) demo3(-12)function f=demo3(x)if x>0f=1;elseif x==0f=0;else x<0f=-1;enddemo3(0)ans =demo3(90)ans =1demo3(90)ans =-1三、MATLAB图形处理(写出程序,给出图形)1、在0≤x≤2π区间内,绘制曲线 y=2e^(0.5x)cos(4πx)2、在[0, 20π]之间,绘制三维曲线 x=sin(t); y=cos(t); z=tsin(t)cos(t);图形要求:标题为“'Line in 3-D Space”,x轴,y轴, z轴分别添加标注“X”“Y”“Z”。
学号:3100300038 姓名: 专业:作业1:用列主元高斯消去法和列主元三角分解法解P227页第3题1. 列主元高斯消去法目的:用高斯消去法解Ax=b 时,其中设A 为非奇异矩阵,可能出现a kk =0 情况,这时必须进行带行交换的高斯消去法。
但在实际计算中即使0)( k kk a 但其绝对值很小时,用)(k kk a 作除数,会导致中间结果矩阵A(k)元素数量级严重增长和舍入误差的扩散,使得最后的计算结果不可靠。
列主元高斯消去法可以难过一般高斯法的这些缺点。
一、列主元高斯消去法解方程的Matlab 程序如下:function a=columneli(a) %对矩阵a 进行列主元消去 [m n]=size(a); %求取a 的行数m 和列数n for i=1:m-1[maxEle,pos]=max(abs(a(i:end,i)));maxRow=pos+i-1; %在每次变换前寻找绝对值最大主所在列maxRow if a(maxRow,i)==0disp('矩阵为奇异矩阵')return %对于非奇异矩阵,在程序中给予提示,结束程序 end if(maxRow~=i)temp=a(maxRow,:);a(maxRow,:)=a(i,:);a(i,:)=temp;end %与列主元绝对值最大的行进行行交换 for j=i+1:ma(j,i)=a(j,i)/a(i,i); %求取第j 列主元 for k=i+1:na(j,k)=a(j,k)-a(j,i)*a(i,k); %对第j 列主元进行行变换 end end endfunction x=elisolve(a) %利用列主元消去的结果求方程的解,a 为方程组的增广矩阵 a=columneli(a); [m,n]=size(a);x=zeros(m,1); for i=m:-1:1x(i)=(a(i,n)-a(i,i:m)*x(i:m))/a(i,i); end二、列主元高斯消去法解P227页第3题:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡-321321212111430x x x 答案:x=[7/6 -1/3 1/2]T三、程序流程图如下:条件图框里面没有条件式,因为i 是从m 到1,所以i=1后运行下面的命令,直接输出结果。
计算方法实验报告实验名称: 实验2 列主元素消去法解方程组 1 引言工程实际问题中,线型方程的系数矩阵一般为低阶稠密矩阵和大型稀疏矩阵。
用高斯消去法解Ax =b 时,可能出现)(k kk a 很小,用作除数会导致中间结果矩阵元素数量级严重增长和舍入误差的扩散,使结果不可靠;采用选主元素的三角分解法可以避免此类问题。
高斯消去法的消去过程,实质上是将A 分解为两个三角矩阵的乘积A =LU ,并求解Ly =b 的过程。
回带过程就是求解上三角方程组Ux =y 。
所以在实际的运算中,矩阵L 和U 可以直接计算出,而不需要任何中间步骤,从而在计算过程中将高斯消去法的步骤进行了进一步的简略,大大提高了运算速度,这就是三角分解法。
采用选主元的方式与列主元高斯消去法一样,也是为了避免除数过小,从而保证了计算的精确度。
2 实验目的和要求通过列主元素消去法求解线性方程组,实现P A =LU 。
要求计算解x ,L ,U ,整形数组IP (i ),(i =1,2,…,)(记录主行信息)。
3 算法原理与流程图(1)原理将A 分解为两个三角矩阵的乘积A =LU 。
对方程组的增广矩阵[]b A A ,=经过k-1步分解后,可变成如下形式:⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡→-------------n nnnjnkk n n n i in ij ik k i i i k kn kj kk k k k k k n k j k k k k k k k n j k k n j k k b a a a l l l b a a a l l l b a a a l l l y u u u u l l y u u u u u l y u u u u u u A1,211,211,211,1,1,11,12,11,122221,2222111,1,11,11211第k 步分解,为了避免用绝对值很小的数kku 作除数,引进量1111 (,1,,;1,2,,) ()/ (1,2,,;1,2,,)k kj kj km mj m k ik ik im mk kk m u a l u j k k n k n l a l u u i k k n k n -=-=⎧=-=+=⎪⎪⎨⎪=-=++=⎪⎩∑∑11(,1,,)k i ik im mkm s a l u i k k n -==-=+∑,于是有kk u =ks 。
《计算方法》课内实验报告学生姓名:张靖2012309010111及学号:学院:理学院班级:信计121课程名称:计算方法实验题目:插值法与函数逼近指导教师周硕教授姓名及职称:朱振菊实验师2014年11月03日目录一、实验题目 (1)二、实验目的 (1)三、实验内容 (1)四、实验结果 (2)五、实验体会或遇到问题 (8)一、实验题目1.熟悉matlab 编写及运行数值计算程序的方法。
2.进一步理解数值积分的基础理论。
3.进一步掌握应用不同的数值积分方法求解给定的积分并给出数据结果及误差分析。
二、实验目的1.熟悉matlab 编写及运行数值计算程序的方法。
2.进一步理解插值法及函数逼近方法的理论基础。
3.进一步掌握给定数据后应用插值法及函数逼近方法进行数据处理并给出图示结果的实际操作过程。
三、实验内容1.分别用复合梯形求积公式及复合辛普森求积公式计算积分xdx x ln 1⎰,要求计算精度达到410-,给出计算结果并比较两种方法的计算节点数. 2.用龙贝格求积方法计算积分dx x x ⎰+3021,使误差不超过510-.3.用3=n 的高斯-勒让德公式计算积分⎰31sin x e x ,给出计算结果.4.用辛普森公式 (取2==M N ) 计算二重积分.5.005.00dydx e x y ⎰⎰-四、 实验结果1.问题1:计算结果如下表表1问题1求解表复合梯形求积公式:取1210-,n=,n为迭代次数,当迭代12次后,精度达到4 n-;节点数为21=4095复合辛普森求积公式:取1000010-,节点数为n=,n为区间数,取精度为4n+=。
1100012.问题2:计算结果如下表表2问题2求解表龙贝格数值积分:给定被积函数0,被积上限3,精度为510-,龙贝格积分表中行的最大数目13,计算出龙贝格数值积分近似解为10.20759362。
3.问题3:计算结果如下表表3问题3求解表高斯-勒让德积分公式:取3n = ,节点横坐标k x 取,n k A 取585999,,,2n 阶导数e sin x x -,求得高斯-勒让德积分近似解为10.94840256。
实验一:误差传播与算法稳定性实验目的:体会稳定性在选择算法中的地位。
实验内容:考虑一个简单的由积分定义的序列10I ,0,1,10nn x dx n a x==+⎰其中a 为参数,分别对0.05a =及15a =按下列两种方法计算。
方案1:用递推公式11,1,2,,10n n I aI n n-=-+= 递推初值可由积分直接得01lna I a+= 方案2:用递推公式111(),,1,,1n n I I n N N a n-=-+=-根据估计式当1n a n ≥+时,11(1)(1)(1)n I a n a n <<+++或当01n a n ≤<+时,11(1)(1)n I a n n<≤++ 取递推初值 当1n a n ≥+时, 11121()2(1)(1)(1)2(1)(1)N N a I I a N a N a a N +≈+=+++++ 当01n a n ≤<+时,111()2(1)(1)N N I I a N N≈+++ 实验要求:列出结果,并对其稳定性进行分析比较,说明原因。
实验二:非线性方程数值解法实验目的:探讨不同方法的计算效果和各自特点 实验内容:应用算法(1)牛顿法;(2)割线法 实验要求:(1)用上述各种方法,分别计算下面的两个例子。
在达到精度相同的前提下,比较其迭代次数。
(I )31080x x +-=,取00x =;(II) 2281(0.1)sin 1.060x x x -+++=,取00x =;(2) 取其它的初值0x ,结果如何?反复选取不同的初值,比较其结果; (3) 总结归纳你的实验结果,试说明各种方法的特点。
实验三:选主元高斯消去法----主元的选取与算法的稳定性问题提出:Gauss 消去法是我们在线性代数中已经熟悉的。
但由于计算机的数值运算是在一个有限的浮点数集合上进行的,如何才能确保Gauss 消去法作为数值算法的稳定性呢?Gauss 消去法从理论算法到数值算法,其关键是主元的选择。
计算方法实验报告实验目的:1.掌握计算方法的基本概念和算法;2.熟悉常见计算方法的实现步骤和注意事项;3.学会使用计算方法解决实际问题。
实验内容:1.实现二分法;2.实现牛顿迭代法;3.实现高斯消去法。
实验步骤:1.实现二分法:1.1定义函数f(x);1.2 确定初始区间[a, b]和精度tol;1.3计算区间中点c;1.4判断f(a)和f(c)的符号关系并更新区间;1.5重复步骤1.3和1.4直到满足精度要求。
2.实现牛顿迭代法:2.1定义函数f(x);2.2定义函数f的导数;2.3给定初始点x0;2.4计算f(x0)和f'(x0);2.5计算下一个点的近似值x1=x0-f(x0)/f'(x0);2.6重复步骤2.4和2.5直到满足收敛条件。
3.实现高斯消去法:3.1输入线性方程组的系数矩阵A和右端向量b;3.2构造增广矩阵[A,b];3.3进行主元素消去,得到梯形矩阵U和新的右端向量b;3.4回代求解,得到解向量x。
实验结果分析:1.二分法的主要优点是收敛稳定,但需要事先给定初始区间;2.牛顿迭代法的主要优点是收敛速度快,但需要事先给定初始点和收敛条件;3.高斯消去法的主要优点是适用于任何线性方程组,但需要事先进行主元素消去和回代的操作。
实验总结:通过本次实验,我深入理解了计算方法的基本概念和算法,并掌握了二分法、牛顿迭代法和高斯消去法的实现步骤和注意事项。
这些方法在解决实际问题中具有重要的应用价值。
实验过程中,我也遇到了一些困难和挑战,例如初始值的选择和收敛条件的判断。
通过不断的调试和优化,最终成功解决了这些问题。
本次实验不仅提高了我的编程能力,也增加了我的数学建模能力。
希望今后能够继续深入学习计算方法,并将其应用于更加复杂的实际问题中。
1. 熟悉并掌握常用的计算方法,包括数值积分、数值微分、线性方程组求解等。
2. 培养运用计算机进行数值计算的能力。
3. 增强对数值计算误差的分析和判断能力。
二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.83. 库:NumPy、SciPy、Matplotlib三、实验内容1. 数值积分(1)函数:f(x) = x^2(2)区间:[0, 1](3)方法:梯形法、辛普森法、复合梯形法2. 数值微分(1)函数:f(x) = e^x(2)点:x = 1(3)方法:有限差分法、中点法、牛顿法3. 线性方程组求解(1)方程组:2x + 3y - z = 8-x + 2y + 2z = -3x - y + 3z = 5(2)方法:高斯消元法、LU分解法1. 数值积分(1)编写函数f(x) = x^2(2)定义积分区间[0, 1](3)实现梯形法、辛普森法、复合梯形法(4)计算积分结果2. 数值微分(1)编写函数f(x) = e^x(2)定义点x = 1(3)实现有限差分法、中点法、牛顿法(4)计算导数结果3. 线性方程组求解(1)定义方程组系数矩阵A和常数向量b(2)实现高斯消元法、LU分解法(3)求解方程组(4)输出解向量x五、实验结果与分析1. 数值积分(1)梯形法:积分结果约为1.6667(2)辛普森法:积分结果约为1.6447(3)复合梯形法:积分结果约为1.6458分析:三种方法计算结果接近,但辛普森法误差最小。
2. 数值微分(1)有限差分法:导数结果约为2.7183(2)中点法:导数结果约为2.7183(3)牛顿法:导数结果约为2.7183分析:三种方法计算结果一致,误差较小。
3. 线性方程组求解(1)高斯消元法:解向量x = [2, 1, 1](2)LU分解法:解向量x = [2, 1, 1]分析:两种方法求解结果一致,且解向量正确。
六、实验总结本次实验通过Python编程,实现了数值积分、数值微分和线性方程组求解。
y13=polyval(p3,t)
y14=polyval(p4,t)
r1=sum((y1-y11).^2)
r2=sum((y2-y12).^2)
r3=sum((y1-y13).^2)
r4=sum((y2-y14).^2)
plot(t,y11,'r',t,y12,'b')
plot(t,y13,'r',t,y14,'b')
4. 程序运行结果及分析(输出计算结果,结果分析)
分别画出t与浓度c的散点图(上图代表甲,下图代表乙):
分别画出t与浓度的对数y(t)=ln c(t)的散点图(上图代表甲,下图代表乙)
进行一次多项式拟合得:
y1(t)=−0.2319t+2.9795
y2(t)=−0.1278t+2.9829
进行二次多项式拟合得:
y1(t)=−0.2322t+2.9798
y2(t)=−0.1278t+2.9830
进行一次多项式拟合得到拟合曲线如图(下方代表甲,上方代表乙):
进行二次多项式拟合得到拟合曲线如图(下方代表甲,上方代表乙):
对数值结果进行分析:
进行一次多项式拟合误差平方和分别为:
r1=0.0137
r2=0.0063
进行一次多项式拟合误差平方和分别为:
r1=0.0137
r2=0.0063
经分析:
本次实验一次多项式拟合和二次多项式拟合相差不大;。
《计算方法》实验报告一、实验目的本次《计算方法》实验的主要目的是通过实际操作和编程实现,深入理解和掌握常见的计算方法在解决数学问题中的应用。
通过实验,提高我们运用数学知识和计算机技术解决实际问题的能力,培养我们的逻辑思维和创新能力。
二、实验环境本次实验使用的编程语言为 Python,使用的开发工具为 PyCharm。
实验运行的操作系统为 Windows 10。
三、实验内容与步骤1、线性方程组的求解实验内容:使用高斯消元法和LU分解法求解线性方程组。
实验步骤:首先,定义线性方程组的系数矩阵和常数向量。
对于高斯消元法,通过逐步消元将系数矩阵化为上三角矩阵,然后回代求解。
对于 LU 分解法,将系数矩阵分解为下三角矩阵 L 和上三角矩阵 U,然后通过向前和向后代换求解。
2、插值与拟合实验内容:使用拉格朗日插值法、牛顿插值法进行插值计算,并使用最小二乘法进行曲线拟合。
实验步骤:对于拉格朗日插值法和牛顿插值法,根据给定的节点数据计算插值多项式。
对于最小二乘法,根据给定的数据点和拟合函数形式,计算拟合参数。
3、数值积分实验内容:使用矩形法、梯形法和辛普森法计算定积分。
实验步骤:定义被积函数和积分区间。
对于矩形法,将积分区间等分为若干小区间,每个小区间用矩形面积近似积分值。
梯形法通过构建梯形来近似积分值。
辛普森法利用抛物线来近似积分值。
4、常微分方程的数值解法实验内容:使用欧拉法和改进的欧拉法求解常微分方程。
实验步骤:给定常微分方程和初始条件。
按照欧拉法和改进的欧拉法的公式进行迭代计算,得到数值解。
四、实验结果与分析1、线性方程组的求解高斯消元法和 LU 分解法都能成功求解线性方程组,但在计算效率和数值稳定性上可能存在差异。
对于规模较大的线性方程组,LU 分解法通常更具优势。
实验中通过对比不同方法求解相同线性方程组的结果,验证了算法的正确性。
2、插值与拟合拉格朗日插值法和牛顿插值法在给定节点处能够准确插值,但对于节点之外的区域,可能会出现较大偏差。
实验报告一、求方程f(x)=x A3-sinx-12x+1 的全部根,€=le-61、用一般迭代法;2、用牛顿迭代法;并比较两种迭代的收敛速度。
一、首先,由题可求得:/W =3x2-cosx-12 .其次,分析得到苴根所在的区间。
①令f(x)- 0,可得到%3 -12x4-1 = sinx.②用一阶导数分析得到X3-12X+ 1和sinx两个函数的增减区间:再用二阶导数分析得到两个函数的拐点以及凹凸区间.③在直角坐标轴上描墓出X3-12X+1= 0和sinx = 0的图,在图上可以看到他们的交点, 然后估计交点所在的区间,即是所要求的根的区间。
经过估计,得到根所在的区间为[-4-3], [0,1]和[3,4].1、一般迭代法(1)算法步骤:设e为给定的允许精度,迭代法的计算步骤为:①选定初值A().|h /(A)=0确定函数g(x),得等价形式x = g(x).②计算gg).由迭代公式得X|=g(x。
).③如果|x,-x0|<^,则迭代结束,取“为解的近似值;否则,用“代替儿,重复步骤②和步骤③.(2)程丿了:代码:①在区间[-4,-3]内,代码:clcx0=-3•5; $初值心iter_max=100; $迭代的最大次数ep=le-6; $允许精度£k=0;while k<=iter_max $]<从0开始至ljiter_max循坯;xl=(sin(x0)+12*x0-l) ."(1/3); 貂弋入儿,算出旺的值if abs (xl-xO) <ep %|x, -x0\与允许精度作比较break;匕条件卜|一对5£成立,跳出循环endxO=xl; 务条件|Xj -X Q\<£不成立,用“代替兀0k=k+l; %kiniendx_star=xl, iter=k 为解的近似值,iter为迭代次数运行结果:x_star = -3.4101 : iter =14②在区间[0,1]内,代码:clcxO=O . 5; $初值旺iter_max=100; $迭代的最大次数ep=le-6; $允许精度gk=0;while k<=iter_max $1<从0开始至ljiter_max循坯;xl=(l/12) * (x0.^3-sin(x0) +1); 貂弋入心,算岀“的值if abs (xl-xO) <ep %|xj -x0|与允许精度作比较break; 务条件\x{ -x()| < s成立,跳出循环endxO=xl;匕条件|x, -X Q\<£不成立,用“代替儿k=k+l; Ek 力mendx_star=xl, iter=k 为解的近似值,iter为迭代次数结果:x_star = 0.07696 ; iter =6③在区间[3,4]内,代码:clcx0=3.5; &初值心iter_max=100; $迭代的最大次数ep=le-6; $允许精度£k=0;while k<=iter_max 靱从0开始至ljiter_max循环xl=(sin(x0)+12*x0-l) (1/3); 訂弋入心,算出“的值if abs(xl-xO)<ep 引召-对与允许精度作比较break; 匕条件-x()| <£•成立,跳岀循环endxO=xl; $条件|Xj -x0| < £不成立,用X]代替X。
实验一:插值法一、实验目的通过本次上机实习,能够进一步加深对各种插值算法的理解;学会使用用三种类型的插值函数的数学模型、基本算法,结合相应软件(如VC/VB/Delphi/Matlab/JAVA/Turbo C)编程实现数值方法的求解。
并用该软件的绘图功能来显示插值函数,使其计算结果更加直观和形象化。
二、实验内容先在屏幕上用随机函数按适当比例画出若干个点(至少7~9),分别用拉格朗日插值,牛顿插值,三次样条插值对上述离散点进行拟和,并用该软件的绘图功能来显示其插值函数。
三、源程序⒈拉格朗日插值:(Lagrange)#include<iostream.h>void main(){float x[3];float y[3];for(int m=0;m<3;m++)cin>>x[m];for(int n=0;n<3;n++)cin>>y[n];for(int k=0;k<3;k++){float s=0;for(int i=0;i<3;i++){float p=1;for(int j=0;j<3;j++)if(i!=j)p=p*((x[k]-x[j])/(x[i]-x[j]));s=s+y[i]*p;}cout<<"("<<x[k]<<","<<s<<")"<<'\n';}}2.牛顿插值:#include<iostream.h>void main(){float x[5];float y[5];float f[5];for(int m=0;m<3;m++)cin>>x[m];for(int n=0;n<3;n++)cin>>y[n];float t=1;for(int k=0;k<5;k++){f[k]=y[k];for(int j=0;j<5;j++)t=t*(x[k]-x[j-1]);for(int i=0;i<(5-j);i++)f[i]=(f[i+1]-f[i])/(x[j+i]-x[i]);y[k]=f[k]+t*f[k];cout<<"y="<<y[k]<<'\n';}}四、实验结果五、实验心得通过此次实验编程,更好的掌握了拉格朗日插值算法,但对于应用上还有很多欠缺,对于牛顿插值更是不熟悉,需要多加练习。
《计算方法》实验报告(附件)专业及班级:机械0710 姓名:张玉成学号:U200710821 日期:2009.11.28 1.用牛顿迭代法求解下列方程的正根log(1+x)-x^2=0 x=0.3696运行结果:输入:Newt_1('shiyan1_1',1)显示:k= 1,x=6.10253e-001,y=-6.98970e-001,yd=-1.79339e+000k= 2,x=4.38135e-001,y=-1.65515e-001,yd=-9.61634e-001k= 3,x=3.79770e-001,y=-3.41626e-002,yd=-5.85330e-001k= 4,x=3.70078e-001,y=-4.41870e-003,yd=-4.55917e-001k= 5,x=3.69589e-001,y=-2.12618e-004,yd=-4.34323e-001k= 6,x=3.69576e-001,y=-5.72632e-006,yd=-4.33231e-001k= 7,x=3.69575e-001,y=-1.47599e-007,yd=-4.33202e-001Final answer=3.695753e-001ans =0.3696e^x-5x^2 =0 x=4.7079运行结果:输入:Newt_1('shiyan1_2',5)显示:k= 1,x=4.76376e+000,y=2.34132e+001,yd=9.91077e+001k= 2,x=4.71070e+000,y=3.71870e+000,yd=7.00861e+001k= 3,x=4.70797e+000,y=1.76539e-001,yd=6.45306e+001k= 4,x=4.70794e+000,y=1.76647e-003,yd=6.42528e+001k= 5,x=4.70794e+000,y=1.39489e-005,yd=6.42500e+001Final answer=4.707938e+000ans =4.7079x^3+2x-1=0 x=0.4534运行结果:输入:Newt_1('shiyan1_3',1)显示:k= 1,x=6.02394e-001,y=2.00000e+000,yd=5.03010e+000k= 2,x=4.66118e-001,y=4.23383e-001,yd=3.10681e+000k= 3,x=4.53549e-001,y=3.35069e-002,yd=2.66588e+000k= 4,x=4.53398e-001,y=3.95932e-004,yd=2.63083e+000k= 5,x=4.53398e-001,y=2.09360e-006,yd=2.63041e+000Final answer=4.533977e-001ans =0.4534x+2)-x=0 x=2.0000运行结果:输入:Newt_1('shiyan1_4',1)显示:k= 1,x=2.02879e+000,y=7.32051e-001,yd=-7.11565e-001k= 2,x=2.00002e+000,y=-2.16052e-002,yd=-7.51049e-001k= 3,x=2.00000e+000,y=-1.72788e-005,yd=-7.50157e-001k= 4,x=2.00000e+000,y=-3.60276e-009,yd=-7.50156e-001Final answer=2.000000e+000ans =2.00002.先用图解法确定初始点,然后再求方程x sin x −1 = 0 x ∈[0,10]的所有根。
计算方法实验报告实验名称: 实验1 从函数表出发进行插值 1 引言某个实际问题中,函数f (x)在区间[a,b]上存在且连续,但难以找到其表达式,只能通过实验和观测得到有限点上的函数表。
有些情况虽然可以写出表达式,但结构复杂,使用不方便。
所以希望构造简单函数P (x)作为f (x)的近似值。
插值法是解决此类问题的一种方法。
设函数y=在插值区间[a,b]上连续,且在n+1个不同的插值节点a≤x 0,x 1,…,x n ≤b 上分别取值y 0,y 1,…,y n 。
目的是要在一个性质优良、便于计算的插值函数类Φ中,求一简单函数P (x),满足插值条件P (x i )=y i (i=0,1,…,n),而在其他点x≠x i 上,作为f (x)近似值。
求插值函数P (x)的方法称为插值法[1]。
2 实验目的和要求运用Matlab 编写m 文件,定义三种插值函数,要求一次性输入整张函数表,并利用计算机选择在插值计算中所需的节点。
分别通过分段线性插值、分段二次插值和全区间上拉格朗日插值计算f (0.15),f (0.31),f (0.47)的近似值。
3 算法原理与流程图(1)原理 1.线性插值当给定了n+1个点x 0<x 1<…<x n 上的函数值y 0,y 1,…,y n 后,若要计算x≠x i 处函数值f (x)的近似值,可先选取两个节点x i-1与x i 使x ∈[x i-1,x i ],然后在小区间[x i-1,x i ]上作线性插值,即得11111)()(------+--=≈i i i i i i i i x x x x y x x x x y x P x f这种分段低次插值叫分段线性插值。
2.分段二次插值当给定了n+1个点x 0<x 1<…<x n 上的函数值y 0,y 1,…,y n 后,若要计算x≠x i 处函数值f (x)的近似值,可先选取距离x 最近的三个节点x i-1,x i 与x i+1,然后进行二次插值,即得专业:电气工程及其自动化 姓名: 李X∑∏+-=+≠-=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎪⎪⎭⎫⎝⎛--=≈11112)()(i i k i k j i j j k j k x x x x y x P x f 这种分段低次插值叫分段二次插值。
计算方法实验报告实验名称: 实验3 梯形法解方程组的初值问题 1 引言2 实验目的和要求用欧拉法梯形格式求解方程组初值问题(取h =0.1),所需初值用经典R-K 方法计算。
将编程运算的结果与习题七中第5题的计算结果作一比较[1]。
3 算法原理与流程图(1)原理 对于初值问题α=∈=)(],[),,(a y b a x y x f dxdy先将[a,b]作n 等分,得到各离散节点),,2,1,0(n i ih a x i =+=。
式中,nab h -=。
设)(x y y =为方程的解,则)(1+i x y 在),(i i y x 处的泰勒展开式忽略高阶无穷小量后得)1,2,1,0))((,()()(1-=+≈+n i x y x hf x y x y i i i i)(),(1i i x y x y +分别用近似值i i y y ,1+代入,则得)1,,2,1,0)(,(1-=+=+n i y x hf y y i i i i即欧拉格式。
用差商近似代替导数也可得到欧拉格式。
用向后差商表示两点数值微分公式,得到隐式欧拉格式)1,,2,1,0)(,(111-=+=+++n i y x hf y y i i i i两种方法公式相加再取平均值得到梯形格式[])1,,2,1,0(),(),(2111-=++=+++n i y x f y x f hy y i i i i i i专业:电气工程及其自动化姓名: 李X(2)流程图输入系数矩阵u,边界a,b,步长h,和初值矩阵vn←(b-a)/ny j(1)←v(j)j=1,2,…,mA=E m-h/2*uB=E m+h/2*ui=1,2,…,ny i(j+1)=A-1B*y i(j)j=1,2,…,mi<n输出x,y i4程序代码及注释%欧拉法梯形格式function [x,y]=euler(u,v,a,b,h)%说明%对于下列类型的一阶方程组进行求解%y1'=u11*y1+u12*y2+…+u1m*ym;%y2'=u21*y1+u22*y2+…+u2m*ym;%…%ym'=um1*y1+um2*y2+…+umm*ym;%可写成矩阵乘积的形式,u=[u11,u12,…,u1m;u21,u22,…,u2m;……];%初值向量v%y1(1)=v1,y2(1)=v2,…,ym(1)=vm;n=(b-a)/h;m=length(u);x=[a:h:b];y(:,1)=v;%定义y(:,1)代表方程组解矩阵的初值p=eye(m);A=-h/2*u+p; B=h/2*u+p;%由梯形法公式,推导出m 元一阶方程组的解法 for j=1:ny(:,j+1)=A\B*y(:,j); end%解矩阵y 的第j 列为x=a+(j-1)*h 时的数值解 x=x';%输出列向量 y=y';%转置后,第i 行第j 列为x=a+(i-1)*h 时yj 的数值解注释对于一般形式的m 元一阶微分方程组⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡m mm m m m m m mm m m y y y u u u u u u u u u y y y x f y y y x f y y y x f y y y 2121222211121121212211''2'1),,,,(),,,,(),,,,(,满足初值条件⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡m m v v v y y y 2121)1()1()1(,[]b a x ,∈可以用梯形法求解⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡+++⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡+⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎣⎡+++=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡+++++++++++++⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡+++)1()1()1(2)()()(122221222212))1(,),1(),1(,())(,),(),(,())1(,),1(),1(,())(,),(),(,())1(,),1(),1(,())(,),(),(,(2)()()()1()1()1(21212222111211212122221112112*********2112112121i y i y i y u u u u u u u u u h i y i y i y u h u h u h u h u h u h u h u h u h i y i y i y x f i y i y i y x f i y i y i y x f i y i y i y x f i y i y i y x f i y i y i y x f h i y i y i y i y i y i y m mm m m m m m mm m m m m m m m m m m m m m m整理后得到⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎣⎡+++=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡+++⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎣⎡---)()()(122221222212)1()1()1(2122221222212121222211121121212222111211i y i y i y u h u h u hu h u h u h u hu h u hi y i y i y u h u h u h u h u h u h u h u h u hm mm m m m m m mm m m m m记为),,2,1()()()()1()1()1(2121n i i y i y i y B i y i y i y A m m =⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡+++ 故),,2,1()()()()1()1()1(21121n i i y i y i y B A i y i y i y m m =⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡+++- 5 算例分析用梯形法求解下列方程组的初值问题(取h=0.1):]1,0[1)0(,40)0(,23221'2121'1∈⎩⎨⎧=+==+=x y y y y y y y y 所需初值用经典R-K 方法计算。
计算方法实验报告
实验名称: 实验1 从函数表出发进行插值 1 引言
某个实际问题中,函数f (x)在区间[a,b]上存在且连续,但难以找到其表达式,只能通过实验和观测得到有限点上的函数表。
有些情况虽然可以写出表达式,但结构复杂,使用不方便。
所以希望构造简单函数P (x)作为f (x)的近似值。
插值法是解决此类问题的一种方法。
设函数y=在插值区间[a,b]上连续,且在n+1个不同的插值节点a≤x 0,x 1,…,x n ≤b 上分别取值y 0,y 1,…,y n 。
目的是要在一个性质优良、便于计算的插值函数类Φ中,求一简单函数P (x),满足插值条件P (x i )=y i (i=0,1,…,n),而在其他点x≠x i 上,作为f (x)近似值。
求插值函数P (x)的方法称为插值法[1]。
2 实验目的和要求
运用Matlab 编写m 文件,定义三种插值函数,要求一次性输入整张函数表,并利用计算机选择在插值计算中所需的节点。
分别通过分段线性插值、分段二次插值和全区间上拉格朗日插值计算f (0.15),f (0.31),f (0.47)的近似值。
3 算法原理与流程图
(1)原理 1.线性插值
当给定了n+1个点x 0<x 1<…<x n 上的函数值y 0,y 1,…,y n 后,若要计算x≠x i 处函数值f (x)的近似值,可先选取两个节点x i-1与x i 使x ∈[x i-1,x i ],然后在小区间[x i-1,x i ]上作线性插值,即得
1
1
11
1)()(------+--=≈i i i i i i i i x x x x y x x x x y x P x f
这种分段低次插值叫分段线性插值。
2.分段二次插值
当给定了n+1个点x 0<x 1<…<x n 上的函数值y 0,y 1,…,y n 后,若要计算x≠x i 处函数值f (x)的近似值,可先选取距离x 最近的三个节点x i-1,x i 与x i+1,然后进行二次插值,即得
专业:电气工程及其自动化 姓名: 李X
∑∏+-=+≠-
=⎥⎥⎥⎦
⎤
⎢⎢⎢⎣
⎡
⎪⎪⎭⎫
⎝⎛
--=≈11
112)()(i i k i k j i j j k j k x x x x y x P x f 这种分段低次插值叫分段二次插值。
3.全区间上拉格朗日插
对节点x i (i=0,1,…,n)中任一点x k (0≤k≤n),作一n 次多项式l k (x),使它在该点上的取值为1,在其余点x i (i=0,1,…,k -1,k+1,…,n)上取值为零。
对应于每一节点x k (k=0,1,…,n),都能写出一个满足此条件的多项式,这样写出n+1个多项式l 0(x),l 1(x),…,l n (x)。
)()()()(1100x l y x l y x l y x P n n n ++=
拉格朗日n 次插值多项式(对于全区间上的插值,n 取函数表的长度)
∑=+-+---------=n
k n k k k k k k n k k k
n x x x x x x x x x x x x x x x x y x L 0110110)
())(()()
())(()()(
(2)流程图
分段线性插值法
分段二次插值法
拉格朗日全区间上的插值法
4 程序代码及注释
1.
注:若要在Matlab中直接调用插值函数,需要事先将习题1函数表输入2.
3.
5算例分析
%首先在
%确保Current Directory 中存放分别含有上述代码的三个m文件(1)分段线性插值
(2)分段二次插值
(3)全区间上拉格朗日插值
(4
6讨论与结论
1.对程序运行的时间加以比较使用
从三次实验结果可知,interp1函数所用时间比编写的fdxx函数长(interp1函数为matlab求分段线性插值的函数);而fdxx和另外两个函数时间比较接近
2.程序优化
由分段线性插值和分段二次插值的原理,x取值在函数表范围内时,插值结果有意义,而当x 取值在函数表范围以外,利用分段线性插值公式仍可以进行运算并得到一个值,但其结果不准确;分段二次插值则无法找到三个合适的点以求插值,不予以输出结果;若输入的函数表x 与y的长度不相等,则无法插值。
所以加入判断
p=length(y0);n=length(x0);
if p~=n error('数据输入有误,请重新输入');
if z<x0(1)|z>x0(n)
fprintf('x(%d)超出范围;\n',t);
break;
end
从而避免了因输入错误导致的结果错误。
由上述(4)测试示例可看到效果。
3.结果比较
(下方的图为放大图)图中data1为原函数表的数据,data2-data4分别为分段线性插值、分段二次插值和拉格朗日插值的结果,其x取步长为0.01的52个数据,可知插值结果与原数据变化规律接近,在给定范围内均可以作其近似函数。
参考文献
[1] 易大义,沈云宝,李有法. 计算方法(第2版),浙江大学出版社. pp.29-53.
[2] 廖波. 数值计算与最优化原理——MA TLAB实现,北京邮电大学出版社. pp.57-58.。