Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 工程数学软件 > MathCAD论坛
MathCAD论坛 MathCad是由MathSoft公司推出的一种交互式数值计算系统
 
 
主题工具 显示模式
旧 2009-03-01, 11:50   #1
zpz11111
版主
 
注册日期: 2008-07-03
年龄: 92
帖子: 245
声望力: 22
zpz11111 是一个将要出名的人
默认 [讨论]关于欧拉公式编程的商榷

下面这张图片,是浙江某名牌大学发布的“《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 的工作页界面内逐行实验,对提高我们编写程序的能力,是很有帮助的。
上传的图像
文件类型: jpg img0048_14782765.jpg (14.7 KB, 23 次查看)
文件类型: jpg 正确.jpg (35.5 KB, 21 次查看)
zpz11111 当前离线   回复时引用此帖
 


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码


相似的主题
主题 主题作者 版面 回复 最后发表
[求助]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


所有时间均为北京时间。现在的时间是 20:52


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.