数值分析也称计算方法

更新时间:2023-10-16 17:26:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

高等教育出版社 教育电子音像出版社 作者:任玉杰

第一章 误差与范数

第一章 误差与范数

数值分析也称计算方法,它不仅是一种研究并解决数学问题的数值近似解的方法,而且是在计算机上使用的解数学问题的方法.它的计算对象是那些在理论上有解,而无法用手工计算的数学问题.

1.1 误差的来源

在运用计算方法解决实际问题的过程中,会出现各种各样的误差,必须注重误差分析.否则,一种合理的计算也可能得出错误的结果.

例1.1.1 用差商f(a)?'f(a?h)?f(a)h求f(x)?lnx在x?3处导数的近似值.

(1)取h?0.1和h?0.0001,用手工计算,取五位数字计算;

(2)取h?0.1 ,h?0.0001,h=0.000 000 000 000 001和h=0.000 000 000 000 000 1分别用MATLAB软件计算,取十五位数字计算;

(3)比较以上的运算结果,说明是否h越小则计算结果越准确. 解 根据导数定义,可以用差商求f(x)?lnx在x?3处导数的近似值

f(3)?'f(3?h)?f(3)h?ln(3?h)?ln3h.

从理论上讲,h越小则计算结果越准确.如果用手工计算,取五位数字计算.当

h?0.1时,得

f(3)?'1.1314?1.09860.1?0.328 0,

与导数的精确值f'(3)?h?0.0001时,得

13?0.3333?比较,这项计算还是可取的.但是当

f(3)?'1.0986?1.09860.0001?0,

算出的结果反而毫无价值.

如果应用MATLAB软件计算,取十五位数字计算,结果就完全不同了.在MATLAB工作窗口输入下面程序

>>a=3;h=0.1;y=log(a+h)-log(a);yx=y/h

运行后得

yx = 0.32789822822991

将此程序中h改为0.000 1,运行后得

yx = 0.33332777790385

后者比前者好.再取h = 0.000 000 000 000 001,运行后得

yx = 0.44408920985006

不如前者好.取h = 0.000 000 000 000 000 1,运行后得

yx = 0

算出的结果反而毫无价值.

1

高等教育出版社 教育电子音像出版社 作者:任玉杰

第一章 误差与范数 例1.1.2 分别求方程组AX?b在下列情况时的解,其中A????1?2??2??(1)b?????;(2)b????. 22.01?????1???. 1.01?1解 (1) 首先将方程组AX?b化为同解方程X?A?1b,然后在MATLAB工作窗口

输入程序

>> b=[2,2]';A=[1,1;1,1.01]; X=A\\b 运行后输出当b?????时,AX?b的解为X?????; 20??????(2)同理可得,当b??. ??时,AX?b的解为X?????2.01??1?

例1.1.3 计算e的近似值. 解 泰勒级数 234n?2??2??2??1?e?1?x?取x?1,得

xx2!?xxx?????? (???x??), 3! 4!n! e?1?1?1?1?1???1??. (1.2)

2!3! 4!n! 这是一个无限过程,计算机无法求到精确值.只能在(1.2)取有限项时计算,再估计

误差.如果取有限项

sn(1)?1?1?12!?11 ????3! 4!n! 1作为e的值必然会有误差,根据泰勒余项定理可知其截断误差为

e?sn(1)?e?(n?1)! (0???1).

如果取(1.2)的前九项,输入程序

>> n=8; s=1;S =1; for

k=1:n s=s*k; S=S+1/s, end s, S,

R=3/(s*(n+1)) 或

>>S1=1+1+1/2+1/(1*2*3)+1/(1*2*3*4)+1/(1*2*3*4*5)+1/(1*2*3*4*5*6)+1/(1*2*

3*4*5*6*7)+1/(1*2*3*4*5*6*7*8),

R1=3/(1*2*3*4*5*6*7*8*9)

运行后结果

S = R =

2.71827876984127 8.267195767195768e-006 因为截断误差为

e?s8(1)?3-6??8.267196?10(8?1)! 9! 12!?1e?(0???1),

所以e的近似值e ?s8(1)?1?1?11111??????2.718 28. 3! 4!5!6! 7!8! 2

高等教育出版社 教育电子音像出版社 作者:任玉杰

第一章 误差与范数 1.2 误差和有效数字

例1.2.1 取2.71828作为e的四舍五入近似值时,求其绝对误差和相对误差. 解 在MATLAB工作窗口输入程序

>>juewu=exp(1)-2.71828

运行后输出结果为

juewu = 1.828 459 045 505 326e-006

?例1.2.2 计算?20sinxxsinxx?1?dx 的近似值,并确定其绝对误差和相对误差. 的原函数不是初等函数,故用泰勒级数求之.

x2解 因为被积函数

sinxx3!????? (???x??), (1.5) 5 !7!9 !x2x4x6x8这是一个无限过程,计算机无法求到精确值.可用(1.5)的前四项1?替被积函数

?3!?代?5 !7!x4x6sinxx2,得

?y??sinxx0dx??20(1?x23!?x?. )dx=??2=y?2?2?23?3!5?5 !7?7!5 !7!x46(?)3(?)5(?)7根据泰勒余项定理和交错级数收敛性的判别定理,得到绝对误差

(R??y?y??2= WU,

9?9!)9在MATLAB命令窗口输入计算程序如下:

syms x

f=1-x^2/(1*2*3)+x^4/(1*2*3*4*5)-x^6/(1*2*3*4*5*6*7) y=int(f,x,0,pi/2),y1=double(y)

y11=pi/2-(pi/2)^3/(3*3*2)+(pi/2)^5/(5*5*4*3*2)-(pi/2)^7/(7*7*6*5*4*3*2) infd=double(inf) ,inf=int(sin(x)/x,x,0,pi/2)

WU =(pi/2)^9/(9*9*8*7*6*5*4*3*2), R =infd-y11

?=1.370 744 664 189 38, 因为运行后输出结果为: y?1.370 762 168 154 49,yR?1.750 396 510 491 47e-005, WU= 1.782 679 830 970 664e-005?10??4?的绝. 所以,y对误差为??10?4,故y??20sinxx?的相对误差为 dx?1.370 7.y?r???y?10?41.370 7<0.007 3%.

1.3 误差估计的基本方法

下面的例子揭示了初始误差的稳定性传播和不稳定性传播.

例1.3.4 设计三种算法求方程2x?x?15?0在(2,3)的一个正根x的近似值,并研究每种算法的误差传播情况.

解 为解已知方程,我们可以设计如下三种算法,然后将计算结果与此方程的精确

3

2*高等教育出版社 教育电子音像出版社 作者:任玉杰

第一章 误差与范数 解x*?2.5比较,观察误差的传播. 算法1 将已知方程化为同解方程x?15?2x2.取初值x0?2,按迭代公式

2 xk?1?15?2xk

依次计算x1,x2,?,xn,?,结果列入表1–3中.

算法2 将已知方程化为同解方程x? xk?1?152xk?1152x?1.取初值x0?2,按迭代公式

依次计算x1,x2,?,xn,?,结果列入表1–3中.

算法3 将已知方程化为同解方程x?x?式为

xk?1?xk?2xk22x?x?154x?12.取初值x0?2,按迭代公

?xk?154xk?1

依次计算x1,x2,?,xn,?,结果列入表1–3中.

我们为这种三算法的计算编写两套MATLAB程序如下:

(1)MATLAB主程序

function [k,juecha,xiangcha,xk]= liti112(x0,x1,limax) % 输入的量--x0是初值, limax是迭代次数和精确值x; % 输出的量--每次迭代次数k和迭代值xk,

% --每次迭代的绝对误差juecha和相对误差xiangcha, x(1)=x0; for i=1:limax

x(i+1)=fl(x(i));%程序中调用的fl.m juecha = abs(x(i)-x1);

xiangcha = juecha /( abs(x(i))+eps);

xk=x(i);k=i-1;[(i-1),juecha,xiangcha,xk] end

(2)MATLAB调用函数程序及其计算结果 ①算法2的MATLAB调用函数程序

function y1=fl(x)

y1=15/(2*x+1);

② 将MATLAB主程序和调用函数程序分别命名liti112.m和fl.m,分别保存为M文件,然后在MATLAB工作窗口输入命令

>> [k,juecha,xiangcha,xk]= liti112(2,2.5,100) ③运行后输出计算结果列入表1–3和表 1-4中.

④将算法2的MATLAB调用函数程序的函数分别用y1=15-2*x^2和y1=x-(2*x^2+x-15)/(4*x+1)代替,得到算法1和算法3的调用函数程序,将其保存,运行后将三种算法的前8个迭代值x1,x2,?,x8列在一起(见表 1-3),进行比较.将三种算法的x1,x2,?,x8对应的绝对误差和相对误差的值列在一起(见表 1—4),进行比较.

表 1-3 例1.3.4中三种算法的计算结果 算 法 迭代次数 0 2 2.000 000 00 2.000 000 00 算法1的迭代结果 算法2的迭代结果 算法3的迭代结果 4

高等教育出版社 教育电子音像出版社 作者:任玉杰

第一章 误差与范数 1 2 3 4 5 6 7 7 -83 -13 763 -378 840 323 -2.870 4?1017 -1.647 8?1035 3.000 000 00 2.142 857 14 2.837 837 84 2.246 963 56 2.246 963 56 2.321 774 84 2.555 555 56 2.500 550 06 2.500 000 06 2.500 000 00 2.500 000 00 2.500 000 00 2.657 901 65 2.500 000 00 -5.430 7?1070 ? ? ? ? 99 -Inf 2.500 000 01 2.500 000 00 由表 1-3和表 1-4可以看出,算法1的初始绝对误差和相对误差分别是4.500 000 00和0.642 857 14,它们是三种算法中最大者,由算法1得到的迭代序列?xk?对应的绝对误差是不稳定的,且当n??时,按指数无界增长,相对误差趋近于不定值,xk???,即?xk?不收敛;算法2的初始绝对误差和相对误差分别是0.500 000 00和0.166 666 67,它们是三种算法中居于中间,由算法2得到的迭代序列?xk?对应的绝对误差和相对误差是稳定的,且当n??时,按指数缓慢递减且趋近于0,?xk?缓慢地摆动式收敛于精确解2.5(参见算法2的运行结果);算法3的初始绝对误差和相对误差分别是0.055 555 60和0.021 739 13,它们是三种算法中最小者,由算法3得到的迭代序列?xk?对应的绝对误差和相对误差是稳定的,且当n??时,按指数快速递减且趋近于0, ?xk?快速地递减且收敛于精确解2.5.

表 1-4 例1.3.4中三种算法计算结果的误差 算法 迭 代 次 数 算法1的误差 绝对误差 相对误差 算法2的误差 绝对误差 相对误差 算法3的误差 绝对误差 相对误差 0 1 2 3 4 5 6 7 ? 99 0.500 000 00 4.500 000 00 85.500 000 00 13 765.500 00 378 840 326 2.870 399 81?101.647 839 01?105.430 746 80?10170.250 000 00 0.500 000 00 0.250 000 00 0.500 000 00 0.642 857 14 0.500 000 00 0.166 666 67 0.055 555 60 1.030 120 48 0.357 142 86 0.1666 666 70 0.000 550 10 0.000 100 02 0.337 837 84 0.119 047 62 0.000 000 06 0.250 000 00 0.021 739 13 0.000 219 97 0.000 000 02 1.000 000 01 0.253 036 44 0.112 612 62 0.000 000 00 0.000 000 00 1 0.230 287 04 0.084 345 48 0 0 1 1 0.178 225 16 0.076 762 47 0.157 901 65 0.059 408 39 0 0 0 0 3570? Inf ? NaN ? ? ? 0 ? 0 0.000 000 01 0.000 000 00 1.4 数值计算中应注意的问题

从例1.3.4可以看出,一个问题的解决,往往要经过多次运算.每一步运算都可能产生误差,在反复多次计算的过程中,必然产生误差的传播和积累.显然,当误差积累偏大时,会使计算结果失真.因此,在每一步计算中,都应该防止产生误差升级的现象.

例1.4.1 求数x?7?(1?8解 (1)直接用MATLAB命令

15?19的近似值. ?1) 5

本文来源:https://www.bwwdw.com/article/doff.html

Top