- 1、本文档共42页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PAGE
PAGE 12
《计算方法》习题课
软件学院 韩臻
email: HYPERLINK "mailto:zhan@bjtu.edu.cn" zhan@bjtu.edu.cn
tel: (010O)
(2006年12月)
范例1:
一、题目:用公式求方程 x2 – 56x + 1 = 0 的两个根,问要使它们具有四位有效数字,?= 至少要取几位有效数字?如果利用韦达定理,?又该取多少位有效数字呢?
二、解答:
用方法(1): x? = ( - b ? ?)/(2a)
求解4位有效数字的x+ ,只需2位有效数字的 ? 即可;
但求解4位有效数字的x - ,需要7位有效数字的 ? 。
用方法(2): x+= ( - b + ?)/(2a) , x -= c/(a x+)
求解4位有效数字的x+ 和x- 都只需2位有效数字的 ? 即可。
三、证明:
计算可得 ?=sqrt(562-4)=55.964274319……
设 ?* 是 ? 的具有k位有效数字的近似值,则 ,一般地 bk 是不大于5、不小于0.05的正数,在这里bk<1。例如:b1=0.7; b2=0.06; b4=0.8 。
对于方法(1)
记相应的近似解为x*+ 和x*- ,有:
所以,一般地,x*+ 是x+ 的有k+1位有效数字的近似值。特别地,当k=2时,
所以,这时即有4位有效数字。
所以,一般地,x*- 是x- 的有k-3位有效数字的近似值。特别地,当k=7时有4位有效数字。
对于方法(2)
x*+ 的分析同上。对于x*- 有:
|x*- - x -|/| x*+| = |c/(a x*+) - c/(a x+)|/| c/(a x*+)|=| x*+ - x+|/|x+|
所以,这时x*- 的精度与x*+一样,即一般地它有k+1位有效数字。特别地,当k=2时,有4位有效数字。
四、试验:
设计
我们用程序实现进行试验。设计以下试验的步骤:
求出有足够精度的 ? ,例如有十位有效数字,用变量Delta表示;
用二分法求出有足够精度的x+ 和x-,分别用X1和X2表示;
k=1;
取 ? 的 k 位有效数字近似值,用delta表示;
用方法(1)计算x+ 和x-的近似值,分别用x1和x2表示,并计算它们的相对误差,并输出;
用方法(2)计算x+ 和x-的近似值,分别用x1和x2表示,并计算它们的相对误差,并输出;
若已得出试验结果,结束;否则 k=k+1, 并转第[3]步。
程序
用Matlab5.0编程:
(1)主 程 序:p9_7.m
% 韩臻,2003年3月25日
% 求方程 a*x^2+b*x+c=0 的两个根,要求具有 n 位有效数字,
% 其中,a=1, b=-56, c=1;
% 问:
% (1) 用 x1=(-b+Delta)/(2*a),x2=(-b-Delta)/(2*a),
% 其中, Delta=sqrt(b*b-4*a*c)
% 则 Delta 应取几位有效数字?
% (2) 若用韦达定理:x1=(-b-sign(b)*Delta)/(2*a), x2=c/(a*x1),
% 则 Delta 又应取几位有效数字?
%% 给定系数值:
a=1;b=-56;c=1;
%% 计算 Delta:
Delta=b*b-4*a*c;
if Delta<0
disp('没有实根.');
return;
else
Delta=sqrt(Delta); %%(具有16位有效数字的近似解):
%% 用二分法计算根X1和X2(具有16位有效数字的近似解):
X1=bi_split(50,60);
X2=bi_split(0,1);
%% 输出具有10位有效数字的Delta、x1和x2:
fprintf('\n输出具有10位有效数字的Delta、x1和x2:\n');
fprintf('Delta=%17.10e\n',Delta);
fprintf('x1=%17.10e ',X1);
fprintf('x2=%17.10e\n\n',X2);
%% 取 Delta 的k位有效数字近似值计算:
for k=1:10
%% 输入Delta 的k位有效数字近似值:
fprintf('输入Delta 的%d位有效数字近似值 ',k);
delta=input('delta=');
fpr
文档评论(0)