中华农历论坛知识讨论区历法知识 → [推荐]用迭代法求整次方根汉编源程序


  共有13628人关注过本帖树形打印

主题:[推荐]用迭代法求整次方根汉编源程序

帅哥哟,离线,有人找我吗?
秦汉昌
  1楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:业余侠客 帖子:372 积分:1447 威望:0 精华:0 注册:2008/12/20 18:10:00
[推荐]用迭代法求整次方根汉编源程序  发帖心情 Post By:2009/10/31 2:44:00

[推荐]整次方根★根据空谷白蛇所编代码修改而成[苏子琼汉语编程论坛]
http://bbs.suziqiong.cn/bbs/dispbbs.asp?boardid=49&id=293&page=1&star=1

 

【自定义词★根据空谷白蛇所编代码修改而成
 

编 精确度  ( --- <小数位长度的浮点数> )
   1.0 小数位长度  0 循环 10.0  /  回环 。


编 整次方    (  底数 指数 --- 幂 )
 ↑↓ ♂ 属性值 0=
  就    数>实  
  然后   ↑↓  双♂  1.0  ↑↓  绝对值  1+   1 
       ?循环   ∽   *   
        回环   ↑↓♀   ↑↓  0<
  就    1.0  ↑↓ /   ↑↓♀
  否则  ↑↓♀
  然后
  。
       

编 整次方根   (  a n --- 根x 是否存在两根的标志  )                            \  已知a,整数n,用公式①迭代法求x^n=a的立方根x
↑↓  ♂  属性值 0= 就 数>实 然后  ↑↓
 ∽ ∽                                                  \  这两个符号是把提供的两个数 留底 以便乘方验证使用。不做验证则取消此行
 双♂ 2 求余数 0= ↑↓ 0<  与
 就    回车 显" 无解的参数,负数没有偶次方根"  全复位
 否则  ∽  0.0 =
 就   双♀  0.0   
 否则  绝对值    ♂ 0 =                                    \  0 1 2 三种情况要考虑,先0
 就    ♀ ♀ 1.0                                       
 否则  ♂ 1 =                                            \  0 1 2 三种情况要考虑,再1
 就   ♀       
 否则 ♂ 2 =                                             \  0 1 2 三种情况要考虑,后2
 就   ♀  ♂ 0.0 <
      就 全复位
      然后 1.0                 
      环首 ♂ 2 § ∽ / + 2.0 / ♂ ∵ - 绝对值 .0001 <
      就出来 ↑↓♀
 否则 ♂ 1 -                                          ( 数摞变为:a n a n n-1 )
      1.0                                            ( 数摞变为:a n a n n-1 x0 )          \   迭代初值为x0=1.0
      环首   ♂ 2 § 1 循环 ∽ * 回环                    ( 数摞变为:a n a n n-1 x0 x0^[m-1]  )
            ∽ ∽ *                                   ( 数摞变为:a n a n n-1 x0 x0^[m-1] x0^n )
            3 § ♂ 属性值 0= 就 数>实 然后 * 5 § +       ( 数摞变为:a n a n n-1 x0 x0^[m-1] [n-1]*Xk^n+a )
           ↑↓ 4 § ♂ 属性值 0= 就 数>实 然后 * /        ( 数摞变为:a n a n n-1 x0 x1  )     \  x1=[〔n-1)*Xk^n+a]/[n*x0^(m-1)]
           ↑↓ ∽ - 绝对值 精确度 <                     ( 数摞变为:a n a n n-1 x1 真或假 )     \ 使用0.0 = 也可以
     就出来 ↑↓♀ ↑↓♀ ↑↓♀                          ( 数摞变为:a n  x1 )
    
 然后
 然后
 然后
 然后
 然后  ∽  0<                                          ( 数摞变为:a n a n n-1 x1 真或假 )
      就    1.0  ↑↓ /                                ( 数摞变为:a n  x1或1/x1 )
      然后  ∴  ∽ 3 § ↑↓∽   整次方  ↑↓  0=          ( 数摞变为:n  x1或1/x1 a a1 真或假 )   \  a1为验证幂
      就   ♀  ↑↓♀  0 
      否则  - 绝对值 精确度 > 
      然后                                            ( 数摞变为:n  x1或1/x1  真或假 )
      就  显" 程序错误,请调试好再应用" 
      否则  ↑↓ 2 求余数 0=
      然后                                             ( 数摞变为:x1或1/x1 真或假 )
  。

编 有负根就求负根
   就   ♂ 求补  然后
   。

((       
     测试如下:
     8 位小数
     摞初始  64  3 整次方根 看数摞
     摞初始 -64  3 整次方根 看数摞
     摞初始  64 -3 整次方根 看数摞
     摞初始 -64 -3 整次方根 看数摞
     摞初始  64  4 整次方根 看数摞
     摞初始  64  4 整次方根 有负根就求负根 看数摞 
     摞初始 -64  4 整次方根 看数摞   ))

 
 

 

 【功能介绍】
     本词可以求整次方根,考虑了正数、负数、0的正负次方根的情况
     偶次方根有正负两解,存在偶次方根的情况,在其算术根后返回真标志
     用户只需将算术根“求补”可得负根
     奇次方根只有一解,存在奇次方根的情况,在其算术根后返回假标志
     
 

【使用详解】
 格式: <开方数> <开方次数>  整次方根 

 参数:<开方数> <开方次数>

 返回:<根>   即能补开方的数的一个根

        <标志>  即是否存在两根的标志 

 

【应用举例】

    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月30日修改

 

 

\  /////////////★秦汉昌★2009.10.31★


[此贴子已经被作者于2009-10-31 22:33:31编辑过]

支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
秦汉昌
  2楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:业余侠客 帖子:372 积分:1447 威望:0 精华:0 注册:2008/12/20 18:10:00
  发帖心情 Post By: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编辑过]


支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
秦汉昌
  3楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:业余侠客 帖子:372 积分:1447 威望:0 精华:0 注册:2008/12/20 18:10:00
  发帖心情 Post By: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次,秦九韶解这些问题的算法整齐划一,步骤分明,堪称是中国古代数学算法化、机械化的典范。


支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
秦汉昌
  4楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:业余侠客 帖子:372 积分:1447 威望:0 精华:0 注册:2008/12/20 18:10:00
  发帖心情 Post By:2009/10/31 13:27:00

其实迭代法开方

是将秦九韶正负开方术方程的简化形式

 

正负开方术,适合人工计算

 

迭代法才适合编写程序

 

这是我的看法,望高手指点


支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
xjw01
  5楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:蝙蝠侠 帖子:866 积分:3804 威望:3 精华:20 注册:2008/3/20 22:14:00
  发帖心情 Post By:2009/10/31 20:24:00

古代开法,一般是逐位进行的,这样好在算盘上进行运算。所以在进行几十位以上的运算时,效率很底。

现代的迭代开方,看作古代的简化形式,那主要还是形式上的相似。其实,现代迭代还会考虑收敛速度等问题。

比如,计算根号2,计算到小数点以下10万位,用古法可能会非常麻烦。

 

 

楼主如果对数值计算有兴趣,可以试试计算圆周率。计算这些东西,可以提高数值编程能力。12年前,我学习C语言,手写了一个圆周率程序,但没有调试,于是,我向老爸借钱买了一部电脑计算圆周率,计算到300位。大约在04年左右,我又花了几天时间,利用几何算术平均法,计算圆周率到1600万位。我学编程,是从数值计算开始的。看来,楼主也要从数值计算入手了。


支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
秦汉昌
  6楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:业余侠客 帖子:372 积分:1447 威望:0 精华:0 注册:2008/12/20 18:10:00
  发帖心情 Post By:2009/10/31 21:50:00

正在迷茫中,谢谢指点迷津,真是雪中送炭

 

您的学习经历让我受到鼓舞

 

我一定要像您那样持之以恒地坚持学下去

 

在这个计算机知识里,我就对算法法有兴趣

 

我最不喜欢去设计个性化窗口什么的

 

 


支持(0中立(0反对(0单帖管理 | 引用 | 回复 回到顶部

返回版面帖子列表

[推荐]用迭代法求整次方根汉编源程序








签名