Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
版主
注册日期: 2008-07-03
年龄: 92
帖子: 245
声望力: 22 ![]() |
![]()
下面这张图片,是浙江某名牌大学发布的“《Mathcad 2001及概率统计应用》电子教案”中“实验27”一篇中的用欧拉公式计算π值的程序。无独有偶,在本论坛中以下两篇资料也都是在“实验27”一篇中,引用了这个程序。
一、mathcad 实验36例 二、[资料]mathcad学习资料汇编 程序的图片如下(纯黑色的): 你看看,在最后一项的值小于亿分之一之际,求出的π值竟然是3.9835919006706,用这个程序计算怎不冤枉先贤呢?其实这个程序编制有错,下面我们来分析它: 一、程序一开始就在 while 循环之外事先给 s 赋值为0,给 i 赋值为 1 ,于是过渡变量 term 也就相应地在循环外事先被赋以值 1 (1/i^2=1)了。 进入循环后,s 被首先赋值 s+term=1 所以无穷级数的第一项已经赋值为 1 了。下一行再给 term 赋值为 1/i^2=1 这个值已经写定之后,才在第三行将 i 加 1 。第二次循环又给 s 的第二项写入 1 。然后在下一循环中才正常写入级数的各项。于是这个程序体现的是下面的无穷级数 1+1+1/2+1/4+1/9+1/16+1/25.............. 而不是1+1/2+1/4+1/9+1/16+1/25.............. 程序纠错,将循环中的第二行与第三行位置对调,使过渡变量 term 在 i 加了 1 之后再赋值,避免给他重复赋值。 二、程序中循环的限制条件使用的是 限制的是无穷级数最后一项的取值,这个限制是有效的,但不直观,使用者如想增多项数,得先算出(1/i^2) 的值,否则,就只好随便指定一个很小的数字“以管窥豹”了。 程序改进,该程序中的序数变量 i 本就等同于无穷级数的项数,所以改写循环条件为 i≤1000000 ,直接限制无穷级数的项数,以改善程序的可读性。 附上保持mathcad14原状的“纠错后的程序”图片。 请大家对照本文的相应程序,细细研读。最好在 mathcad 14 的工作页界面内逐行实验,对提高我们编写程序的能力,是很有帮助的。 |
![]() |
![]() |
![]() |
#2 |
初级会员
注册日期: 2009-01-09
年龄: 40
帖子: 15
声望力: 17 ![]() |
![]()
good example in the details of programming.
|
![]() |
![]() |
![]() |
#3 |
版主
注册日期: 2008-07-03
年龄: 92
帖子: 245
声望力: 22 ![]() |
![]() |
![]() |
![]() |
![]() |
|
|
![]() |
||||
主题 | 主题作者 | 版面 | 回复 | 最后发表 |
[求助]MATLAB中积分上下限带有参数的二重积分如何做? | juliannewton | MATLAB论坛 | 3 | 2009-03-22 00:38 |
[求助]MATLAB中的非线性限制的优化问题 | yx2001001 | MATLAB论坛 | 1 | 2009-03-06 16:40 |
急问,如何采用所给数据进行曲面拟合? | ormosia | MATLAB论坛 | 3 | 2008-10-21 10:44 |
[求助]求GM(1,N)的代码 | hapenl | MATLAB论坛 | 0 | 2008-09-20 06:10 |
仪表信息图像采集处理研究 | liuna2008 | MATLAB论坛 | 0 | 2008-04-12 18:53 |