`
秦朝古月
  • 浏览: 223772 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

读《The Ruby Way》之数值计算

    博客分类:
  • Ruby
阅读更多
世界杯至今为止的比赛都看了,不过很多比赛都是在三心二意的看,凌晨的比赛则是在半睡半醒间。

Ruby的国际化这章,对UTF-8终于有了个比较全面的认识。也了解了一下jcode库

执行数值计算,学到了更多的东西。

数字原来可以这么表示。
1_048_576    # 和 1048576 相同

sprintf也有一个类似的方法。
str = 345.6789
str = sprintf("%5.1f", x)  # "345.7"
str = "%5.1f" % x          # "345.7"

矩阵Matrix。(非标准库NArray很有名)
m = Matrix[[1,2,3],[4,5,6],[7,8,9]]

有理数和复数
x = Rational(1,3)  # 1/3
y = Complex(3,5)   # 3+5i

使用memoize缓存函数结果,也是非标准库。作者居然在这节实现了一个简单的遗传算法。
require 'memoize'
indclude Memoize

def zeta(x, y, z)
  lim = 0.0001
  gen = 0
  loop do
    gen += 1
    p, q = x + y/2.0, z + y/2.0
    x1, y1, z1 = p*p*1.0, 2*p*q*1.0, q*q*0.9
    sum = x1 + y1 + z1
    x1 /= sum
    y1 /= sum
    z1 /= sum
    delta = [[x1, x], [y1, y], [z1, z]]
    break if delta.all? {|a, b| (a-b).abs < lim}
    x, y, z = x1, y1, z1
  end
  gen
end

g1 = zeta(0.8, 0.1, 0.1)
memorize(:zeta)            # 存在内存中
g2 = zeta(0.8, 0.1, 0.1)
memorize(:zeta, "z.cache")            # 存在内文件中
g3 = zeta(0.8, 0.1, 0.1)

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics