找回密码
 欢迎注册
查看: 21688|回复: 3

[求助] mathematica中怎样写类似欧几里得算法

[复制链接]
发表于 2016-11-19 09:11:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
本帖最后由 wsc810 于 2016-11-19 10:04 编辑

这是手写步骤
p=86021;q=27720

a0=Round[86021/27720]=3.10321=3
86021 - 3*27720=2861

a1=Round[27720/2861]=9.68892=10
27720-10*2861=- 890

a2=Round[2861/-890]= -3.21461=-3
2861-(-3)(-890)=191

a3=Round[-890/191]= -4.65969=-5
-890-(-5)(191)=65

a4=Round[191/65]=2.93846=3
191-65*3=-4

a5=Round[65/-4]=-16.25=-16
65-(-16)*(-4)=1

a6=Round[-4,1]=-4
-4-(-4)*1=0
结果求出表  a
a={3, 10, -3, -5, 3, -16, -4}

反推FromContinuedFraction[ {3, 10, -3, -5, 3, -16, -4}]=86021/27720

可见结果的正确性

还有一个不明白的问题
Round[{0.5, 1.5, 2.5, 3.5, 4.5}]={0, 2, 2, 4, 4}
Round[{-0.5, -1.5, -2.5, -3.5, -4.5}]={0, -2, -2, -4, -4}
为何 mathematica中,当取中点数的时候,Round函数返回最接近的偶数
这是人为规定还是有其他规则
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2016-11-19 13:26:55 | 显示全部楼层
“四舍六入五成双”,这里“四”是指≤4 时舍去,"六"是指≥6时进位,"五"指的是根据数字5后面的数字来定,当5后还有数时,舍5入1;当5后无有效数字时,分两种情况对待:
a) 5前为奇数,舍5入1;
b) 5前为偶数,舍5不进(0是最小的偶数).

例如(保留整数):9.4~9,9.6~10,3.50=4,4.51~5,2.50~2

四舍五入本身是一种非常粗糙的舍入规则,因为只有在1~9时才会产生舍入——奇数个尾数,自然,“5”的舍入只能按照1/2的概率来论,这样才能保证公正性。如果按照四舍五入规则,在大量数据情况下结果偏向大数,从而误差积累导致产生系统误差。“四舍六入五成双”便是符合上述1/2概率条件,使结果受到舍入误差的影响降到最低,这是一种最精确的科学计数法规则。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2016-11-21 16:03:20 | 显示全部楼层
  1. division[m0_,n0_]:=
  2. Module[{list={m0,n0}},
  3. While[Last@list!=0,AppendTo[list,list[[-2]]-Round[list[[-2]],Last@list]]];
  4. list
  5. ]
复制代码

绝对值最小剩余可以写成  a-Round[a, m]
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2016-12-9 19:12:15 | 显示全部楼层
hujunhua 发表于 2016-11-21 16:03
绝对值最小剩余可以写成  a-Round[a, m]

利用该函数也可以求最大公约数,并且有更高的迭代效率
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-11-25 11:21 , Processed in 0.024508 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表