计算方法上机题目汇编

合集下载

计算方法各习题及参考答案

计算方法各习题及参考答案

计算⽅法各习题及参考答案第⼆章数值分析2.1 已知多项式432()1p x x x x x =-+-+通过下列点:试构造⼀多项式()q x 通过下列点:答案:54313()()()3122q x p x r x x x x x =-=-++-+. 2.2 观测得到⼆次多项式2()p x 的值:表中2()p x 的某⼀个函数值有错误,试找出并校正它.答案:函数值表中2(1)p -错误,应有2(1)0p -=.2.3 利⽤差分的性质证明22212(1)(21)/6n n n n +++=++ .2.4 当⽤等距节点的分段⼆次插值多项式在区间[1,1]-近似函数xe 时,使⽤多少个节点能够保证误差不超过61102-?.答案:需要143个插值节点.2.5 设被插值函数4()[,]f x C a b ∈,()3()h H x 是()f x 关于等距节点01n a x x x b =<<<= 的分段三次艾尔⽶特插值多项式,步长b a h n-=.试估计()3||()()||h f x H x ∞-.答案:()443||()()||384h M f x H x h ∞-≤.第三章函数逼近3.1 求()sin ,[0,0.1]f x x x =∈在空间2{1,,}span x x Φ=上最佳平⽅逼近多项式,并给出平⽅误差.答案:()sin f x x =的⼆次最佳平⽅逼近多项式为-522sin ()0.832 440 710 1.000 999 10.024 985 1x p x x x ≈=-?+-,⼆次最佳平⽅逼近的平⽅误差为0.122-1220(sin )())0.989 310 710x p x dx δ=-=??.3.2 确定参数,a b c 和,使得积分2121(,,)[I a b c ax bx c -=++-?取最⼩值.答案:810, 0, 33a b c ππ=-== 3.3 求多项式432()251f x x x x =+++在[1,1]-上的3次最佳⼀致逼近多项式()p x .答案:()f x 的最佳⼀致逼近多项式为323()74p x x x =++. 3.4 ⽤幂级数缩合⽅法,求() (11)x f x e x =-≤≤上的3次近似多项式6,3()p x ,并估计6,3||()()||f x p x ∞-.答案:236,3()0.994 574 650.997 395 830.542 968 750.177 083 33p x x x x =+++, 6,3||()()||0.006 572 327 7f x p x ∞-≤3.5 求() (11)xf x e x =-≤≤上的关于权函数()x ρ=的三次最佳平⽅逼近多项式3()S x ,并估计误差32||()()||f x S x -和3||()()||f x S x ∞-.答案:233()0.994 5710.997 3080.542 9910.177 347S x x x x =+++,32||()()||0.006 894 83f x S x -=,3||()()||0.006 442 575f x S x ∞-≤.第四章数值积分与数值微分4.1 ⽤梯形公式、⾟浦⽣公式和柯特斯公式分别计算积分1(1,2,3,4)n x dx n =?,并与精确值⽐较.答案:计算结果如下表所⽰4.2 确定下列求积公式中的待定参数,使得求积公式的代数精度尽量⾼,并指明所确定的求积公式具有的代数精度.(1)101()()(0)()hh f x dx A f h A f A f h --≈-++?(2)11211()[(1)2()3()]3f x dx f f x f x -≈-++? (3)20()[(0)()][(0)()]2h h f x dx f f h h f f h α''≈++-?答案:(1)具有三次代数精确度(2)具有⼆次代数精确度(3)具有三次代数精确度.4.3 设10h x x =-,确定求积公式12300101()()[()()][()()][]x x x x f x dx h Af x Bf x h Cf x Df x R f ''-=++++?中的待定参数,,,A B C D ,使得该求积公式的代数精确度尽量⾼,并给出余项表达式.答案:3711,,,20203020A B C D ====-,(4)6()[]1440f R f h η=,其中01(,)x x η∈.4.4 设2()P x 是以0,,2h h 为插值点的()f x 的⼆次插值多项式,⽤2()P x 导出计算积分30()hI f x dx =?的数值积分公式h I ,并⽤台劳展开法证明:453(0)()8h I I h f O h '''-=+.答案:3203()[(0)3(2)]4h h I p x dx h f f h ==+?.4.5 给定积分10sin xI dx x =(1)运⽤复化梯形公式计算上述积分值,使其截断误差不超过31102-?.(2)取同样的求积节点,改⽤复化⾟浦⽣公式计算时,截断误差是多少?(3)要求的截断误差不超过610-,若⽤复化⾟浦⽣公式,应取多少个节点处的函数值?答案:(1)只需7.5n ≥,取9个节点,0.946I ≈(2)4(4)46111|[]||()|()0.271102880288045n b a R f h f η--=-≤=? (3)取7个节点处的函数值.4.6 ⽤变步长的复化梯形公式和变步长的复化⾟浦⽣公式计算积分10sin xI dx x =?.要求⽤事后误差估计法时,截断误不超过31102-?和61102-?.答案:使⽤复化梯形公式时,80.946I T ≈=满⾜精度要求;使⽤复化⾟浦⽣公式时,40.946 083I s ≈=满⾜精度要求.4.7(1)利⽤埃尔⽶特插值公式推导带有导数值的求积公式2()()[()()][()()][]212ba b a b a f x dx f a f b f b f a R f --''=+--+?,其中余项为 5(4)()[](), (,)4!30b a R f f a b ηη-=∈.(2)利⽤上述公式推导带修正项的复化梯形求积公式020()[()()]12Nx N N x h f x dx T f x f x ''≈--?,其中 0121[()2()2()2()()]2N N N hT f x f x f x f x f x -=+++++ ,⽽ 00, (0,1,2,,), i N x x ih i N Nh x x =+==- .4.8 ⽤龙贝格⽅法计算椭圆2214x y +=的周长,使结果具有五位有效数字.答案:49.6884l I =≈.4.9确定⾼斯型求积公式0011()()()x dx A f x A f x ≈+?的节点0x ,1x 及系数0A ,1A .答案:00.289 949x =,10.821 162x =,00.277 556A =,10.389 111A =.4.10 验证⾼斯型求积公式00110()()()x e f x dx A f x A f x +∞-≈+?的系数及节点分别为0001 2 2A A x x ===-=+第五章解线性⽅程组的直接法5.1 ⽤按列选主元的⾼斯-若当消去法求矩阵A 的逆矩阵,其中11121 0110A -?? ?= ? ?-??.答案: 1110331203321133A -?? ? ?=---5.2 ⽤矩阵的直接三⾓分解法解⽅程组1234102050101312431701037x x x x= ? ? ? ? ? ? ? ? ??答案: 42x =,32x =,21x =,11x =.5.3 ⽤平⽅根法(Cholesky 分解法)求解⽅程组12341161 4.25 2.750.51 2.75 3.5 1.25x x x -?????? ??? ?-=- ??? ? ??? ???????答案: 12x =,21x =,31x =-.5.4 ⽤追赶法求解三对⾓⽅程组123421113121112210x x x x ?????? ? ? ? ? ? ?= ? ? ? ? ? ? ? ? ?????答案:42x =,31x =-,21x =,10x =.第六章解线性代数⽅程组的迭代法6.1对⽅程1212123879897x x x x x x x -+=??-+=??--=?作简单调整,使得⽤⾼斯-赛得尔迭代法求解时对任意初始向量都收敛,并取初始向量(0)[0 0 0]T x =,⽤该⽅法求近似解(1)k x+,使(1)()3||||10k k x x +-∞-≤.答案:近似解为(4)[1.0000 1.0000 1.0000]Tx =.6.2讨论松弛因⼦ 1.25ω=时,⽤SOR ⽅法求解⽅程组121232343163420412x x x x x x x +=??+-=??-+=-? 的收敛性.若收敛,则取(0)[0 0 0]T x=迭代求解,使(1)()41||||102k k x x +-∞-<.答案:⽅程组的近似解为*1 1.50001x =,*2 3.33333x =,*3 2.16667x =-.6.3给定线性⽅程组Ax b =,其中111221112211122A ?? ? ?=,证明⽤雅可⽐迭代法解此⽅程组发散,⽽⾼斯-赛得尔迭代法收敛.6.4设有⽅程组112233302021212x b x b x b -?????? ??? ?= ??? ? ??? ?-??????,讨论⽤雅可⽐⽅法和⾼斯-赛得尔⽅法解此⽅程组的收敛性.如果收敛,⽐较哪种⽅法收敛较快.答案:雅可⽐⽅法收敛,⾼斯-赛得尔⽅法收敛,且较快.6.5设矩阵A ⾮奇异.求证:⽅程组Ax b =的解总能通过⾼斯-赛得尔⽅法得到.6.6设()ij n nA a ?=为对称正定矩阵,对⾓阵1122(,,,)nn D diag a a a = .求证:⾼斯-赛得尔⽅法求解⽅程组1122D AD x b --=时对任意初始向量都收敛.第七章⾮线性⽅程求根例7.4对⽅程230xx e -=确定迭代函数()x ?及区间[,]a b ,使对0[,]x a b ?∈,迭代过程1(), 0,1,2,k x x k ?+== 均收敛,并求解.要求51||10k k x x -+-<.答案:若取2()x x ?=,则在[1,0]-中满⾜收敛性条件,因此迭代法121, 0,1,2,k x k x k +== 在(1,0)-中有惟⼀解.取00.5x =-,*70.458960903x x ≈=-.取2()x x ?=,在[0,1上满⾜收敛性条件,迭代序列121, 0,1,2,k x k x k +== 在[0,1]中有惟⼀解.取00.5x =,*140.910001967x x ≈=- 在[3,4]上,将原⽅程改写为23xe x =,取对数得2ln(3)()x x x ?==.满⾜收敛性条件,则迭代序列21ln(3), 0,1,2,k k x x k +== 在[3,4]中有惟⼀解.取0 3.5x =, *16 3.733067511x x ≈=.例7.6对于迭代函数2()(3)x x c x ?=+-,试讨论:(1)当c 为何值时,1()k k x x ?+=产⽣的序列{}k x(2)c 取何值时收敛最快?(3)取1,2c =-()x ?51||10k k x x -+-<.答案:(1)(c ∈时迭代收敛.(2)c =时收敛最快.(3)分别取1, 2c =--,并取0 1.5x =,计算结果如下表7.7所⽰表7.7例7.13 设不动点迭代1()k x x ?+=的迭代函数()x ?具有⼆阶连续导数,*x 是()x ?的不动点,且*()1x ?'≠,证明Steffensen 迭代式21(), (), 0,1,2,()2k k k k k k k k k k k y x z x k y x x x z y x+===-?=-?-+?⼆阶收敛于*x .例7.15 设2()()()()()x x p x f x q x f x ?=--,试确定函数()p x 和()q x ,使求解()0f x =且以()x ?为迭代函数的迭代法⾄少三阶收敛.答案:1()()p x f x =',31()()2[()]f x q x f x ''=' 例7.19 设()f x 在[,]a b 上有⾼阶导数,*(,)x a b ∈是()0f x =的(2)m m ≥重根,且⽜顿法收敛,证明⽜顿迭代序列{}k x 有下列极限关系:111lim2k kk k k k x x m x x x -→∞-+-=-+.第⼋章矩阵特征值8.1 ⽤乘幂法求矩阵A 的按模最⼤的特征值与对应的特征向量,已知5500 5.51031A -?? ?=- ? ?-??,要求(1)()611||10k k λλ+--<,这⾥()1k λ表⽰1λ的第k 次近似值.答案:15λ≈,对应的特征向量为[5,0,0]T-;25λ≈-,对应的特征向量为[5,10,5]T --. 8.2 ⽤反幂法求矩阵110242012A -??=-- -的按模最⼩的特征值.知A 的按模较⼤的特征值的近似值为15λ=,⽤5p =的原点平移法计算1λ及其对应的特征向量.答案:(1) A 的按模最⼩的特征值为30.2384428λ≈(2) 1 5.1248854λ≈,对应的特征向量为(8)[0.242 4310, 1 ,0.320 011 7]T U =--.8.3 设⽅阵A 的特征值都是实数,且满⾜121, ||||n n λλλλλ>≥≥> ,为求1λ⽽作原点平移,试证:当平移量21()2n p λλ=+时,幂法收敛最快. 8.4 ⽤⼆分法求三对⾓对称⽅阵1221221221A ?? ? ?= ? ? ???的最⼩特征值,使它⾄少具有2位有效数字.答案:取5 2.234375λ≈-即有2位有效数字.8.5 ⽤平⾯旋转变换和反射变换将向量[2 3 0 5]T x =变为与1[1 0 0 0]Te =平⾏的向量.答案:203/2/00001010/0T ??- ?=--?0.324 442 8400.486 664 26200.811 107 1040.486 664 2620.812 176 04800.298 039 92200100.811 107 1040.298 039 92200.530 266 798H --??--= ? ?--8.6 若532644445A -??=- -,试把A 化为相似的上Hessenberg 阵,然后⽤QR ⽅法求A 的全部特征值.第九章微分⽅程初值问题的数值解法9.1 ⽤反复迭代(反复校正)的欧拉预估-校正法求解初值问题0, 0<0.2(0)1y y x y '+=≤??=?,要求取步长0.1h =,每步迭代误差不超过510-.答案: [4]11(0.1)0.904 762y y y ≈==,[4]22(0.2)0.818 594y y y ≈==9.2 ⽤⼆阶中点格式和⼆阶休恩格式求初值问题2, 0<0.4(0)1dy x y x dx y ?=+≤=?的数值解(取步长0.2h =,运算过程中保留五位⼩数).答案:⽤⼆阶中点格式,取初值01y =计算得0n =时,1211.000 00, 1.200 00, (0.2)=1.240 00K K y y ==≈ 1n =时,1221.737 60, 2.298 72, (0.4)=1.699 74K K y y ==≈⽤⼆阶休恩格式,取初值01y =计算得0n =时,1211.000 00, 1.266 67, (0.2)=1.240 00K K y y ==≈ 1n =时,1221.737 60, 2.499 18, (0.4)=1.701 76K K y y ==≈9.3 ⽤如下四步四阶阿达姆斯显格式1123(5559379)/24n n n n n n y y h f f f f +---=+-+-求初值问题, (0)1y x y y '=+=在[0,0.5]上的数值解.取步长0.1h =,⼩数点后保留8位.答案:4(0.4)0.583 640 216y y ≈=,5(0.5) 1.797 421 984y y ≈=. 9.4 为使⼆阶中点公式1(,(,))22n n n n n n h hy y hf x y f x y +=+++,求解初值问题 , (0)y y y aλλ'=-??=?为实常数绝对稳定,试求步长h 的⼤⼩应受到的限制条件.答案:2h λ≤.9.5 ⽤如下反复迭代的欧拉预估-校正格式(0)1(1)()111(,)[(,)(,)]2 0,1,2,; 0,1,2,nn n n k k n n n n n n y y hf x y h y y f x y f x y k n +++++?=+??=++??==,求解初值问题sin(), 01(0)1x y e xy x y '?=<≤?=?时,如何选择步长h ,使上述格式关于k 的迭代收敛.答案:2h e<时上述格式关于k 的迭代是收敛的.9.6 求系数,,,a b c d ,使求解初值问题0(,), ()y f x y y x a '==的如下隐式⼆步法221()n n n n n y ay h bf cf df +++=+++的误差阶尽可能⾼,并指出其阶数.答案:系数为142,,33a b d c ====,此时⽅法的局部截断误差阶最⾼,为五阶5()O h .9.7 试⽤欧拉预估-校正法求解初值问题, (0)=1, 0<0.2()/, (0)2dyxy z y dxx dz x y z z dx=-≤=+=,取步长0.1h =,⼩数点后⾄少保留六位.答案:由初值00(0)1, (0)2y y z z ====可计算得110.800 000z 2.050 000y =??=? , 11(0.1)0.801 500(0.1) 2.046 951y y z z ≈=??≈=? 220.604 820z 2.090 992y =??=? , 22 (0.2)0.604 659(0.2) 2.088 216y y z z ≈=??≈=?。

计算机数值方法试题

计算机数值方法试题

数值计算方法试题一、填空(共20分,每题2分)1、设,取5位有效数字,则所得的近似值x=_____。

2、设一阶差商,则二阶差商3、数值微分中,已知等距节点的函数值则由三点的求导公式,有4、求方程的近似根,用迭代公式,取初始值,那么5、解初始值问题近似解的梯形公式是6、,则A的谱半径=,A的=7、设 ,则=和=8、若线性代数方程组AX=b 的系数矩阵A为严格对角占优阵,则雅可比迭代和高斯—塞德尔迭代都_____9、解常微分方程初值问题的欧拉(Euler)方法的局部截断误差为_____10、设,当时,必有分解式,其中L为下三角阵,当其对角线元素足条件时,这种分解是唯一的.二、计算题(共60 分,每题15分)1、设(1)试求在上的三次Hermite插值多项式H(x)使满足H(x)以升幂形式给出.(2)写出余项的表达式2、已知的满足,试问如何利用构造一个收敛的简单迭代函数,使0,1…收敛?3、试确定常数A,B,C和,使得数值积分公式有尽可能高的代数精度。

试问所得的数值积分公式代数精度是多少?它是否为Gauss型的?4、推导常微分方程的初值问题的数值解公式:三、证明题1、设(1)写出解的Newton迭代格式(2)证明此迭代格式是线性收敛的2、设R=I-CA,如果,证明:(1)A、C都是非奇异的矩阵(2)参考答案:一、填空题1、2.31502、3、4、1.55、6、7、8、收敛9、O(h)10、二、计算题1、1、(1)(2)2、由,可得因故故,k=0,1,…收敛。

3、,该数值求积公式具有5次代数精确度,它是Gauss型的4、数值积分方法构造该数值解公式:对方程在区间上积分,得,记步长为h,对积分用Simpson求积公式得所以得数值解公式:三、证明题1、证明:(1)因,故,由Newton迭代公式:n=0,1,…得,n=0,1,…(2)因迭代函数,而,又,则故此迭代格式是线性收敛的。

2、证明:(1)因,所以I–R非奇异,因I–R=CA,所以C,A都是非奇异矩阵(2)故则有(2.1)因CA=I–R,所以C=(I–R)A—1,即A-1=(I–R)—1C又RA-1=A—1–C,故由(这里用到了教材98页引理的结论)移项得 (2.2)结合(2。

计算方法B上机报告

计算方法B上机报告

西安交通大学计算方法B上机报告班级:XXXXXXXX姓名:XXX学号:XXXXXXXX2015/12/13 Sunday目录1题目一 (1)1.数值计算 (1)2.实现思想 (1)3.源程序 (1)4.计算结果 (2)5.分析总结 (2)2题目二 (3)1.数据近似 (3)2.实现思想 (3)3.源程序 (5)4.计算结果 (6)5.分析总结 (7)3题目三 (8)1.数据拟合 (8)2.实现思想 (8)3.源程序 (9)4.计算结果 (12)5.分析总结 (14)4题目四 (15)1.非线性方程求解 (15)2.实现思想 (15)3.源程序 (16)4.计算结果 (17)5.分析总结 (17)5题目五 (18)1.线性方程组求解。

(18)2.文件格式说明 (18)3.实现思想 (19)4.源程序 (20)5.计算结果 (23)6.分析总结 (25)7.实际问题 (25)1 题目一1. 数值计算计算以下和式:0142118184858616nn S n n n n ∞=⎛⎫=--- ⎪++++⎝⎭∑,要求:(1)若保留11个有效数字,给出计算结果,并评价计算的算法;(2)若要保留30个有效数字,则又将如何进行计算。

2. 实现思想对于(1)可用迭代的方法进行处理。

通过do-while 循环使和式从0开始计算直到结果满足有效数字即可。

在循环中通过比较本次和上一次结果之差的绝对值与相应有效数字的大小的1/2,即可构成循环中止条件。

对于(2)可用同样的方法进行计算,然而由于所保留的有效数字较大,此时若不对上述算法进行改善的话,由于每一步所得计算结果都是其真实值,此时可能会存在有效数字丢失的情况,从而影响计算的准确性。

因此我们需要对程序中的计算精度进行控制。

在Maltlab 中可利用digits()函数对运算精度进行规定,为防止出现有效位的损失,在实际程序中需将精度提高几位。

而对迭代中每一步所得到的结果则利用vpa()函数进行限定,这样一来我们对每一个运算都控制了精度,而不只是单纯控制了结果的精度3. 源程序使用Matlab 所编写程序如下所示:(1)clear;clc;sd = 11; %所要保留有效数字 n = 0; %迭代次数S1 = 0; %当前n 时计算结果 S2 = 0; %n-1时计算结果 while 1eq = (4/(8*n+1)-2/(8*n+4)-1/(8*n+5)-1/(8*n+6))/16^n; S1 = S1 + eq;if abs(S1-S2)<0.5*10^(-(sd-1)) %迭代是否终止判断条件 break endS2 = S1; n = n+1; endS=vpa(S1,sd)(2)clear;clc;sd = 30; %所要保留有效数字digits(sd+2);%控制精度n = 0; %迭代次数S1 = vpa(0); %当前n时计算结果S2 = vpa(0); %n-1时计算结果while 1eq = vpa((4/(8*n+1)-2/(8*n+4)-1/(8*n+5)-1/(8*n+6))/16^n);S1 = vpa(S1 + eq);if abs(S1-S2)<vpa(0.5*10^(-(sd-1))) %迭代是否终止判断条件breakendS2 = S1;n = n+1;endS=vpa(S1,sd)4.计算结果(1)S =3.1415926536(2)S =3.141592653589793238435711679225.分析总结从计算结果可以看出与准确值3.1415926535897932384357116792180407…相比(1)和(2)所得结果分别是准确值保留11位和30位有效数字的结果,即利用本程序所得结果准确。

计算方法试题集3875

计算方法试题集3875

第一章数值计算基本常识一.填空题1. 用四舍五入得到的近似数0.628,有_____位有效数字,其绝对误差限是____________。

2. 用四舍五入得到的近似数0.586,有_____位有效数字,其绝对误差限是____________。

3. 用四舍五入得到的近似数0.69,其绝对误差是__________,由此计算出的相对误差限是_ _________。

4. 用四舍五入得到的近似数0.7960,其绝对误差是__________,由此计算出的相对误差限是__________。

5. 设0.484是0.4900的近似值,那么0.484具有____位有效数字。

6. 设x*=0.231是真值x=0.229的近似值,则x*有_____位有效数字。

7. 设x*=0.23是真值x=0.229的近似值,则x*有_____位有效数字。

8. 设x=2.3149541…,取5位有效数字,则所得的近似值x*=_____。

9. 设x=2.3149541…,取4位有效数字,则所得的近似值x*=_____。

10. 若近似数0.1100有4位有效数字,由有效数字计算出的相对误差是____________。

11. 若近似数76.82有4位有效数字,由有效数字计算出的相对误差是____________。

12. 若近似数576.00有5位有效数字,由有效数字计算出的相对误差是____________。

13. 用3.15作为π的近似值有_____位有效数字。

14. 用3.14作为π的近似值有_____位有效数字。

15. 用3.1416作为π的近似值有_____位有效数字。

解答:1. 3、0.5*10-32. 3、0.5*10-33. 0.5*10-2、0.725%4. 0.5*10-4、0.00628%5. 16. 27. 28. 2.31509. 2.31510. 0.05%11. 0.007%12. 0.001%13. 214. 315. 5二.选择题1. 3.141580 是π的近似值,有( )位有效数字。

计算方法上机作业集合

计算方法上机作业集合

第一次&第二次上机作业上机作业:1.在Matlab上执行:>> 5.1-5-0.1和>> 1.5-1-0.5给出执行结果,并简要分析一下产生现象的原因。

解:执行结果如下:在Matlab中,小数值很难用二进制进行描述。

由于计算精度的影响,相近两数相减会出现误差。

2.(课本181页第一题)解:(1)n=0时,积分得I0=ln6-ln5,编写如下图代码从以上代码显示的结果可以看出,I 20的近似值为0.7465(2)I I =∫I I 5+I 10dx,可得∫I I 610dx ≤∫I I 5+I 10dx ≤∫I I 510dx,得 16(I +1)≤I I ≤15(I +1),则有1126≤I 20≤1105, 取I 20=1105,以此逆序估算I 0。

代码段及结果如下图所示(3)从I20估计的过程更为可靠。

首先根据积分得表达式是可知,被积函数随着n的增大,其所围面积应当是逐步减小的,即积分值应是随着n的递增二单调减小的,(1)中输出的值不满足这一条件,(2)满足。

设I I表示I I的近似值,I I-I I=(−5)I(I0−I0)(根据递推公式可以导出此式),可以看出,随着n的增大,误差也在增大,所以顺序估计时,算法不稳定性逐渐增大,逆序估计情况则刚好相反,误差不断减小,算法逐渐趋于稳定。

2.(课本181页第二题)(1)上机代码如图所示求得近似根为0.09058 (2)上机代码如图所示得近似根为0.09064;(3)牛顿法上机代码如下计算所得近似解为0.09091第三次上机作业上机作业181页第四题线性方程组为[1.13483.83260.53011.78751.16513.40172.53301.54353.41294.93171.23714.99988.76431.314210.67210.0147][I1I2I3I4]=[9.53426.394118.423116.9237](1)顺序消元法A=[1.1348,3.8326,1.1651,3.4017;0.5301,1.7875,2.5330,1.5435;3.4129,4.9317,8.7643,1.3142;1.2371,4.9998,10.6721,0.0147]; b=[9.5342;6.3941;18.4231;16.9237];上机代码(函数部分)如下function [b] = gaus( A,b )%用b返回方程组的解B=[A,b];n=length(b);RA=rank(A);RB=rank(B);dif=RB-RA;if dif>0disp('此方程组无解');returnendif RA==RBif RA==nformat long;disp('此方程组有唯一解');for p=1:n-1for k=p+1:nm=B(k,p)/B(p,p);B(k,p:n+1)=B(k,p:n+1)-m*B(p,p:n+1);endend %顺序消元形成上三角矩阵b=B(1:n,n+1);A=B(1:n,1:n);b(n)=b(n)/A(n,n);for q=n-1:-1:1b(q)=(b(q)-sum(A(q,q+1:n)*b(q+1:n)))/A(q,q);end %回代求解elsedisp('此方程组有无数组解');endend上机运行结果为>>A=[1.1348,3.8326,1.1651,3.4017;0.5301,1.7875,2.5330,1.5435;3.4129,4.9317,8.7643,1.3142;1.2371,4.9998,10.6721,0.0147]; b=[9.5342;6.3941;18.4231;16.9237];>> X=gaus(A,b)此方程组有唯一解X =1.00001.00001.00001.0000>>(2)列主元消元法A=[1.1348,3.8326,1.1651,3.4017;0.5301,1.7875,2.5330,1.5435;3.4129,4.9317,8.7643,1.3142;1.2371,4.9998,10.6721,0.0147]; b=[9.5342;6.3941;18.4231;16.9237];函数部分代码如下function [b] = lieZhu(A,b )%用b返回方程组的解B=[A,b];RA=rank(A);RB=rank(B);n=length(b);dif=RB-RA;format long;if dif>0disp('该方程组无解');returnendif dif==0if RA==ndisp('该方程组有唯一解');c=zeros(1,n);for i=1:n-1max=abs(A(i,i));m=i;for j=i+1:nif max<abs(A(j,i))max=abs(A(j,i));m=j;endend %求出每一次消元时绝对值最大的一行的行号 if m~=ifor k=i:nc(k)=A(i,k);A(i,k)=A(m,k);A(m,k)=c(k);endd1=b(i);b(i)=b(m);b(m)=d1;%函数值跟随方程一起换位置endfor k=i+1:nfor j=i+1:nA(k,j)=A(k,j)-A(i,j)*A(k,i)/A(i,i);endb(k)=b(k)-b(i)*A(k,i)/A(i,i);A(k,i)=0;endend %完成消元操作,形成上三角矩阵b(n)=b(n)/A(n,n);for i=n-1:-1:1sum=0;for j=i+1:nsum=sum+A(i,j)*b(j);endb(i)=(b(i)-sum)/A(i,i) ;%回代求解其他未知数endendelsedisp('此方程组有无数组解');endend上机运行,结果为>>A=[1.1348,3.8326,1.1651,3.4017;0.5301,1.7875,2.5330,1.5435;3.4129,4.9317,8.7643,1.3142;1.2371,4.9998,10.6721,0.0147]; b=[9.5342;6.3941;18.4231;16.9237];X=lieZhu(A,b)该方程组有唯一解X =1.00001.00020.99990.9999>>根据两种方法运算结果,顺序消元法得到结果比列主元消元法得到的结果精度更高。

上机数值计算练习题及答案.docx

上机数值计算练习题及答案.docx

习题31、在MATLAB 中,先运行指令A=magic(3), B=[l,2,l;3,4,3;5,6,7], C=reshape(l:6,3,2)生成阵列A 珂,B3X2,C3X2 ,然后根据运行结果回答以下问题:(1)计算A*B,B*A,这两个乘积相同吗?(2)计算A\B, B/A,左除、右除结果相同吗?(3)计算B(:,[1,2]).*C和C.*B(:, [1,2]),这两个乘积相同吗?(4)计算A\A和AAA,这两个计算结果相同吗?(5)计算A\eye(3)和inv(A),这两个计算结果相同吗?(提示:根据对计算结果的目测回答问题)解答如下:运行指令:A=magic(3), B=[l,2,l;3,4,3;5,6,7], C=reshape(l:6,3,2)得到结果:8 1 63 5 74 9 2B =1 2 13 4 35 6 7C =1 42 53 6(1)计算A*B,并得到结果如下:» A*Bans =41 56 5353 68 6741 56 45计算B*A, 并得到结果如下:»B*Aans =18 20 2248 50 5286 98 86从以上计算结果可以得出结论:A*BJ (2)计算A\B ,并得到结果如下:» A\Bans =0.0333 0.1000 0.16110.5333 0.6000 0.74440.0333 0.1000 -0.1722计算B/A, 并得到结果如下:B/Aans =0.0056 0.0889 0.17220.1389 0.2222 0.30560.2333 0.7333 0.2333 与B*A这两个乘积不同。

从以上计算结杲可以得出结论:左除、右除结杲不同。

(3)计算B(:,[1,2]).弋,并得到结果如下:A =» B(:,[1,2]).*C ans =1 8 6 20 15 36计算C.*B(:, [1,2]),并得到结果如下: » CFB(:, [1,2]) ans =1 6 20 15 36从以上计算结果可以得出结论:B(: J1,2]).*C 和C ・*B(:, [1,2])的两个乘积相同。

数值计算方法上机实习题答案

数值计算方法上机实习题答案

1. 设⎰+=105dx x x I nn , (1) 由递推公式n I I n n 151+-=-,从0I 的几个近似值出发,计算20I ; 解:易得:0I =ln6-ln5=0.1823,程序为:I=0.182;for n=1:20I=(-5)*I+1/n;endI输出结果为:20I = -3.0666e+010(2) 粗糙估计20I ,用n I I n n 515111+-=--,计算0I ; 因为 0095.056 0079.010********≈<<≈⎰⎰dx x I dx x 所以取0087.0)0095.00079.0(2120=+=I 程序为:I=0.0087;for n=1:20I=(-1/5)*I+1/(5*n);endI0I = 0.0083(3) 分析结果的可靠性及产生此现象的原因(重点分析原因)。

首先分析两种递推式的误差;设第一递推式中开始时的误差为000I I E '-=,递推过程的舍入误差不计。

并记nn n I I E '-=,则有01)5(5E E E n n n -==-=- 。

因为=20E 20020)5(I E >>-,所此递推式不可靠。

而在第二种递推式中n n E E E )51(5110-==-= ,误差在缩小,所以此递推式是可靠的。

出现以上运行结果的主要原因是在构造递推式过程中,考虑误差是否得到控制,即算法是否数值稳定。

2. 求方程0210=-+x e x 的近似根,要求41105-+⨯<-k k x x ,并比较计算量。

(1) 在[0,1]上用二分法;程序:a=0;b=1.0;while abs(b-a)>5*1e-4if exp(c)+10*c-2>0b=c;else a=c;endendc结果:c =0.0903(2) 取初值00=x ,并用迭代1021x k e x -=+; 程序:x=0;a=1;while abs(x-a)>5*1e-4a=x;x=(2-exp(x))/10;endx结果:x =0.0905(3) 加速迭代的结果;程序:x=0;a=0;b=1;while abs(b-a)>5*1e-4a=x;y=exp(x)+10*x-2;z=exp(y)+10*y-2;x=x-(y-x)^2/(z-2*y+x);b=x;endx结果:x =0.0995(4) 取初值00=x ,并用牛顿迭代法;程序:x=0;a=0;b=1;while abs(b-a)>5*1e-4x=x-(exp(x)+10*x-2)/(exp(x)+10);b=x;endx结果:x =0.0905(5) 分析绝对误差。

计算方法习题库

计算方法习题库

习题11. 下列各近似值均有4个有效数字,300.2,521.13,001428.0***===z y x ,试指出它们的绝对误差和相对误差限.2.下列各近似值的绝对误差限都是31021-⨯,试指出它们各有几位有效数字. 3.设,001.0=x 试选择较好的算法计算函数值 2cos 1)(xx x f -= 4.没有近似数35.2,84.1,41.2***===z y x 且都有3位有效数字,试计算***z y x S +=,问S 有几位有效数字。

5.序列{}n y 有递推公式),2,1(,1101 =-=-n y y n n 若41.120≈=y (三位有效数字),问计算10y 的误差有多大,这个计算公式稳定吗?习题21. 已知y =f (x )函数表4359160.04813306.004147`5.05207843.05103757.0)(8.26.24.22.20.2x f x试用1次,2次,3次Lagrange 插值多项式计算f (2.5)近似值。

2. 已知f (x )=e x ]2,0[,∈x 且函数表为 38906.771828.264872.100000.1)(0.20.15.00x f x试用1次,2次,3次Lagrange 插值多项式计算f (2.5)近似值。

习题31.设nk k x 0)}({=ϕ为],[b a 上具有权函数0)(≥x ω的正交多项式组且)(x k ϕ为首项系数为1的k 次的多项式,则nk k x 0)}({=ϕ于],[b a 线性无关。

2.选择α,使下述积分取得最小值,][)(1122dx x x a ⎰--α dx x e b x ⎰-102)()(α3.设],3,1[,1)(∈=x xx f 试用},1{1x H 求)(x f 一次最佳平方逼近多项式。

4.设],3,1[,1)(∈=x x x f 试用Chebyshev 多项式)}(,{10t T T 求)(x f 一次最佳平方逼近多项式。

计算方法上机作业集合

计算方法上机作业集合

第一次&第二次上机作业上机作业:1.在Matlab上执行:>> 5.1-5-0.1和>> 1.5-1-0.5给出执行结果,并简要分析一下产生现象的原因。

解:执行结果如下:在Matlab中,小数值很难用二进制进行描述。

由于计算精度的影响,相近两数相减会出现误差。

2.(课本181页第一题)解:(1)n=0时,积分得I0=ln6-ln5,编写如下图代码从以上代码显示的结果可以看出,I 20的近似值为0.012712966517465(2)I n =∫x n 5+x 10dx,可得∫x n 610dx ≤∫x n 5+x 10dx ≤∫x n 510dx,得 16(n+1)≤I n ≤15(n+1),则有1126≤I 20≤1105, 取I 20=1105,以此逆序估算I 0。

代码段及结果如下图所示结果是从I 19逆序输出至I 0,所以得到I 0的近似值为0.088392216030227。

(3)从I 20估计的过程更为可靠。

首先根据积分得表达式是可知,被积函数随着n 的增大,其所围面积应当是逐步减小的,即积分值应是随着n 的递增二单调减小的,(1)中输出的值不满足这一条件,(2)满足。

设S n 表示I n 的近似值,S n -I n =(−5)n (S 0−I 0) 根据递推公式可以导出此式),可以看出,随着n 的增大,误差也在增大,所以顺序估计时,算法不稳定性逐渐增大,逆序估计情况则刚好相反,误差不断减小,算法逐渐趋于稳定。

2.(课本181页第二题)(1)上机代码如图所示求得近似根为0.09058(2)上机代码如图所示得近似根为0.09064;(3)牛顿法上机代码如下计算所得近似解为0.09091第三次上机作业上机作业181页第四题线性方程组为[1.1348 3.83260.5301 1.78751.1651 3.40172.5330 1.54353.41294.93171.2371 4.99988.7643 1.314210.67210.0147][x1x2x3x4]=[9.53426.394118.423116.9237](1)顺序消元法A=[1.1348,3.8326,1.1651,3.4017;0.5301,1.7875,2.5330,1.5435;3.4129,4. 9317,8.7643,1.3142;1.2371,4.9998,10.6721,0.0147];b=[9.5342;6.3941;18.4231;16.9237];上机代码(函数部分)如下function [b] = gaus( A,b )%用b返回方程组的解B=[A,b];n=length(b);RA=rank(A);RB=rank(B);dif=RB-RA;if dif>0disp('此方程组无解');returnendif RA==RBif RA==nformat long;disp('此方程组有唯一解');for p=1:n-1for k=p+1:nm=B(k,p)/B(p,p);B(k,p:n+1)=B(k,p:n+1)-m*B(p,p:n+1);endend %顺序消元形成上三角矩阵b=B(1:n,n+1);A=B(1:n,1:n);b(n)=b(n)/A(n,n);for q=n-1:-1:1b(q)=(b(q)-sum(A(q,q+1:n)*b(q+1:n)))/A(q,q);end %回代求解elsedisp('此方程组有无数组解');endend上机运行结果为>>A=[1.1348,3.8326,1.1651,3.4017;0.5301,1.7875,2.5330,1.5435;3.4129,4. 9317,8.7643,1.3142;1.2371,4.9998,10.6721,0.0147];b=[9.5342;6.3941;18.4231;16.9237];>> X=gaus A,b)此方程组有唯一解X =1.0000000000000001.0000000000000001.0000000000000001.000000000000000>>(2)列主元消元法A=[1.1348,3.8326,1.1651,3.4017;0.5301,1.7875,2.5330,1.5435;3.4129,4. 9317,8.7643,1.3142;1.2371,4.9998,10.6721,0.0147];b=[9.5342;6.3941;18.4231;16.9237];函数部分代码如下function [b] = lieZhu(A,b )%用b返回方程组的解B=[A,b];RA=rank(A);RB=rank(B);n=length(b);dif=RB-RA;format long;if dif>0disp('该方程组无解');returnendif dif==0if RA==ndisp('该方程组有唯一解');c=zeros(1,n);for i=1:n-1max=abs(A(i,i));m=i;for j=i+1:nif max<abs(A(j,i))max=abs(A(j,i));m=j;endend %求出每一次消元时绝对值最大的一行的行号if m~=ifor k=i:nc(k)=A(i,k);A(i,k)=A(m,k);A(m,k)=c(k);endd1=b(i);b(i)=b(m);b(m)=d1;%函数值跟随方程一起换位置endfor k=i+1:nfor j=i+1:nA(k,j)=A(k,j)-A(i,j)*A(k,i)/A(i,i); endb(k)=b(k)-b(i)*A(k,i)/A(i,i);A(k,i)=0;endend %完成消元操作,形成上三角矩阵b(n)=b(n)/A(n,n);for i=n-1:-1:1sum=0;for j=i+1:nsum=sum+A(i,j)*b(j);endb(i)=(b(i)-sum)/A(i,i) ;%回代求解其他未知数endendelsedisp('此方程组有无数组解');endend上机运行,结果为>>A=[1.1348,3.8326,1.1651,3.4017;0.5301,1.7875,2.53 30,1.5435;3.4129,4.9317,8.7643,1.3142;1.2371,4.99 98,10.6721,0.0147];b=[9.5342;6.3941;18.4231;16.9237];X=lieZhu(A,b)该方程组有唯一解X =1.0000000000000001.0000000000000020.9999999999999990.999999999999999>>根据两种方法运算结果,顺序消元法得到结果比列主元消元法得到的结果精度更高。

(完整版)计算方法练习题与答案.doc

(完整版)计算方法练习题与答案.doc

练习题与答案练习题一练习题二练习题三练习题四练习题五练习题六练习题七练习题八练习题答案练习题一一、是非题1.x *–12.0326 作为 x 的近似值一定具有6 位有效数字,且其误差限1 10 4( )2。

2. 对两个不同数的近似数,误差越小,有效数位越多。

( )3.一个近似数的有效数位愈多,其相对误差限愈小。

( )x 24.1( )用2近似表示 cos x 产生舍入误差。

5. 3.14 和 3.142 作为 的近似值有效数字位数相同。

( )二、填空题y 123 4 9x 1231.为了使计算x 1x 1的乘除法次数尽量少,应将该表达式改写为 ;2. x * –0.003457是 x 舍入得到的近似值,它有位有效数字,误差限为,相对误差限为;3. 误差的来源是 ;4. 截断误差为;5.设计算法应遵循的原则是 。

三、选择题1. x * –0.026900作为 x 的近似值,它的有效数字位数为 ( ) 。

(A) 7;(B) 3;(C) 不能确定(D) 5.2.舍入误差是 ( )产生的误差。

(A) 只取有限位数(B) 模型准确值与用数值方法求得的准确值(C) 观察与测量(D) 数学模型准确值与实际值3.用 1+x 近似表示 e x 所产生的误差是 ()误差。

(A). 模型(B). 观测 (C). 截断 (D). 舍入1.用 * 22 表示自由落体运动距离与时间的关系式(g 为重力加速度 ),s t 是在4s =gt时间 t 内的实际距离,则 s t s * 是( )误差。

(A). 舍入(B). 观测 (C). 模型 (D). 截断5. 1.41300作为 2 的近似值,有 ( )位有效数字。

(A) 3 ;(B) 4; (C) 5; (D) 6。

四、计算题221. 3.142,3.141, 7 分别作为 的近似值,各有几位有效数字?2. 设计算球体积允许的相对误差限为1%,问测量球直径的相对误差限最大为多少?3. 利用等价变换使下列表达式的计算结果比较精确:11 x, | x | 1x 11 dt | x |1(1) 1 2x 1 x, (2) x1 t 2(3) ex1, | x | 1,(4)ln(x 2 1 x) x114.真空中自由落体运动距离 s 与时间 t 的关系式是 s= 2 gt 2,g 为重力加速度。

计算方法习题库

计算方法习题库

第一章例1、已知近似数*x 有两位有效数字,试求其相对误差限。

有两位有效数字,试求其相对误差限。

解:1a 是1到9之间的数字,%510211021)(1)12(1=´£´£---a x r e 例2、 以下误差公式不正确的是(以下误差公式不正确的是( )A .)()(2121x d x d x x d -»-)( B .)()(2121x d x d x x d +»+)(C .)()()(211221x d x x d x x x d +»× D .)()(2121x d x d x x d -»)(答案:D 例3 ln2=0.69314718ln2=0.69314718……,精确到10-3的近似值是多少?的近似值是多少?解:精确到103=0.001,即绝对误差限是e =0.0005, 故至少要保留小数点后三位才可以。

ln2»0.693 例4 8030.0,001.2-==y x 设是由真值**y x 和经四舍五入得到的近似值,试估计y x +的误差限________.解:由四舍五入易知3105.0)(-´£x d ,4105.0)(-´£x d ,由误差传播估计式从而有,由误差传播估计式从而有 31055.0)()()()()(-´£+£+»+y d x d y d x d y x d第二章例1:通过点),(0y x , ),(11y x , ),(22y x 所作的插值多项式是所作的插值多项式是( ) ( )(A) (A) 二次的二次的二次的 (B) (B) (B) 一次的一次的一次的 (C) (C) (C) 不超过二次的不超过二次的不超过二次的 (D) (D) (D) 大于二次的大于二次的大于二次的答案:(C) 例2:函数)(x f 在节点543,,x x x 处的二阶差商)(],,[543¹x x x f(A)],,[435x x x f (B) 3535)()(x x x f x f --(C)535443],[],[x x x x f x x f -- (D)534534],[],[x x x x f x x f --答案:(B)w x )(x 12)3(252132-- ,k x k f (x k ) 一阶差商一阶差商 二阶差商二阶差商 三阶差商三阶差商 四阶差商四阶差商 0 0.40 0.410 75 1 0.55 0.578 15 1.116 00 2 0.65 0.696 75 1.168 00 0.280 00 3 0.80 0.888 11 1.275 73 0.358 93 0.197 33 4 0.90 1.201 52 1.384 10 0.433 48 0.213 00 0.031 34 计算公式为:计算公式为:一阶差商一阶差商 )3,2,1,0()()(],[111=--=+++k x x x f x f x x f k k k k k k二阶差商二阶差商 )2,1,0(],[],[],,[221121=--=++++++k x x x x f x x f x x x f k k k k k k k k k +--+-+=)55.0)(40.0(28000.0)40.0(11600.141075.0)(3x x x x N)65.0)(55.0)(40.0(19733.0---x x x由于)(x f y =形式未知,显然不能通过余项定理来估计误差,可采用牛顿插值的余项形式来估计:)80.0)(65.0)(55.0)(40.0](,80.0,65.0,55.0,40.0[)(3----=x x x x x f x R 插值点85.0=x ,03134.0]90.0,80.0,65.0,55.0,40.0[],80.0,65.0,55.0,40.0[=»f x f (假设四阶差商变化不大)从而有误差估计:)80.085.0)(65.085.0)(55.085.0)(40.085.0(03134.0)(3----»x R例8:已知函数y =f (x )的观察数据为的观察数据为x k-2 0 4 5 y k5 1 -3 1 试构造f (x )的拉格朗日多项式P n (x ),并计算f (-1)。

计算方法习题集及答案

计算方法习题集及答案
, ,
得:
当方法为零稳定时 ,从而 ,故方法是二阶收敛的。
6.给出题(6.5)题中 时的公式的绝对稳定域.
解:
6.5中当 时,即为方法
其相应的差分方程的多项式为
令 ,
即方法的绝对稳定域为
7.指出Heun方法
0
0
0
0
1/3
1/3
0
0
2/3
0
2/3
0
1/4
0
3/4
的相容阶,并给出由该方法以步长h计算初值问题(6.45)的步骤.

取 。即
满足上述条件的多步方法即为一类三步四阶显示方法,令 可得
方法即为
3.形如
的k阶方法称为Gear方法,试确定一个三步Gear方法,并给出其截断误差主项。
解:线性k步公式为
由Gear法的定义知,三步Gear法满足
方法为 阶,故有
得:
取 得
得三步Gear方法:
其中
4.试用显式Euler法及改进的Euler法
证明:

即 为 的二阶零点


易知

由微分中值定理(Rolle定理) ,使得
进而 有三个零点, 有两个零点, 有一个零点,
即 使得

8.设 是Lagrange基函数,则 。
9.求一个次数不超过4次的多项式 ,使它满足
,并写出其余项表达式。
10.求一个四次插值多项式 ,使 时, ;而 时, ,并写出插值余项的表达式。
练习
班级
学号
姓名
1.试构造迭代收敛的公式求解下列方程:
(1) ; (2) 。
解:
(1)迭代公式 , 公式收敛
k

计算方法练习题与答案

计算方法练习题与答案

计算方法练习题与答案一、加减乘除练习1. 计算下列数的和并简化:a) 2 + 3 + 4 + 5b) 10 + 20 + 30 + 402.计算下列数的差:a) 100 - 50b) 75 - 253.计算下列数的积:a) 6 × 8b) 12 × 54.计算下列数的商:a) 100 ÷ 10b) 36 ÷ 6二、百分数计算练习1.计算以下百分数的值:a) 50% × 200b) 25% × 802.将以下分数转换为百分数:a) 1/4b) 3/53.将以下小数转换为百分数:a) 0.6b) 0.75三、比例计算练习1.解决以下比例问题:a) 如果一个长方形的长度为8cm,宽度为4cm,求其长宽比。

b) 假设一辆汽车每小时行驶50千米,行驶3小时,求行驶的总距离。

2.解决以下反比例问题:a) 如果一个鸟笼里有24只鸟,如果再加入6只鸟,那么所有鸟将平均得到多少空间?b) 一个机器能够在10小时内完成一项工作,那么如果再增加一倍的机器,需要多少小时才能完成同样的工作?四、平均值计算练习1.计算以下一组数的平均值:a) 5, 7, 9, 11, 13b) 16, 20, 24, 28, 322.已知某商品的销售数据如下,计算其平均销售量:月份销售量一月 120二月 150三月 170四月 140答案:一、加减乘除练习1.a) 2 + 3 + 4 + 5 = 14b) 10 + 20 + 30 + 40 = 1002.a) 100 - 50 = 50b) 75 - 25 = 503.a) 6 × 8 = 48b) 12 × 5 = 604.a) 100 ÷ 10 = 10b) 36 ÷ 6 = 6二、百分数计算练习1.a) 50% × 200 = 100b) 25% × 80 = 202.a) 1/4 = 25%b) 3/5 = 60%3.a) 0.6 = 60%b) 0.75 = 75%三、比例计算练习1.a) 长宽比为 8:4,简化为 2:1b) 汽车行驶总距离为 50km/h × 3h = 150km2.a) 初始鸟笼中每只鸟占据空间为 1/24,加入鸟后每只鸟占据空间为 1/30,所以平均空间为 30 / (24 + 6) = 1/2b) 原机器完成工作速率为 1/10,加入一倍机器后速率变为 1/20,完成工作所需时间为 10 × 2 = 20小时四、平均值计算练习1.a) 平均值 = (5 + 7 + 9 + 11 + 13) / 5 = 9b) 平均值 = (16 + 20 + 24 + 28 + 32) / 5 = 242. 平均销售量 = (120 + 150 + 170 + 140) / 4 = 145以上是本篇计算方法练习题与答案的内容。

计算方法B上机题目

计算方法B上机题目

2016年《计算方法B》上机题目一.计算机语言要求使用语言不做限制,可以使用C、C++、FORTRAN、VC、VB、C#、Matlab、PHP、JavaScript等语言。

二.实习报告内容上机题目完成后,必须交一份上机报告。

上机报告中应对每道题目包括:(1)上机题目内容;(2)详细说明实现的思想、算法依据、算法实现的结构;(3)详细完整的源程序,并附相关的注释说明;(4)给出必要的计算结果(若数据量大,则只需列出主要的数据内容),并对结果进行分析;(5)对上机中出现的问题进行分析总结;三.实习报告要求1.提供一份完整的上机报告的电子文档;然后再提供一份与电子文档对应的纸质上机报告。

2.电子文档中提供上机过程中的所有源程序、输出数据,以及可以运行的文件。

如果程序的运行环境特殊,请附上运行程序所需要的软件环境。

3.上机报告严禁抄袭,如发现有抄袭现象,所有涉及抄袭的上机报告将被以作弊处理,并按零分处理,不再另行通知。

4.上机报告电子版一、二、三班发送到邮箱:xjtujsff@,上机作业纸面作业请送到:理科楼338。

上机实习题目1.某通信公司在一次施工中,需要在水面宽度为20米的河沟底部沿直线走向铺设一条沟底光缆。

在铺设光缆之前需要对沟底的地形进行初步探测,从而估计所需光缆的长度,为工程预算提供依据。

已探测(1)(2)估算所需光缆长度的近似值,并作出铺设河底光缆的曲线图;2.假定某天的气温变化记录如下表所示,试用数据拟合的方法找出这3.线性方程组求解。

(1)编写程序实现大规模方程组的高斯消去法程序,并对所附的方程组进行求解。

所附方程组的类型为对角占优的带状方程组。

(2)针对本专业中所碰到的实际问题,提炼一个使用方程组进行求解的例子,并对求解过程进行分析、求解。

附:数据文件格式说明1.数据文件的文件名后缀为.dat,形式为:文件名.dat;2.数据文件中的数据均为二进制记录结构,因此必须使用二进制方式进行读取;3.数据文件的结构,分为以下四个部分:(1)文件标示部分,该部分用于存放数据文件的描述信息结构如下(用C语言格式进行描述):typedef struct FileInfo {long int id; // 数据文件标示long int ver; // 数据文件版本号long int id1; // 备用标志} FILEINFO;其中:①id:为该数据文件的标识,值为0xF1E1D1A0即为:十六进制的F1E1D1A0②③id1:为备用标志字段,暂时未用;(2)矩阵描述部分:此部分中包括矩阵的阶数和上下带宽,如果是稀疏矩阵,则上下带宽值为0。

(完整word版)计算方法试题库汇总

(完整word版)计算方法试题库汇总

计算方法一、填空题1.假定x ≤1,用泰勒多项式⋯+⋯⋯+++=!!212n x x x e nx,计算e x的值,若要求截断误差不超过0.005,则n=_5___2.解方程034323=-+x - x x 的牛顿迭代公式)463/()343(121121311+--+--=------k k k k k k k x x x x x x x 3.一阶常微分方程初值问题⎪⎩⎪⎨⎧=='y x y y x f y 00)(),(,其改进的欧拉方法格式为)],(),([2111yx y x y yi i iiii f f h+++++=4.解三对角线方程组的计算方法称为追赶法或回代法5. 数值求解初值问题的四阶龙格——库塔公式的局部截断误差为o(h 5)6.在ALGOL 中,简单算术表达式y x 3+的写法为x+y ↑3 7.循环语句分为离散型循环,步长型循环,当型循环. 8.函数)(x f 在[a,b]上的一次(线性)插值函数=)(x l )()(b f ab ax a f b a b x --+-- 9.在实际进行插值时插值时,将插值范围分为若干段,然后在每个分段上使用低阶插值————如线性插值和抛物插值,这就是所谓分段插值法10、数值计算中,误差主要来源于模型误差、观测误差、截断误差和舍入误差。

11、电子计算机的结构大体上可分为输入设备 、 存储器、运算器、控制器、 输出设备 五个主要部分。

12、算式2cos sin 2xx x+在ALGOL 中写为))2cos()(sin(2↑+↑x x x 。

13、ALGOL 算法语言的基本符号分为 字母 、 数字 、 逻辑值、 定义符四大类。

14、语句大体上分为无条件语句、条件语句、循环语句三类。

15、在过程体中形式参数分为赋值形参和换名形参。

16、若线性方程组具有主对角优势,则高斯一塞德尔格式对任意给定的初值均收敛。

17.已知函数表,则一次差商=]4.0,2.0[f 0.618、算法是指 解题方案的准确而完整的描述 。

(完整版)计算方法试题集及答案

(完整版)计算方法试题集及答案

复习试题一、填空题:1、⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡----=410141014A ,则A 的LU 分解为A ⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦。

答案:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--=15561415014115401411A 2、已知3.1)3(,2.1)2(,0.1)1(===f f f ,则用辛普生(辛卜生)公式计算求得⎰≈31_________)(dx x f ,用三点式求得≈')1(f 。

答案:2.367,0.253、1)3(,2)2(,1)1(==-=f f f ,则过这三点的二次插值多项式中2x 的系数为 ,拉格朗日插值多项式为 。

答案:-1,)2)(1(21)3)(1(2)3)(2(21)(2--------=x x x x x x x L4、近似值*0.231x =关于真值229.0=x 有( 2 )位有效数字;5、设)(x f 可微,求方程)(x f x =的牛顿迭代格式是( );答案)(1)(1n n n n n x f x f x x x '---=+6、对1)(3++=x x x f ,差商=]3,2,1,0[f ( 1 ),=]4,3,2,1,0[f ( 0 );7、计算方法主要研究( 截断 )误差和( 舍入 )误差;8、用二分法求非线性方程 f (x )=0在区间(a ,b )内的根时,二分n 次后的误差限为( 12+-n a b );9、求解一阶常微分方程初值问题y '= f (x ,y ),y (x 0)=y 0的改进的欧拉公式为( )],(),([2111+++++=n n n n n n y x f y x f hy y );10、已知f (1)=2,f (2)=3,f (4)=5.9,则二次Newton 插值多项式中x 2系数为( 0.15 ); 11、 两点式高斯型求积公式⎰1d )(xx f ≈(⎰++-≈1)]3213()3213([21d )(f f x x f ),代数精度为( 5 );12、 解线性方程组A x =b 的高斯顺序消元法满足的充要条件为(A 的各阶顺序主子式均不为零)。

计算方法与实习上机题答案

计算方法与实习上机题答案

实习题11用两种不容的顺序计算644834.1100012≈∑=-n n,分析误差的变化〔1〕顺序计算 源代码:#include<stdio.h> #include<math.h> void main() { double sum=0; int n=1; while(1) { sum=sum+(1/pow(n,2)); if(n%1000==0)printf("sun[%d]=%-30f",n,sum); if(n>=10000)break; n++; } printf("sum[%d]=%f\n",n,sum); }结果:〔2〕逆序计算 源代码:#include<stdio.h> #include<math.h> void main() { double sum=0; int n=10000; while(1) { sum=sum+(1/pow(n,2));if(n%1000==0) printf("sum[%d]=%-30f",n,sum); if(n<=1)break; n--; } printf("sum[%d]=%f\n",n,sum); }结果:2连分数))//(.../(322101n n b a a b a b a b f ++++=利用下面的方法计算f:11)0,...,2,1(,d f n n i d a b d b d i i i i n n =--=+==++写一个程序,读入n,n n b a ,,计算并打印f 源代码:#include<stdio.h> #include<math.h> void main() { int i=0,n; float a[1024],b[1024],d[1024]; printf("please input n,n="); scanf("%d",&n); printf("\nplease input a[1] to a[n]:\n"); for(i=1;i<=n;i++) { printf("a[%d]=",i); scanf("%f",&a[i]);} printf("\nplease input b[0] to b[n]:\n"); for(i=0;i<=n;i++) { printf("b[%d]=",i); scanf("%f",&b[i]); } d[n]=b[n]; for(i=n-1;i>=0;i--) d[i]=b[i]+a[i+1]/d[i+1]; printf("\nf=%f\n",d[0]); }结果:3给出一个有效的算法和一个无效的算法计算积分⎰=+=10)10,...1,0(14n dx x x y n n 源代码:#include<stdio.h> #include<math.h> main() { double y_0=(1/4.0)*log(5),y_1; double y_2=(1.0/55.0+1.0/11.0)/2,y_3; int n=1,m=10; printf("有效算法输出结果:\n"); printf("y[0]=%-20f",y_0);while(1) { y_1=1.0/(4*n)+y_0/(-4.0); printf("y[%d]=%-20f",n,y_1); if(n>=10) break; y_0=y_1; n++; if(n%3==0) printf("\n"); } printf("\n 无效算法的输出结果:\n"); printf("y[10]=%-20f",y_2); while(1) { y_3=1.0/n-4.0*y_2; printf("y[%d]=%-20f",m-1,y_3); if(m<=1) break; y_2=y_3; m--; if(m%2==0) printf("\n"); } }结果:4设∑=-=Nj N j S 2211,其准确值为)11123(21+--N N (1)编制按从小到大顺序计算N S 的程序 (2)编制按从小到达的顺序计算N S 的程序(3)按两种顺序分别计算30000100001000,,S S S ,并指出有效位数源代码:#include<stdio.h> main() { int N; double SN[30000]; SN[30000]=(3.0/2.0-1.0/30000.0-1/30001.0)/2.0; for(N=30000;N>=2;N--) SN[N-1]=SN[N]-1.0/(N*N-1); printf("从大到小顺序计算:\nSN[1000]=%f\nSN[10000]=%f\nSN[30000]=%f\n",SN[1000],SN[10000],SN[30000]); SN[2]=(3.0/2-1.0/2.0-1/3.0)/2.0; for(N=3;N<=30000;N++) SN[N]=SN[N-1]+1.0/(N*N-1); printf("从小到大顺序计算:\nSN[1000]=%f\nSN[10000]=%f\nSN[30000]=%f\n",SN[1000],SN[10000],SN[30000]); }结果:实习题21.用牛顿法求以下方程的根2=-x e x01=-x xe 02lg =-+x x源代码:#include <stdio.h> #include <math.h>typedef float (*p)(float ); float ff1(float x) { return x*x-exp(x); }float ff2(float x) { return x*exp(x)-1; }float ff3(float x) { return log(x)+x-2; }float answer(float(*p)(float)) { int k=2; float m=1,n=-1,x2,a,b,c; if (p==ff3)n=2; printf("x[0] = %.4f, x[1] = %.4f, ",m,n); while (1) { if (fabs(m-n)<1e-4) break; a=p(n)*(n-m); b=p(n)-p(m); c=a/b; x2=n-c; m = n; n = x2; printf("x[%d] = %.4f, ",k,x2); k++; if (k%3==0) printf("\n"); }if (k%3!=0) printf("\n");printf("iteration times: %d, roots: %.4f\n ",k-2,n);return 0;}main(){printf("x*x-exp(x),\n");answer(ff1);printf("x*exp(x)-1,\n");answer(ff2);printf("lg(x)+x-2,\n");answer(ff3);return 0;}结果:2.编写一个割线法的程序,求解上述各方程源代码:#include<stdio.h>#include<math.h>float gexian(float,float);float f(float);main(){int i,j;float x1=2.2;float x2=2,x3;scanf("%d",&i);if(i==1)printf("%f",x1); else if(i==2) printf("%f",x2); else { for(j=3;j<=i;j++) { x3=gexian(x1,x2); x1=x2; x2=x3; } printf("%f",gexian(x1,x2)); } }float f(float x) { return (x*x-exp(x)); }float gexian(float x1,float x2) { return (x2-(f(x2)/(f(x2)-f(x1)))*(x2-x1)); }结果:实习题31用列主元消去法解以下方程组;⎪⎪⎩⎪⎪⎨⎧=++=-++--=+--=--+43443233312)1(421432143214321x x x x x x x x x x x x x x x ⎪⎪⎩⎪⎪⎨⎧=++--=++-=-+--=-+-4341220332282)2(432132143214321x x x x x x x x x x x x x x x 源程序:#include<stdio.h>#include<math.h>void ColPivot(float*,int,float[]);void ColPivot(float*c,int n,float x[]){int i,j,t,k;float p;for(i=0;i<=n-2;i++){k=i;for(j=i+1;j<=n-1;j++)if(fabs(*(c+j*(n+1)+i))>(fabs(*(c+k*(n+1)+i))))k=j;if(k!=i)for(j=i;j<=n;j++){p=*(c+i*(n+1)+j);*(c+i*(n+1)+j)=*(c+k*(n+1)+j);*(c+k*(n+1)+j)=p;}for(j=i+1;j<=n-1;j++){p=(*(c+j*(n+1)+i))/(*(c+i*(n+1)+i));for(t=i;t<=n;t++)*(c+j*(n+1)+t)-=p*(*(c+i*(n+1)+t));}}for(i=n-1;i>=0;i--){for(j=n-1;j>=i+1;j--)(*(c+i*(n+1)+n))-=x[j]*(*(c+i*(n+1)+j));x[i]=*(c+i*(n+1)+n)/(*(c+i*(n+1)+i));}}void main(){int i;float x[4];float c[4][5]={1,1,0,3,4,2,1,-1,1,1,3,-1,-1,3,-3,-1,2,3,-1,4};ColPivot(c[0],4,x);for(i=0;i<=3;i++)printf("x[%d]=%f\n",i,x[i]);}结果:第〔1〕题第〔2〕题2、源代码:#include<stdio.h>void main(){float x[4];int i;float a[4][5]={48,-24,0,-12,4,-24,24,12,12,4,0,6,20,2,-2,-6,6,2,16,-2};void DirectLU(float*,int,float[]);DirectLU(a[0],4,x);for(i=0;i<=3;i++)printf("x[%d]=%f\n",i,x[i]);}void DirectLU(float*u,int n,float x[]){int i,r,k;for(r=0;r<=n-1;r++){for(i=r;r<=n;i++)for(k=0;k<=r-1;k++)*(u+r*(n+1)+i)-=*(u+r*(n+1)+k)*(*(u+k*(n+1)+i));for(i=r+1;i<=n-1;i++){for(k=0;k<=r-1;k++)*(u+i*(n+1)+r)-=*(u+i*(n+1)+k)*(*(u+k*(n+1)+r));*(u+i*(n+1)+r)/=*(u+r*(n+1)+r);}}for(i=n-1;i>=0;i--){for(r=n-1;r>=i+1;r--)*(u+i*(n+1)+n)-=*(u+i*(n+1)+r)*x[r];x[i]=*(u+i*(n+1)+n)/(*(u+i*(n+1)+i));}}实习题41、源代码:#include<stdio.h>float Lagrange(float x[],float y[],float xx,int n) //n为〔n+1〕次插值;{int i,j;float *a,yy=0;a=new float[n];for(i=0;i<=n-1;i++){a[i]=y[i];for(j=0;j<=n-1;j++)if(j!=i)a[i]*=(xx-x[j])/(x[i]-x[j]);yy+=a[i];}delete a;return yy;}void main(){float x[5]={-3.0,-1.0,1.0,2.0,3.0};float y[5]={1.0,1.5,2.0,2.0,1.0};float xx1=-2,xx2=0,xx3=2.75,yy1,yy2,yy3;yy1=Lagrange(x,y,xx1,3);yy2=Lagrange(x,y,xx2,3);yy3=Lagrange(x,y,xx3,3);printf("x1=%-20f,y1=%f\n",xx1,yy1);printf("x2=%-20f,y2=%f\n",xx2,yy2);printf("x3=%-20f,y3=%f\n",xx3,yy3);}结果:2、源代码:#include<stdio.h>float Lagrange(float x[],float y[],float xx,int n) //n为〔n+1〕次插值;{int i,j;float *a,yy=0;a=new float[n];for(i=0;i<=n-1;i++){a[i]=y[i];for(j=0;j<=n-1;j++)if(j!=i)a[i]*=(xx-x[j])/(x[i]-x[j]);yy+=a[i];}delete a;return yy;}void main(){float x[6]={0.30,0.42,0.50,0.58,0.66,0.72};float y[6]={1.04403,1.08462,1.11803,1.15603,1.19817,1.23223};float xx1=0.46,xx2=0.55,xx3=0.60,yy1,yy2,yy3;yy1=Lagrange(x,y,xx1,6);yy2=Lagrange(x,y,xx2,6);yy3=Lagrange(x,y,xx3,6);printf("x1=%-20f,y1=%f\n",xx1,yy1);printf("x2=%-20f,y2=%f\n",xx2,yy2);printf("x3=%-20f,y3=%f\n",xx3,yy3);}结果:源代码:#include<stdio.h>#define N 3void Difference(float y[],float f[4][4],int n){int k,i;f[0][0]=y[0];f[1][0]=y[1];f[2][0]=y[2];f[3][0]=y[3];for(k=1;k<=n;k++)for(i=0;i<=(N-k);i++)f[i][k]=f[i+1][k-1]-f[i][k-1];return;}void main(){int i,k=1;float a,b=1,m=21.4,t=1.4,f[4][4]={0};float x[5]={20,21,22,23,24};float y[5]={1.30103,1.32222,1.34242,1.36173,1.38021};Difference(y,f,N);a=f[0][0];for(i=1;i<=N;i++){k=k*i;b=b*(t-i+1);a=a+b*f[0][i]/k;}printf("x(k)\n");for (i=0;i<=4;i++)printf( "%-20f",x[i]);printf("\ny(k)\n");for (i=0;i<=4;i++)printf("%-20f",y[i]);for(k=1;k<=3;k++){printf("\nF(%d)\n ",k);for(i=0;i<=(3-k);i++){printf("%-20f",f[i][k]);}}printf ("\n");printf("f(%f)=%-20f",m,a);printf ("\n");结果:实习题52、源代码:#include<stdio.h>#include<math.h>void main(){int i,n;float a[2];float x[15]={1,1.5,2,2.5,3,3.5,4,4.5,5,5.5,6,6.5,7,7.5,8},z[15];floaty[15]={33.4,79.50,122.65,159.05,189.15,214.15,238.65,252.50,267.55,280.50,296.65,301.40,310. 40,318.15,325.15};for(n=0;n<=14;n++) //增加了数组z;{z[n]=log(y[n]/x[n]);}void Approx(float[],float[],int,int,float[]);Approx(x,z,15,1,a); //变成一次拟合;//for(i=0;i<=1;i++)//printf("a[%d]=%f\n",i,a[i]);printf("a=exp(a[0])=%f\n",exp(a[0]));printf("b=-a[1]=%f\n",-a[1]); }void Approx(float x[],float y[],int m,int n,float a[]){int i,j,t;float *c=new float[(n+1)*(n+2)];float power(int,float);void ColPivot(float *,int,float[]);for(i=0;i<=n;i++){for(j=0;j<=n;j++){*(c+i*(n+2)+j)=0;for(t=0;t<=m-1;t++)*(c+i*(n+2)+j)+=power(i+j,x[t]);}*(c+i*(n+2)+n+1)=0;for(j=0;j<=m-1;j++)*(c+i*(n+2)+n+1)+=y[j]*power(i,x[j]);}ColPivot(c,n+1,a);delete c;}void ColPivot(float *c,int n,float x[]){int i,j,t,k;float p;for(i=0;i<=n-2;i++){k=i;for(j=i+1;j<=n-1;j++)if(fabs(*(c+j*(n+1)+i))>(fabs(*(c+k*(n+1)+i))))k=j;if(k!=i)for(j=i;j<=n;j++){p=*(c+i*(n+1)+j);*(c+i*(n+1)+j)=*(c+k*(n+1)+j);*(c+k*(n+1)+j)=p;}for(j=i+1;j<=n-1;j++){p=(*(c+j*(n+1)+i))/(*(c+i*(n+1)+i));for(t=i;t<=n;t++)*(c+j*(n+1)+t)-=p*(*(c+i*(n+1)+t));}}for(i=n-1;i>=0;i--){for(j=n-1;j>=i+1;j--)(*(c+i*(n+1)+n))-=x[j]*(*(c+i*(n+1)+j));x[i]=*(c+i*(n+1)+n)/(*(c+i*(n+1)+i));}float power(int i,float v){float a=1;while(i--)a*=v;return a;}结果:实习题61、源代码:〔1〕#include<stdio.h>#include<math.h>float Cotes(float(*f)(float),float a,float b,int n){int k;float c,c1=0,c2,c3,c4;float h=(b-a)/n;c2=(*f)(a+h/4);c3=(*f)(a+h/2);c4=(*f)(a+3*h/4);for(k=1;k<=n-1;k++){c1+=(*f)(a+k*h);c2+=(*f)(a+k*h+h/4);c3+=(*f)(a+k*h+h/2);c4+=(*f)(a+k*h+3*h/4);}c=h/90*(7*((*f)(a)+(*f)(b))+14*c1+32*c2+12*c3+32*c4);return c;}float f(float x){return 1/sqrt(1+x*x*x);}void main()int i,n=4;float c;for(i=0;i<=4;i++){c=Cotes(f,0,1,n);printf("C(%d)=%f\n",n,c);n*=2;}}〔2〕#include<stdio.h>#include<math.h>float Cotes(float(*f)(float),float a,float b,int n){int k;float c,c1=0,c2,c3,c4;float h=(b-a)/n;c2=(*f)(a+h/4);c3=(*f)(a+h/2);c4=(*f)(a+3*h/4);for(k=1;k<=n-1;k++){c1+=(*f)(a+k*h);c2+=(*f)(a+k*h+h/4);c3+=(*f)(a+k*h+h/2);c4+=(*f)(a+k*h+3*h/4);}c=h/90*(7*((*f)(a)+(*f)(b))+14*c1+32*c2+12*c3+32*c4);return c;}float f(float x){ // return 1/sqrt(1+x*x*x);if (x==0)return 1;else return sin(x)/x;}void main(){int i,n=4;float c;for(i=0;i<=4;i++){// c=Cotes(f,0,1,n);c=Cotes(f,0,5,n);printf("C(%d)=%f\n",n,c);n*=2;}}结果:〔1〕〔2〕实习题7 一、改良欧拉法1、#include<stdio.h>#include<iostream>double Adams (double (*f)(double x, double y),double x0,double y0,double h,int N) {for(int n=0; n<N; ++n) {double x1=x0+h;double yp=y0+h*f(x0,y0);double y1=y0+h*f(x1,yp);y1=(yp+y1)/2.0;printf("ty=%f\n",y1);x0=x1;y0=y1;}}int main(void){double f(double x, double y); double x0=0,y0=0;double x,y,step;long i;step=0.1;Adams(f,x0,y0,0.1,10);}double f(double x, double y) {double r;r=x*x+y*y;return(r);}2、int main(void){double f(double x, double y); double x0=0,y0=0;double x,y,step;long i;step=0.1;Adams(f,x0,y0,0.1,10);}double f(double x, double y) {double r;r=1/(1+y*y);return(r);}3、int main(void){double f(double x, double y); double x0=0,y0=1;double x,y,step;long i;step=0.1;Adams(f,x0,y0,0.1,10);}double f(double x, double y) {double r;r=y-2*x/y;return(r);}四阶龙格库塔法1、#include<iostream>#include<stdio.h>using namespace std;//f为函数的入口地址,x0、y0为初值,xn为所求点,step为计算次数double Runge_Kuta( double (*f)(double x, double y), double x0, double y0, double xn, long step ) {double k1,k2,k3,k4,result;double h=(xn-x0)/step;if(step<=0)return(y0);if(step==1){k1=f(x0,y0);k2=f(x0+h/2, y0+h*k1/2);k3=f(x0+h/2, y0+h*k2/2);k4=f(x0+h, y0+h*k3);result=y0+h*(k1+2*k2+2*k3+k4)/6;}else{double x1,y1;x1=xn-h;y1=Runge_Kuta(f, x0, y0, xn-h,step-1);k1=f(x1,y1);k2=f(x1+h/2, y1+h*k1/2);k3=f(x1+h/2, y1+h*k2/2);k4=f(x1+h, y1+h*k3);result=y1+h*(k1+2*k2+2*k3+k4)/6;}printf("%lg\n",result);return(result);}int main(void){double f(double x, double y);double x0=0,y0=0,k;double x,y,step;long i;step=0.1;cout.precision(10);//for(i=0;i<=10;i++)//{// x=x0+i*step;// cout<<x<<" - "<<Runge_Kuta(f,x0,y0,x,i)<<endl; //}//cout<<Runge_Kuta(f,x0,y0,1,10);k= Runge_Kuta(f,x0,y0,1,10);}double f(double x, double y){double r;r=x*x+y*y;return(r);}2、int main(void){double f(double x, double y);double x0=0,y0=0,k;double x,y,step;long i;step=0.1;cout.precision(10);//for(i=0;i<=10;i++)//{// x=x0+i*step;// cout<<x<<" - "<<Runge_Kuta(f,x0,y0,x,i)<<endl; //}//cout<<Runge_Kuta(f,x0,y0,1,10);k= Runge_Kuta(f,x0,y0,1,10);}double f(double x, double y){double r;r=1/〔1+y*y〕;return(r);}3、int main(void){double f(double x, double y);double x0=0,y0=0,k;double x,y,step;long i;step=0.1;cout.precision(10);//for(i=0;i<=10;i++)//{// x=x0+i*step;// cout<<x<<" - "<<Runge_Kuta(f,x0,y0,x,i)<<endl; //}//cout<<Runge_Kuta(f,x0,y0,1,10);k= Runge_Kuta(f,x0,y0,1,10);}double f(double x, double y){double r;r=1/〔1+y*y〕;return(r);}二、int main(void){double f(double x, double y);double x0=0,y0=1,k;double x,y,step;long i;step=0.1;cout.precision(10);//for(i=0;i<=10;i++)//{// x=x0+i*step;// cout<<x<<" - "<<Runge_Kuta(f,x0,y0,x,i)<<endl;//}//cout<<Runge_Kuta(f,x0,y0,1,10);k= Runge_Kuta(f,x0,y0,1,10);}double f(double x, double y){double r;r=y-2*x/y;return(r);}三、1、void Runge_Kutta(float(*f)(float x,float y),float a,float b,float y0,int N,float yy[]) {float x=a,y=y0,K1,K2,K3,K4;float h=(b-a)/N;int i;for(i=1;i<=3;i++){K1=(*f)(x,y);K2=(*f)(x+h/2,y+h*K1/2);K3=(*f)(x+h/2,y+h*K2/2);K4=(*f)(x+h/2,y+h*K3);y=y+h*(K1+2*K2+2*K2+2*K3+K4)/6;x=a+i*h;yy[i-1]=y;}}void Adams (float a,float b,int N,float(*f)(float x,float y),float y0){int i;float y1,y2,y,yp,yc,yy[3],h,x;printf("x[0]=%f\ty[0]=%f\n",a,y0);Runge_Kutta(f,a,b,y0,N,yy);y1=yy[0];y2=yy[1];y=yy[2];h=(b-a)/N;for(i=1;i<=3;i++)printf("x[%d]=%f\ty[%d]=%f\n",i,a+i*h,i,yy[i-1]);for(i=3;i<N;i++){x=a+i*h;yp=y+h*(55*f(x,y)-59*f(x-h,y2)+37*f(x-2*h,y1)-9*f(x-3*h,y0))/24;yc=y+h*(9*(*f)(x+h,yp)+19*(*f)(x,y)-5*(*f)(x-h,y2)+(*f)(x-2*h,y1))/24;printf("x[%d]=%f\ty[%d]=%f\n",i+1,x+h,i+1,yc);y0=y1;y1=y2;y2=y;y=yc;}}float f(float x,float y){return y*y;void Runge_Kutta(float(*f)(float x,float y),float a,float,float b,float y0,int N,float yy[]); void Adams (float a,float b,int N,float(*f)(float x,float y),float y0);float f(float x,float y);int main (void){float a=0,b=1,y0=1;int N=10;Adams(a,b,N,f,y0);}2、#include<stdio.h>void Runge_Kutta(float(*f)(float x,float y),float a,float b,float y0,int N,float yy[]) {float x=a,y=y0,K1,K2,K3,K4;float h=(b-a)/N;int i;for(i=1;i<=3;i++){K1=(*f)(x,y);K2=(*f)(x+h/2,y+h*K1/2);K3=(*f)(x+h/2,y+h*K2/2);K4=(*f)(x+h/2,y+h*K3);y=y+h*(K1+2*K2+2*K2+2*K3+K4)/6;x=a+i*h;yy[i-1]=y;}}void Adams (float a,float b,int N,float(*f)(float x,float y),float y0)int i;float y1,y2,y,yp,yc,yy[3],h,x;printf("x[0]=%f\ty[0]=%f\n",a,y0);Runge_Kutta(f,a,b,y0,N,yy);y1=yy[0];y2=yy[1];y=yy[2];h=(b-a)/N;for(i=1;i<=3;i++)printf("x[%d]=%f\ty[%d]=%f\n",i,a+i*h,i,yy[i-1]);for(i=3;i<N;i++){x=a+i*h;yp=y+h*(55*f(x,y)-59*f(x-h,y2)+37*f(x-2*h,y1)-9*f(x-3*h,y0))/24;yc=y+h*(9*(*f)(x+h,yp)+19*(*f)(x,y)-5*(*f)(x-h,y2)+(*f)(x-2*h,y1))/24;printf("x[%d]=%f\ty[%d]=%f\n",i+1,x+h,i+1,yc);y0=y1;y1=y2;y2=y;y=yc;}}float f(float x,float y){return 0.1*(x*x*x+y*y);}void Runge_Kutta(float(*f)(float x,float y),float a,float,float b,float y0,int N,float yy[]); void Adams (float a,float b,int N,float(*f)(float x,float y),float y0);float f(float x,float y);int main (void){float a=0,b=1,y0=1;int N=10;Adams(a,b,N,f,y0);}。

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

目录1.计算方法A 上机作业 (1)上机练习目的 (1)上机练习任务 (1)计算方法A 上机题目 (1)程序设计要求 (1)上机报告要求 (1)2.QR 分解法求解线性方程组 (2)计算原理 (2)程序框图 (7)计算实习 (8)Matlab代码 (8)3.共轭梯度法求解线性方程组 (10)计算原理 (10)程序框图 (11)计算实习 (12)Matlab代码 (12)4.三次样条插值 (14)计算原理 (14)程序框图 (16)计算实习 (17)Matlab代码 (17)5.四阶龙格-库塔法求解常微分方程的初值问题 (21)计算原理 (21)程序框图 (22)计算实习 (23)Matlab代码 (23)1.计算方法A 上机作业上机练习目的❑ 复习和巩固数值计算方法的基本数学模型,全面掌握运用计算机进行数值计算的具体过程及相关问题。

❑ 利用计算机语言独立编写、调试数值计算方法程序,培养学生利用计算机和所学理论知识分析解决实际问题的能力。

上机练习任务•利用计算机语言编写并调试一系列数值方法计算通用程序,并能正确计算给定题目,掌握调试技能。

•掌握文件使用编程技能,如文件的各类操作,数据格式设计、通用程序运行过程中文件输入输出运行方式设计等。

•写出上机练习报告。

计算方法A 上机题目1. QR 分解方法求解线性方程组。

(第二章)2. 共轭梯度法求解线性方程组。

(第三章)3. 三次样条插值(第四章)4. 四阶龙格-库塔法求解常微分方程的初值问题程序设计要求1. 程序要求是通用的,在程序设计时要充分考虑哪些变量应该可变的。

2. 程序要求调试通过。

上机报告要求报告内容包括:● 每种方法的算法原理及程序框图。

● 程序使用说明。

● 算例计算结果。

2. QR 分解法求解线性方程组计算原理当n x R ∈是任意给定的非零向量,n v R ∈是任意给定的单位向量,则存在初等反射阵2T H I uu =-,使得Hx v σ=,其中σ为常数,当取单位向量2x vu x vσσ-=-时,由u 确定的矩阵H 必定满足Hx v σ=,所以在计算过程中取u 的值为上述值。

设A 是一个()m n m n ⨯≥阶矩阵且它的列向量线性无关,则利用豪斯霍尔德变换可以把A 逐步化为上梯形矩阵,设()11121212221212,,,n n n m m mn a a a a a a A a a a a a a ⎛⎫ ⎪ ⎪== ⎪⎪⎝⎭具体变换过程如下:设()1,2,,i e i n =是m 维单位坐标向量。

第1步 为把矩阵A 的第一列()01a 化为()1,0,,0Tσ,取()()011,1,0,,0Tm x a v e R ===∈ (或取1v e =-),根据上式可得,取 ()()0111110121112a e u a e σωωσ-==- 其中()()001211121111, a e a e ωσωσ=-=-()()()()01111111111120121111122, TT T Tuu a a ωωωωωωασσωασσ====-- 令 111111122T T m m H I u u I αωω-=-=-,用1H 左乘()0A 得,()()()()()()()()()()100001111211111123,,, =,,,,n nA H A H a H a H a e a a a σ==程序框图得到矩阵Q和Ri=n输入系数矩阵A右端列向量b否是x计算实习用豪斯霍尔德变换求方程组x A b = ,其中54756753941287886537810987756, 579119755368891089587877810105756759101052A b ⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥==⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦Matlab 代码 %使用说明:%需自己输入矩阵A 及b 的值%变量Q,R 分别为进行QR 分解后的结果 clear clc format long load('A 矩阵.mat') load('b 矩阵.mat')%调用函数qrhs 进行QR 分解 [Q,R]=qrhs(A); [~,n]=size(R);fprintf('您输入的矩阵阶数'); n y=Q'*b;%回代过程x(n,1)=y(n,1)/R(n,n); for i=n -1:-1:1 s=y(i,1);for j=i+1:ns=s-R(i,j)*x(j,1);endx(i,1)=s/R(i,i);endx被调用函数qrhsfunction[Q,R]=qrhs(A)format long[~,n]=size(A);Q=eye(n);for j=1:n-1B=norm(A(j:n,j));Y=zeros(n-j+1,1);Y(1,1)=-sign(A(1,j))*B;X=A(j:n,j);I=eye(n-j+1);N=I-(2/(norm(X-Y))^2)*(X-Y)*(X-Y)';H=[eye(j-1) zeros(j-1,n-j+1);zeros(n-j+1,j-1) N];A=H*A;Q=Q*H;endR=A;Q;R;end3. 共轭梯度法求解线性方程组计算原理当A 是n 阶对称正定矩阵,若*x 是二次函数()12TT f x x Ax b x =-的极小值点,则*x 是方程组Ax b =的解,即()()n**x Rmin Ax b f x f x ∈=⇔= 共轭梯度法在形式上具有迭代法的特征,即给定初始向量(0)x ,由迭代格式()()()1k k k k x x d α+=+产生的迭代序列在无舍入误差的假定下,最多经过n 次迭代就能求得()f x 的最小点,也就是方程组Ax b =的解。

共轭梯度法中关键的两点是,确定迭代格式中的搜索方向和最佳步长。

搜索方向()kd ,与前一次的搜索方向关于()1k d -关于矩阵A 共轭,即 ()()()1,0k k d Ad +=,然后从点()k x 出发,沿()k d 方向求得()f x 的极小值点()1k x +,即()()()()()()min k k k k f x d f x d ααα≥+=+ 。

由此解得最佳步长k α和参数k β的表达式为()()()()()()()()1, k T k k T k k k k T k k T k r d r Ad d Ad d Adαβ+==-共轭梯度法的计算公式为:()()()()()()()()()()()()()()()()()00011(1)11(1)r rr k k T kk k T k k k k k k k T k kk T k k kk k d b Ax r d d Ad xx d b Ax r Ad d Ad dd ααββ++++++⎧==-⎪⎪=⎪⎪⎪=+⎪⎨=-⎪⎪⎪=-⎪⎪=+⎪⎩程序框图计算实习用共轭梯度法求解线性方程组x A b =,其中2111210, 1210121A b --⎡⎤⎡⎤⎢⎥⎢⎥-⎢⎥⎢⎥⎢⎥⎢⎥==⎢⎥⎢⎥-⎢⎥⎢⎥⎢⎥⎢⎥--⎣⎦⎣⎦矩阵A 的阶数n 分别取为100,200,400,指出计算结果是否可靠。

Matlab 代码%使用说明:共轭梯度法求解Ax=b %命令行中输入矩阵A 及b %然后调用函数getd 进行计算%变量含义:n —方程阶数,x0—初始向量 %e —计算精度,r —残向量 clear clc format longn=input('请输入方程阶数n='); %输入矩阵阶数 A=zeros(n); b=zeros(n,1);A(1,1)=-2;A(1,2)=1;A(n,n -1)=1;A(n,n)=-2; b(1,1)=-1;b(n,1)=-1; for i=2:n -1;A(i,i)=-2;A(i,i -1)=1;A(i,i+1)=1; end; A;b; %生成对应阶数的矩阵A 和b x0=zeros(n,1); %生成初始向量 e=input('请输入计算精度e='); %输入计算精度 x=getd(A,b,x0,e); %调用函数getd 进行计算if n==100 %对x元素进行重新排列x=reshape(x,10,10)elseif n==200x=reshape(x,10,20)elsex=reshape(x,20,20)end被调用函数getdfunction x=getd(A,b,x0,e)% 矩阵A,b,初始向量x0,精度e n=size(A,1);% 获取矩阵A的阶数x=x0;%初始向量r=b-A*x;%残向量d=r;%搜索向量for k=0:(n-1)p=(r'*r)/(d'*A*d);x=x+p*d;r2=b-A*x;if ((norm(r2)<=e)||(k==n-1))x;break;endq=norm(r2)^2/norm(r)^2;d=r2+q*d;r=r2;end4.三次样条插值计算原理程序框图计算实习 给定函数21(x)(1x 1)115f x=-≤≤+ .取等距节点,构造三次样条插值10(x)S 。

Matlab 代码%使用说明:该程序解决的是三次样条插值中,第1,2类边界条件的问题 %各变量含义:a,b —插值区间左右端点 % n —插值节点数目 % p,q —左右端点导数值% A ,M ,d —用于求解AM=d 中,矩阵M 的值 % C —存放各区间内插值函数的系数矩阵% zglu —利用追赶法进行LU 分解,求解AM=d 的函数 clear clc format long%输入区间,计算插值节点 a=input('请输入区间左端点a='); b=input('请输入区间右端点b=');n=input('请输入插值节点数目(包括左右端点)n='); d=zeros(n,1);x=zeros(n,1);y=zeros(n,1);A=zeros(n); h=(b -a)/(n -1); fprintf('步长h=%d',h) for i=1:n x(i,:)= a+h*(i -1);y(i,:)=1/(1+25*(x(i,:))^2);%计算插值节点处的函数值 end%选择边界条件进行计算,并输入区间左右端点的导数值p ,q xz=input('请选择边界条件类型(1或2或3)xz='); fprintf('以第%d 类边界条件进行计算',xz);p=input('请输入区间左端边界条件p=');q=input('请输入区间右端边界条件q=');%计算矩阵A及矩阵dif xz==1A(1,1)=2;A(1,2)=1/2;A(n,n)=2;A(n,n-1)=1/2;for j=1:n-1d(j,:)=(3/h)*((y(j+1,:)-y(j,:))/h-(y(j,:)-y(j-1,:))/h);A(j,j)=2;A(j,j-1)=0.5;A(j,j+1)=0.5;endd(1,:)=d(1,:)-1/2*p;d(n,:)=d(n,:)-1/2*qelseif xz==2d(1,:)=(6/h)*((y(2,:)-y(1,:))/h-p);d(n,:)=(6/h)*(q-(y(n,:)-y(n-1,:))/h);A(1,1)=2;A(1,2)=1;A(n,n)=2;A(n,n-1)=1;for j=2:n-1d(j,:)=(3/h)*((y(j+1,:)-y(j,:))/h-(y(j,:)-y(j-1,:))/h);A(j,j)=2;A(j,j-1)=0.5;A(j,j+1)=0.5;endend%调用函数zglu用追赶法计算AM=dM=zglu(A,d);%各插值区间内函数表达式,系数矩阵为n*4阶矩阵Cfor k=2:nC(k-1,1)=(M(k,:)-M(k-1,:))/(6*h);C(k-1,2)=(x(k,:)*M(k-1,:)-x(k-1,:)*M(k,:))/(2*h);C(k-1,3)=1/(2*h)*(x(k-1,:)^2*M(k,:)-x(k,:)^2*M(k-1,:))+1/h*(y(k,:)-1/6*h^2*M(k,:)-y(k-1,:)-1/6*h^2*M(k-1,:));C(k-1,4)=1/(6*h)*(x(k,:)^3*M(k-1,:)-x(k-1,:)^3*M(k,:))+1/h*(x(k,:)*(y(k-1,:)-h^2/6* M(k-1,:))-x(k-1,:)*(y(k,:)-h^2/6*M(k,:)));end%显示输入数据disp('您输入的数据如下:')disp('插值节点x:')x(:,:)disp('插值节点y:')y(:,:)disp('计算得到矩阵M:')M(:,:)%输出插值函数S(x)的表达式disp('S(x)的表达式为:')for l=1:n-1disp([num2str(C(l,1)),'x^3+',num2str(C(l,2)),'x^2+',num2str(C(l,3)),'x+',num2str(C(l,4 )),' ',num2str(x(l,:)),'≤x≤',num2str(x(l+1,:))]);end被调用函数zglu% 追赶法求解三对角方程组function x=zglu(A,b)[~,n]=size(A);L=eye(n);U=zeros(n);y=zeros(n,1);x=zeros(n,1);U(1,1)=A(1,1);y(1,1)=b(1,1);for i=2:nl=A(i,i-1)/U(i-1,i-1);L(i,i-1)=l;U(i,i)=A(i,i)-l*A(i-1,i);y(i,1)=b(i,1)-l*y(i-1,1);U(i-1,i)=A(i-1,i);endx(n,1)=y(n,1)/U(n,n);for i=n-1:-1:1s=y(i,1);for j=i+1:ns=s-U(i,j)*x(j,1);endx(i,1)=s/U(i,i);endend5.四阶龙格-库塔法求解常微分方程的初值问题计算原理程序框图是输入待求微分方程、求解的自变量范围、初值以及求解范围内的步确定求解范围内的取点数nk = n?否求解:求解并输出:结束算法计算实习用标准4级4阶R -K 法求解23,(0)1,y (0)3,y (0)2y y y y x y ''''''=+-+-⎧⎨'''=-==⎩ 取步长h=0.05,计算(1)y 的近似值,并与解析解(x)xe 21x y x =+- 作比较。

相关文档
最新文档