读《The Ruby Way》之数值计算

世界杯至今为止的比赛都看了,不过很多比赛都是在三心二意的看,凌晨的比赛则是在半睡半醒间。

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

从[b]执行数值计算[/b],学到了更多的东西。

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

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

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

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

[b]使用memoize缓存函数结果[/b],也是非标准库。作者居然在这节实现了一个简单的遗传算法。
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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值