《计算方法》教学辅导书.doc

  1. 1、本文档共42页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

linet + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档