计算方法上机答案

合集下载

计算方法-刘师少版第一章课后习题完整答案

计算方法-刘师少版第一章课后习题完整答案
1
9000 m=1
9000.00
解 (1)∵ 2.0004=0.20004×10 ,
x − x ∗ = x − 0.20004 ≤ 0.000049 ≤ 0.5 × 10 −4
m-n=-4,m=1 则 n=5,故 x=2.0004 有 5 位有效数字
x1 =2,相对误差限 ε r =
1 1 × 10 −( n −1) = × 101−5 = 0.000025 2 × x1 2× 2
-2
(2)∵ -0.00200= -0.2×10 ,
m=-2
x − x ∗ = x − (−0.00200) ≤ 0.0000049 ≤ 0.5 × 10 −5
m-n=-5, m=-2 则 n=3,故 x=-0.00200 有 3 位有效数字
x1 =2,相对误差限 ε r =
4
1 × 101−3 =0.0025 2× 2
4 3 4 πR − π ( R * ) 3 3 ε r* (V ) = 3 4 3 πR 3 R 3 − (R* )3 ( R − R * )( R 2 + RR * + R * ) = = R3 R3 R − R * R 2 + RR * + R * R − R * R 2 + RR * + RR * = ⋅ ≈ ⋅ R R R2 R2
可以得到计算积分的递推公式:
I n = 1 − nI n −1
1 0
n = 1,2, L
1 0
I 0 = ∫ e x −1 dx = e x −1
则准确的理论递推式 实际运算的递推式 两式相减有
* *
= 1 − e −1
I n = 1 − nI n −1
* * In = 1 − nI n −1 * * * In − In = −n( I n −1 − I n −1 ) = − ne( I n −1 ) *

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

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

计算⽅法各习题及参考答案第⼆章数值分析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 ≈=??≈=?。

(完整版)数值计算方法上机实习题答案

(完整版)数值计算方法上机实习题答案

(完整版)数值计算⽅法上机实习题答案1.设?+=105dx xx I nn ,(1)由递推公式nI I n n 151+-=-,从0I 的⼏个近似值出发,计算20I ;解:易得:0I =ln6-ln5=0.1823, 程序为:I=0.182; for n=1:20I=(-5)*I+1/n; end I输出结果为:20I = -3.0666e+010 (2)粗糙估计20I ,⽤nI I n n 515111+-=--,计算0I ;因为 0095.056 0079.01020201020≈<<≈??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); end I0I = 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-4 c=(b+a)/2;if exp(c)+10*c-2>0 b=c; else a=c; end end c结果:c =0.0903(2)取初值00=x ,并⽤迭代1021x k e x -=+;程序:x=0; a=1;while abs(x-a)>5*1e-4 a=x;x=(2-exp(x))/10; end x结果:x =0.0905(3)加速迭代的结果;程序:x=0; a=0;b=1;while abs(b-a)>5*1e-4 a=x;y=exp(x)+10*x-2; z=exp(y)+10*y-2;x=x-(y-x)^2/(z-2*y+x); b=x; end x结果:x =0.0995(4)取初值00=x ,并⽤⽜顿迭代法;程序:x=0; a=0;b=1;while abs(b-a)>5*1e-4 a=x;x=x-(exp(x)+10*x-2)/(exp(x)+10); b=x; end x结果: x =0.0905(5)分析绝对误差。

计算方法与实习答案1-2

计算方法与实习答案1-2

绪论
习题1——10:设 f ( x) = 8 x 5 − 0.4 x 4 + 4 x 3 − 9 x + 1 用秦九韶法求f(3)。 解:
8 − 0.4
24 8 23.6

0
−9
1
x=3
70.8 74.8
224.4 224.4
673.2 664.2
1992.6 1993.6
∴ f(3)=1993.6
第一章 绪论 练习
1.《计算方法》课程主要研究以计算 机为工具的 数值 分析方法 ,并评价 该算法的计算误差。 2.近似值作四则运算后的绝对误差限 公式为 ε ( x1 − x2 ) ≤ ε ( x1 ) + ε ( x2 ) ,近似值 1.0341的相对误差限不大于 1 ×10−2 , 则它至少有三位有效数字。 4
ln(103 ) ∴k ≥ ln(2) ≥ 9.965
2 2 2
∴需二分10次 需二分 次
方程求根——二分法
习题2——2:用二分法求方程2e-x-sinx=0在区 间[0,1]内的1个实根,要求3位有效数字。
解:1)判断是否在该区间有且仅有一个根 f(0)=2>0,f(1)=2/e-sin1≈-0.1<0, f’(x)=-2e-x-cosx,f’=-3,-2/e-cos1<0 2)判断二分次数 由(b-a)/2k+1=1/2k+1≤1/2*10-3,解得k≥3ln10/ln2≥9.965, 所以需要二分10次,才能满足精度要求。
∴ x≈2.981
方程求根
f (xk )(xk − xk −1) xk +1 = xk − f (xk ) − f (xk −1)
习题2——11:用割线法求方程x3-2x-5=0的根,要 求精确到4位有效数字,取x0=2, x1=2.2。

计算方法上机题答案

计算方法上机题答案

2.用下列方法求方程e^x+10x-2=0的近似根,要求误差不超过5*10的负4次方,并比较计算量(1)二分法(局部,大图不太看得清,故后面两小题都用局部截图)(2)迭代法(3)牛顿法顺序消元法#include<stdio.h>#include<stdlib.h>#include<math.h>int main(){ int N=4,i,j,p,q,k; double m;double a[4][5]; double x1,x2,x3,x4; for (i=0;i<N ;i++ )for (j=0;j<N+1; j++ )scanf("%lf",&a[i][j]);for(p=0;p<N-1;p++) {for(k=p+1;k<N;k++){m=a[k][p]/a[p][p];for(q=p;q<N+1;q++)a[k][q]=a[k][q]-m*a[p][q];}}x4=a[3][4]/a[3][3];x3=(a[2][4]-x4*a[2][3])/a[2][2];x2=(a[1][4]-x4*a[1][3]-x3*a[1][2])/a[1][1];x1=(a[0][4]-x4*a[0][3]-x3*a[0][2]-x2*a[0][1])/a[0][0];printf("%f,%f,%f,%f",x1,x2,x3,x4);scanf("%lf",&a[i][j]); (这一步只是为了看到运行的结果)}运行结果列主元消元法function[x,det,flag]=Gauss(A,b)[n,m]=size(A);nb=length(b);flag='OK';det=1;x=zeros(n,1);for k=1:n-1 max1=0;for i=k:nif abs(A(i,k))>max1max1=abs(A(i,k));r=i;endendif max1<1e-10flag='failure';return;endif r>kfor j=k:nz=A(k,j);A(k,j)=A(r,j);A(r,j)=z;endz=b(k);b(k)=b(r);b(r)=z;det=-det; endfor i=k+1:nm=A(i,k)/A(k,k);for j=k+1:nA(i,j)=A(i,j)-m*A(k,j);endb(i)=b(i)-m*b(k);enddet=det*A(k,k);enddet=det*A(n,n)if abs(A(n,n))<1e-10flag='failure';return;endx(n)=b(n)/A(n,n);for k=n-1:-1:1for j=k+1:nb(k)=b(k)-A(k,j)*x(j);endx(k)=b(k)/A(k,k);end运行结果:雅可比迭代法function y=jacobi(a,b,x0) D=diag(diag(a));U=-triu(a,1);L=-tril(a,-1);B=D\(L+U);f=D\b;y=B*x0+f;n=1;while norm(y-x0)>1e-4 x0=y;y=B*x0+f;n=n+1;endyn高斯赛德尔迭代法function y=seidel(a,b,x0) D=diag(diag(a));U=-triu(a,1);L=-tril(a,-1);G=(D-L)\U;f=(D-L)\b;y=G*x0+f;n=1;while norm(y-x0)>10^(-4) x0=y;y=G*x0+f;n=n+1;endynSOR迭代法function y=sor(a,b,w,x0)D=diag(diag(a));U=-triu(a,1);L=-tril(a,-1);lw=(D-w*L)\((1-w)*D+w*U); f=(D-w*L)\b*w;y=lw*x0+f;n=1;while norm(y-x0)>10^(-4) x0=y;y=lw*x0+f;n=n+1;endyn1.分段线性插值:function y=fdxx(x0,y0,x)p=length(y0);n=length(x0);m=length(x);for i=1:mz=x(i);for j=1:n-1if z<x0(j+1)break;endendy(i)= y0(j)*(z-x0(j+1))/(x0(j)-x0(j+1))+y0(j+1)*(z-x0(j))/(x0(j+1)-x0(j));fprintf('y(%d)=%f\nx1=%.3fy1=%.3f\nx2=%.3fy2=%.3f\n\n',i,y(i),x0(j),y0(j),x0(j+1),y0(j+1));endend结果0.39404 0.38007 0.356932.分段二次插值:function y=fdec(x0,y0,x)p=length(y0);n=length(x0);m=length(x);for i=1:mz=x(i);for j=1:n-1if z<x0(j+1)break;endendif j<2j=j+1;elseif (j<n-1)if (abs(x0(j)-z)>abs(x0(j+1)-z))j=j+1;elseif ((abs(x0(j)-z)==abs(x0(j+1)-z))&&(abs(x0(j-1)-z)>abs(x0(j+2)-z)))j=j+1;endendans=0.0;for t=j-1:j+1a=1.0;for k=j-1:j+1if t~=ka=a*(z-x0(k))/(x0(t)-x0(k));endendans=ans+a*y0(t);endy(i)=ans;fprintf('y(%d)=%f\n x1=%.3f y1=%.3f\n x2=%.3f y2=%.3f\n x3=%.3f y3=%.3f\n\n',i,y(i),x0(j-1),y0(j-1),x0(j),y0(j),x0(j+1),y0(j+1));endend结果为0.39447 0.38022 0.357253.拉格朗日全区间插值function y=lglr(x0,y0,x)p=length(y0);n=length(x0);m=length(x);for t=1:mans=0.0;z=x(t);for k=1:np=1.0;for q=1:nif q~=kp=p*(z-x0(q))/(x0(k)-x0(q));endendans=ans+p*y0(k);endy(t)=ans;fprintf('y(%d)=%f\n',t,y(t));endend结果为0.39447 0.38022 0.35722function [p,S,mu] = polyfit(x,y,n)if ~isequal(size(x),size(y))errorendx = x(:);y = y(:);if nargout > 2mu = [mean(x); std(x)];x = (x - mu(1))/mu(2);endV(:,n+1) = ones(length(x),1,class(x));for j = n:-1:1V(:,j) = x.*V(:,j+1);end[Q,R] = qr(V,0);ws = warning;p = R\(Q'*y); warning(ws);if size(R,2) > size(R,1)warning;elseif warnIfLargeConditionNumber(R)if nargout > 2warning;elsewarning;endendif nargout > 1r = y - V*p;S.R = R;S.df = max(0,length(y) - (n+1));S.normr = norm(r);endp = p.';function flag = warnIfLargeConditionNumber(R) if isa(R, 'double')flag = (condest(R) > 1e+10);elseflag = (condest(R) > 1e+05);endx=[1,3,4,5,6,7,8,9,10];y=[10,5,4,2,1,1,2,3,4];p=polyfit(x,y,2);y=poly2sym(p);a=-p(1)/p(2)*0.5;xa=-p(2)/(2*p(1));min=(4*p(1)*p(3)-p(2)^2)/(4*p(1)); yxamin运行截图运行结果function [I] = CombineTraprl(f,a,b,eps)if(nargin ==3)eps=1.0e-4;endn=1;h=(b-a)/2;I1=0;I2=(subs(sym(f),findsym(sym(f)),a)+subs(sym(f),findsym(sym(f)),b))/h; while abs(I2-I1)>epsn=n+1;h=(b-a)/n;I1=I2;I2=0;for i=0:n-1x=a+h*i;x1=x+h;I2=I2+(h/2)*(subs(sym(f),findsym(sym(f)),x)+subs(sym( f),findsym(sym(f)),x1));endendI=I2;程序:>> [q]=CombineTraprl('(1-exp(-x))^0.5/x'10^-12,1)结果:q =1.8521欧拉方法function [x,y]=euler(fun,x0,xfinal,y0,n);if nargin<5,n=50;endh=(xfinal-x0)/n;x(1)=x0;y(1)=y0;for i=1:nx(i+1)=x(i)+h;y(i+1)=y(i)+h*feval(fun,x(i),y(i));end程序:[x,y]=euler('doty',0,1,1,10)结果:改进欧拉方法function [x,y]=eulerpro(fun,x0,xfinal,y0,n); if nargin<5,n=50;endh=(xfinal-x0)/n;x(1)=x0;y(1)=y0;x(i+1)=x(i)+h;y1=y(i)+h*feval(fun,x(i),y(i));y2=y(i)+h*feval(fun,x(i+1),y1);y(i+1)=(y1+y2)/2;end程序:>> [x,y]=eulerpro('doty',0,1,1,10)结果:经典RK法function [x,y]=RungKutta4(dyfun,xspan,y0,h) x=xspan(1):h:xspan(2);y(1)=y0;for n=1:length(x)-1k1=feval(dyfun,x(n),y(n));k2=feval(dyfun,x(n)+h/2,y(n)+h/2*k1);k3=feval(dyfun,x(n)+h/2,y(n)+h/2*k2);k4=feval(dyfun,x(n+1),y(n)+h*k3);y(n+1)=y(n)+h*(k1+2*k2+2*k3+k4)/6; end程序:dyfun=inline('(2*x*y^-2)/3');[x,y]=RungKutta4(dyfun,[0,1],1,0.1)标准函数x(1)=0;h=0.1;for i=1:10y(i)=(1+x(i)^2)^(1/3); endxY结果:。

计算方法 课后习题答案

计算方法 课后习题答案
4. 设 f x xk k 0,1,...,n ,试列出 f x 关于互异节点 xi i 0,1,..., n 的
Lagrange 插值多项式。
3
注意到:若 n 1个节点 xi i 0,1,..., n 互异,则对任意次数 n 的多项式 f x ,它
(4.5)(0.01172)

0.00879
(2)采用 Newton 插值多项式 y x N2(x) 根据题意作差商表:
i
xi
0
4
1
6.25
f (xi ) 2 2.5
一阶差商 2 9
2
9
3
2 11
二阶差商 4 495
N2 (7) 2 29 (7 4) ( 4 495) (7 4) (7 6.25) 2.6484848
Lagrange
型二次插值函数,并估
计差。
解1)由题意知:
x0

0,
x1
1,
x2

1 2
;
y0
1,
y1

e1,
y2

1
e2
则根据二次Lagrange插值公式得:
L2 (x)

(x ( x0

x1)(x x2 ) x1)(x0 x2 )
y0

(x ( x1

x0 )(x x2 ) x0 )(x1 x2 )
x2 02
x4= 04
x3
7x2 14x 8 8
l1 ( x)

x x0 x1 x0

x x2 x1 x2

x x3 x1 x3

东南大学数值分析上机题答案

东南大学数值分析上机题答案

东南⼤学数值分析上机题答案数值分析上机题第⼀章17.(上机题)舍⼊误差与有效数设∑=-=Nj N j S 2211,其精确值为)111-23(21+-N N 。

(1)编制按从⼤到⼩的顺序1-1···1-311-21222N S N +++=,计算N S 的通⽤程序;(2)编制按从⼩到⼤的顺序121···1)1(111222-++--+-=N N S N ,计算NS 的通⽤程序;(3)按两种顺序分别计算210S ,410S ,610S ,并指出有效位数(编制程序时⽤单精度);(4)通过本上机题,你明⽩了什么?解:程序:(1)从⼤到⼩的顺序计算1-1···1-311-21222N S N +++=:function sn1=fromlarge(n) %从⼤到⼩计算sn1format long ; sn1=single(0); for m=2:1:nsn1=sn1+1/(m^2-1); end end(2)从⼩到⼤计算121···1)1(111222-++--+-=N N S N function sn2=fromsmall(n) %从⼩到⼤计算sn2format long ; sn2=single(0); for m=n:-1:2sn2=sn2+1/(m^2-1); end end(3)总的编程程序为: function p203()clear allformat long;n=input('please enter a number as the n:') sn=1/2*(3/2-1/n-1/(n+1));%精确值为sn fprintf('精确值为%f\n',sn);sn1=fromlarge(n);fprintf('从⼤到⼩计算的值为%f\n',sn1);sn2=fromsmall(n);fprintf('从⼩到⼤计算的值为%f\n',sn2);function sn1=fromlarge(n) %从⼤到⼩计算sn1 format long;sn1=single(0);for m=2:1:nsn1=sn1+1/(m^2-1);endendfunction sn2=fromsmall(n) %从⼩到⼤计算sn2 format long;sn2=single(0);for m=n:-1:2sn2=sn2+1/(m^2-1);endendend运⾏结果:从⽽可以得到N值真值顺序值有效位数2 100.740050 从⼤到⼩0.740049 5从⼩到⼤0.740050 64 100.749900 从⼤到⼩0.749852 3从⼩到⼤0.749900 66 100.749999 从⼤到⼩0.749852 3从⼩到⼤0.749999 6(4)感想:通过本上机题,我明⽩了,从⼩到⼤计算数值的精确位数⽐较⾼⽽且与真值较为接近,⽽从⼤到⼩计算数值的精确位数⽐较低。

计算方法课后习题集规范标准答案

计算方法课后习题集规范标准答案

习 题 一3.已知函数y =4, 6.25,9x x x ===处的函数值,试通过一个二次插值函解:0120124, 6.25,9;2, 2.5,3y x x x y y y =======由题意 (1) 采用Lagrange插值多项式220()()j j j y L x l x y ==≈=∑27020112012010*********()|()()()()()()()()()()()()(7 6.25)(79)(74)(79)(74)(7 6.25)2 2.532.255 2.25 2.75 2.7552.6484848x y L x x x x x x x x x x x x x y y y x x x x x x x x x x x x ==≈------=++------------=⨯+⨯+⨯⨯-⨯⨯= 其误差为(3)25(3)25(3)2[4,9]2()(7)(74)(7 6.25)(79)3!3()83max |()|40.0117281|(7)|(4.5)(0.01172)0.008796f R f x x f x R ξ--=---==<∴<=又则(2)采用Newton插值多项式2()y N x =≈ 根据题意作差商表:224(7)2(74)()(74)(7 6.25) 2.64848489495N =+⨯-+-⨯-⨯-≈4. 设()()0,1,...,k f x x k n ==,试列出()f x 关于互异节点()0,1,...,i x i n =的Lagrange 插值多项式。

注意到:若1n +个节点()0,1,...,i x i n =互异,则对任意次数n ≤的多项式()f x ,它关于节点()0,1,...,i x i n =满足条件(),0,1,...,i i P x y i n ==的插值多项式()P x 就是它本身。

可见,当k n ≤时幂函数()(0,1,...,)kf x x k n ==关于1n +个节点()0,1,...,i x i n =的插值多项式就是它本身,故依Lagrange 公式有()00(),0,1,...,nn n k kk i j j j j j i j ii jx x x l x x x k n x x ===≠-=≡=-∑∑∏特别地,当0k =时,有()0001nn n ij j j i j ii jx x l x x x ===≠-=≡-∑∑∏而当1k =时有()000nnn ij j j j j i j ii jx x x l x x x x x ===≠⎛⎫- ⎪=≡ ⎪- ⎪⎝⎭∑∑∏ 5.依据下列函数表分别建立次数不超过3的Lagrange 插值多项式和Newton 插值多项式,并验证插值多项式的唯一性。

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

上海电力学院数值分析上机实验报告题目:数值分析上机实验报告学生姓名:11111111111学号:111111*********专业:11112013年12月30日数值计算方法上机实习题1. 设⎰+=105dx xx I nn , (1) 由递推公式n I I n n 151+-=-,从0I 的几个近似值出发,计算20I ; (2) 粗糙估计20I ,用nI I n n 51511+-=-,计算0I ;(3) 分析结果的可靠性及产生此现象的原因(重点分析原因)。

(1) 解答:n=0,0.1823)05ln()15ln()5(51515101010=+-+=++=+=+=⎰⎰⎰x d xdx x dx x x I nn这里可以用for 循环,while 循环,根据个人喜好与习惯:for 循环程序: While 循环程序: I=0.1823; I=0.1823; for n=1:20 i=1;I=(-5)*I+1/n; while i<21 End I=(-5)*I+1/i; I i=i+1; fprintf('I20=%f',I) end I = -2.0558e+009 >> II20=-2055816073.851284>> I = -2.0558e+009 (2) 粗略估计I 20: Mathcad 计算结果: for 循环程序: While 循环程序: >> I=0.007998; I=0.007998; >> for n=1:20 n=1;I=(-0.2)*I+1/(5*n); while n<21End I=(-0.2)*I+1/(5*n); >> I n=n+1; I =0.0083 end >> II =0.0083(3) 算法误差分析:计算在递推过程中传递截断误差和舍入误差 第一种算法:(从1——>20)*000e I I=-***21111120115(5)5()555n n n n n n n n n n e I I I I I I e e e n n------=-=-+--+=-===1x x 205x +⎛⎜⎜⎜⎠d 7.998103-⨯=误差放大了5n 倍,算法稳定性很不好; 第二种算法:(从20——>1)*n n ne I I =-***111111111()()555555n n n n n n nn e I I I I I I e n n ---=-=-+--+=-=0111...()55nne e e ===误差在逐步缩小,算法趋近稳定,收敛。

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

(1) 在[0,1]上用二分法;function [t i]=erfenfa(a,b) f=@(x)( exp(x)+10*x-2) t=(a+b)./2; i=0;while abs(f(t))>0.001 if f(a)*f(t)<0 b=t;t=(a+b)/2; elseif f(b)*f(t)<0 a=t;t=(b+a)/2; end i=i+1; end 结果: t = 0.0906 i = 11(2) 取初值00=x ,并用迭代1021x k e x -=+;function x=diedai(x0) %x0初值 x=x0;for i=1:10000y=(2-exp(x))./10;x=y;y=(2-exp(x))./10; if abs(x-y)<5*10^(-4) disp('迭代次数'); 2*i break; end end结果:ans =6 x =0.090639135859584(3) 加速迭代的结果(艾特肯Aitken 加速方法);function [y m]=aitken(a) func=@(x)(( 2-exp(x))./10) x(1)=a; wucha=1;m=1;while wucha> 5*10^(-4) p(m+1)=func(x(m));q(m+1)=func(p(m+1));x(m+1)=q(m+1)-((q(m+1)-p(m+1))^2)./(q(m+1)-2*p(m+1)+x(m));wucha=abs(x(m+1)-x(m)); m=m+1; if m>1000 break; end endformat long y=x(m-1); m=m-1;运行结果y =0.090483741803596m =2(4) 取初值00 x ,并用牛顿迭代法;function x=newtondiedai(x0) x=x0; for i=1:100y=x-(exp(x)+10*x-2)./(exp(x)+10);x=y; y=x-(exp(x)+10*x-2)./(exp(x)+10); if abs(x-y)<0.0001 disp('迭代次数'); i break; end end 运行结果 迭代次数i = 2 x =0.0905(5) 分析绝对误差。

通过指令求得方程精确解的近似解:>> solve('exp(x)+10*x-2=0') ans =-lambertw(1/10*exp(1/5))+1/5 >> format long>> -lambertw(1/10*exp(1/5))+1/5 ans =0.09052510130725 小结:所以我们可以看到,在要求同一运算精度的情况下,采用二分法运算了11次,采用题设的迭代方法运算了6次,采用加速迭代法只运算了2次,采用牛顿迭代法需运算2次。

也就是说加速迭代速度都是超线性收敛的,而简单迭代法是线性收敛的。

而二分法收敛速度较慢,所以在工程上不经常使用。

3.钢水包使用次数多以后,钢包的容积增大,数据如下: x 2345678910111213141516y6.42 8.2 9.58 9.5 9.7 10 9.93 9.99 10.49 10.59 10.60 10.8 10.6 10.9 10.76试从中找出使用次数和容积之间的关系,计算均方差。

(注:增速减少,用何种模型) 解答:因为不知道其函数形式,可先plot 而后确定使用哪种模型比较合适。

函数图形程序:x=[2 3 4 5 6 7 8 9 10 11 12 13 14 15 16];y=[6.42 8.2 9.58 9.5 9.7 10 9.93 9.99 10.49 10.59 10.6 10.8 10.6 10.9 10.76]; plot(x,y ,‘b*’)与指数函数趋势类似(但是趋势不同,一个趋于递减,一个趋于递增,使用倒数),故拟合模型为: bxy ae=两边同时取对数:ln ln by ax=+用此模型进行数据拟合:1,ln n n y x ⎛⎫ ⎪⎝⎭x=[2 3 4 5 6 7 8 9 10 11 12 13 14 15 16];y=[6.42 8.2 9.58 9.5 9.7 10 9.93 9.99 10.49 10.59 10.6 10.8 10.6 10.9 10.76]; t=1./x;s=polyfit(t,log(y),1) s =-1.1107 2.4578即是: 2.457811.679a e == 1.1107b =- 最终拟合曲线为:1.110711.679xy e-=将此拟合曲线和源数据进行对比: 主程序:x=[2 3 4 5 6 7 8 9 10 11 12 13 14 15 16];y=[6.42 8.2 9.58 9.5 9.7 10 9.93 9.99 10.49 10.59 10.6 10.8 10.6 10.9 10.76]; plot(x,y,'ro') hold onlims1=[2,16];fplot('11.679*exp(-1.1107/x)',lims1) hold off均方差的求解x=[2:16];y=[6.42 8.2 9.58 9.5 9.7 10 9.93 9.99 10.49 10.59 10.60 10.8 10.6 10.9 10.76]; f(x)=11.679*exp(-1.1107./x); c=0;for i=1:15 a=y(i); b=x(i);c=c+(a-f(b))^2;endaverge=c/15averge = sqrt(averge) 0.24384.设⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛----------------=410100141010014101101410010141001014A ,⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛--=625250b ,b x =A 分析下列迭代法的收敛性,并求42110-+≤-kk x x 的近似解及相应的迭代次数。

1) JACOBI 迭代;2) GAUSS-SEIDEL 迭代; 3) SOR 迭代(95.0,95.1,334.1=ω)。

解答:(1) JACOBI 迭代; 定义函数。

function tx=jacobi(A,b,imax,x0,tol) %jacobi 迭代 %初始值x0,次数imax,精度tol del=10^-10;tx=[x0];n=length(x0); for i=1:ndg=A(i,i); if abs(dg)<deldisp('对角元太小'); return end endfor k=1:imax %jacobi 循环 for i=1:n sm=b(i); for j=1:n if j~=ism=sm-A(i,j)*x0(j); end endx(i)=sm/A(i,i); endtx=[tx;x];if norm(x-x0)<tol return elsex0=x;endend保存m文件。

主窗口输入以下程序段:>>A=[4 -1 0 -1 0 0;-1 4 -1 0 -1 0;0 -1 4 -1 0 -1;-1 0 -1 4 -1 0;0 -1 0 -1 4 -1;0 0 -1 0 -1 4]; b=[0 5 -2 5 -2 6];x0=[0 0 0 0 0 0];imax=100;tol=10^-4;tx=jacobi(A,b,imax,x0,tol);for j=1:size(tx,1)fprintf('%d %f %f %f %f %f %f\n',j,tx(j,1),tx(j,2),tx(j,3),tx(j,4),tx(j,5),tx(j,6));end运行结果:1 0.000000 0.000000 0.000000 0.000000 0.000000 0.0000002 0.000000 1.250000 -0.500000 1.250000 -0.500000 1.5000003 0.625000 1.000000 0.500000 1.000000 0.500000 1.2500004 0.500000 1.656250 0.312500 1.656250 0.312500 1.7500005 0.828125 1.531250 0.765625 1.531250 0.765625 1.6562506 0.765625 1.839844 0.679688 1.839844 0.679688 1.8828137 0.919922 1.781250 0.890625 1.781250 0.890625 1.8398448 0.890625 1.925293 0.850586 1.925293 0.850586 1.9453139 0.962646 1.897949 0.948975 1.897949 0.948975 1.92529310 0.948975 1.965149 0.930298 1.965149 0.930298 1.97448711 0.982574 1.952393 0.976196 1.952393 0.976196 1.96514912 0.976196 1.983742 0.967484 1.983742 0.967484 1.98809813 0.991871 1.977791 0.988895 1.977791 0.988895 1.98374214 0.988895 1.992415 0.984831 1.992415 0.984831 1.99444815 0.996208 1.989639 0.994820 1.989639 0.994820 1.99241516 0.994820 1.996462 0.992923 1.996462 0.992923 1.99741017 0.998231 1.995167 0.997583 1.995167 0.997583 1.99646218 0.997583 1.998349 0.996699 1.998349 0.996699 1.99879219 0.999175 1.997745 0.998873 1.997745 0.998873 1.99834920 0.998873 1.999230 0.998460 1.999230 0.998460 1.99943621 0.999615 1.998948 0.999474 1.998948 0.999474 1.99923022 0.999474 1.999641 0.999282 1.999641 0.999282 1.99973723 0.999820 1.999509 0.999755 1.999509 0.999755 1.99964124 0.999755 1.999832 0.999665 1.999832 0.999665 1.99987725 0.999916 1.999771 0.999886 1.999771 0.999886 1.99983226 0.999886 1.999922 0.999844 1.999922 0.999844 1.99994327 0.999961 1.999893 0.999947 1.999893 0.999947 1.99992228 0.999947 1.999964 0.999927 1.999964 0.999927 1.99997329 0.999982 1.999950 0.999975 1.999950 0.999975 1.999964(2)GAUSS-SEIDEL迭代;function tx=gseidel(A,b,imax,x0,tol) %gseidel迭代 %初始值x0,次数imax,精度toldel=10^-10;tx=[x0];n=length(x0);for i=1:ndg=A(i,i);if abs(dg)<deldisp('对角元太小');returnendendfor k=1:imax %G-S循环x=x0;for i=1:nsm=b(i);for j=1:nif j~=ism=sm-A(i,j)*x(j);endendx(i)=sm/A(i,i);endtx=[tx;x];if norm(x-x0)<tolreturnelsex0=x;endend主程序:A=[4 -1 0 -1 0 0;-1 4 -1 0 -1 0;0 -1 4 -1 0 -1;-1 0 -1 4 -1 0;0 -1 0 -1 4 -1;0 0 -1 0 -1 4];b=[0 5 -2 5 -2 6];x0=[0 0 0 0 0 0];imax=100;tol=10^-4;tx=gseidel(A,b,imax,x0,tol);for j=1:size(tx,1)fprintf('%d %f %f %f %f %f %f\n',j,tx(j,1),tx(j,2),tx(j,3),tx(j,4),tx(j,5 ),tx(j,6))endω)。

相关文档
最新文档