以文本方式查看主题 - 中华农历论坛 (http://bbs.nongli.net/index.asp) -- 历法知识 (http://bbs.nongli.net/list.asp?boardid=2) ---- [推荐]用迭代法求整次方根汉编源程序 (http://bbs.nongli.net/dispbbs.asp?boardid=2&id=22469) |
-- 作者:秦汉昌 -- 发布时间:2009/10/31 2:44:00 -- [推荐]用迭代法求整次方根汉编源程序 [推荐]整次方根★根据空谷白蛇所编代码修改而成[苏子琼汉语编程论坛]
【自定义词★根据空谷白蛇所编代码修改而成】 编 精确度 ( --- <小数位长度的浮点数> )
编 整次方根 ( a n --- 根x 是否存在两根的标志 ) \\ 已知a,整数n,用公式①迭代法求x^n=a的立方根x 编 有负根就求负根 ((
【功能介绍】 【使用详解】 参数:<开方数> <开方次数> 返回:<根> 即能补开方的数的一个根 <标志> 即是否存在两根的标志
【应用举例】 8 位小数 ★ 【注意事项】 必须注意,负数不能开偶次方,如果输入了这样的非法参数,程序会报错(无解的参数,负数没有偶次方根)。
【版权声明】
\\ /////////////★秦汉昌★2009.10.31★ [此贴子已经被作者于2009-10-31 22:33:31编辑过]
|
-- 作者:秦汉昌 -- 发布时间:2009/10/31 13:16:00 -- 8 位小数 ★ 摞初始 64 3 整次方根 看数摞 [2] 4.00000000 0 ★.. 摞初始 -64 3 整次方根 看数摞 [2] -4.00000000 0 ★.. 摞初始 64 -3 整次方根 看数摞 [2] 0.25000000 0 ★.. 摞初始 -64 -3 整次方根 看数摞 [2] -0.25000000 0 ★.. 摞初始 64 4 整次方根 看数摞 [2] 2.82842712 -1 ★.. 摞初始 64 4 整次方根 有负根就求负根 看数摞 [2] 2.82842712 -2.82842712 ★.. 摞初始 -64 4 整次方根 看数摞 无解的参数,负数没有偶次方根 [此贴子已经被作者于2009-10-31 22:08:50编辑过] |
-- 作者:秦汉昌 -- 发布时间:2009/10/31 13:24:00 -- 《九章算术》卷4中有“开方术”和“开立方术”。《九章算术》中的这些算法后来逐步推广到开更高次方的情形,并且在宋元时代发展为一般高次多项式方程的数值求解。秦九韶是这方面的集大成者,他在《数书九章》(1247年)一书中给出了高次多项式方程数值解的完整算法,即他所称的“正负开方术”。
用现代符号表达,秦九韶“正负开方术”的思路如下:对任意给定的方程
f(x)=a[0]x^n+a[1]x^(n-1)+……+a[n-2]x^2+a[n-1]x+a[n]=0 (1)
其中a[0]≠0,a[n]<0,要求(1)式的一个正根。秦九韶先估计根的最高位数字,连同其位数一起称为“首商”,记作c,则根x=c+h,代入(1)得
f(c+h)=a[0](c+h)^n+a[1](c+h)^(n-1)+……+a[n-1](c+h)+a[n]=0
按h的幂次合并同类项即得到关于h的方程:
f(h)=a[0]h^n+a[1]h^(n-1)+……+a[n-1]h+a[n]=0 (2)
(注:这里(2)和(1)式子里的a[i],一般是不一样的。)
于是又可估计满足新方程(2)的根的最高位数字。如此进行下去,若得到某个新方程的常数项为0,则求得的根是有理数;否则上述过程可继续下去,按所需精度求得根的近似值。
如果从原方程(1)的系数a[0],a[1],…,a[n]及估值c求出新方程(2)的系数a[0],a[1],…,a[n]的算法是需要反复迭代使用的,秦九韶给出了一个规格化的程序,我们可称之为“秦九韶程序”,他在《数书九章》中用这一算法去解决各种可以归结为代数方程的实际问题,其中涉及的方程最高次数达到10次,秦九韶解这些问题的算法整齐划一,步骤分明,堪称是中国古代数学算法化、机械化的典范。 |
-- 作者:秦汉昌 -- 发布时间:2009/10/31 13:27:00 -- 其实迭代法开方 是将秦九韶正负开方术方程的简化形式
正负开方术,适合人工计算
迭代法才适合编写程序
这是我的看法,望高手指点 |
-- 作者:xjw01 -- 发布时间:2009/10/31 20:24:00 -- 古代开法,一般是逐位进行的,这样好在算盘上进行运算。所以在进行几十位以上的运算时,效率很底。 现代的迭代开方,看作古代的简化形式,那主要还是形式上的相似。其实,现代迭代还会考虑收敛速度等问题。 比如,计算根号2,计算到小数点以下10万位,用古法可能会非常麻烦。
楼主如果对数值计算有兴趣,可以试试计算圆周率。计算这些东西,可以提高数值编程能力。12年前,我学习C语言,手写了一个圆周率程序,但没有调试,于是,我向老爸借钱买了一部电脑计算圆周率,计算到300位。大约在04年左右,我又花了几天时间,利用几何算术平均法,计算圆周率到1600万位。我学编程,是从数值计算开始的。看来,楼主也要从数值计算入手了。 |
-- 作者:秦汉昌 -- 发布时间:2009/10/31 21:50:00 -- 正在迷茫中,谢谢指点迷津,真是雪中送炭
您的学习经历让我受到鼓舞
我一定要像您那样持之以恒地坚持学下去
在这个计算机知识里,我就对算法法有兴趣
我最不喜欢去设计个性化窗口什么的
|