`
simohayha
  • 浏览: 1395811 次
  • 性别: Icon_minigender_1
  • 来自: 火星
社区版块
存档分类
最新评论

ruby way之数值计算之三

    博客分类:
  • ruby
阅读更多
1定积分的计算

我么可以使用Riemann sum来计算积分:

def integrate(x0, x1, dx=(x1-x0)/1000.0)  #也就是求一个函数在x0到x1区间的积分
  x = x0
  sum = 0
  loop do
    y = yield(x)
    sum += dx * y
    x += dx
    break if x > x1
  end
  sum
end

def f(x)
  x**2
end

z = integrate(0.0,5.0) {|x| f(x) }

puts z, "\n"           # 41.7291875


2三角计算

现有的sin之类的三角函数只能接受一个弧度为参数,我们可以这样处理能让它接受角度和梯度:

module Math

  RAD2DEG  = 360.0/(2.0*PI)  # Radians to degrees
  RAD2GRAD = 400.0/(2.0*PI)  # Radians to grads

end

def sin_d(theta)
  Math.sin(theta/Math::RAD2DEG)
end

def sin_g(theta)
  Math.sin(theta/Math::RAD2GRAD)
end

puts sin_d(30)


3 求对数

我们现在求对数经常是基于10为底的,或者是以e为底的,当我们现在要求以任何数为底的对数:

这个的求值,我们使用到了对数的一个变化,比如求以二为底的对数:
def log2(x)
  Math.log(x)/Math.log(2)
end


以此类推,我们能够求任意底的对数。

4 求均值,中值和众数
这节没什么意思,都是些概念性的东西

5计算方差和标准差

方差:是各个数据与平均数之差的平方的平均数,即 s^2=1/n[(x1-x_)^2+(x2-x_)^2+...+(xn-x_)^2],标准差就是方差的1/2次方.

程序如下;

data = [2, 3, 2, 2, 3, 4, 5, 5, 4, 3, 4, 1, 2]

def variance(x)
  m = mean(x)        #这边也就是得到序列的平均值
  sum = 0.0
  x.each {|v| sum += (v-m)**2 }
  sum/x.size
end

def sigma(x)
  Math.sqrt(variance(x))
end

puts variance(data)   # 1.461538462
puts sigma(data)      # 1.20894105


6 得到一个相关系数

主要是相关系数的概念,大家可以自己找找资料
7 得到随机数

使用rand方法,和其他语言中的使用方法一样,得到的是一个伪随机数。

如果你想自己放入一个随机数种子,你可以使用srand方法

8使用memoize缓存函数

假设你正在做一个计算,一个函数会被调用很多次,并且其中的很多次传进去的参数,得到的结果都是一样的,这个时候我们可以使用缓存函数来提升性能:

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

puts g1 = zeta(0.8,0.1,0.1)

memoize(:zeta)            # 将这个函数缓存在内存里
puts g2 = zeta(0.8,0.1,0.1)  #就直接从内存里面读取

memoize(:zeta,"z.cache")  # 将这个函数缓存在硬盘上
puts g3 = zeta(0.8,0.1,0.1)


我们还可以指定存储为一个文件,不过这样的话速度更慢一下,放在内存中是最快的.

分享到:
评论

相关推荐

    The Ruby Way--3rd Edition--2015-英文版

    The Ruby Way 第三版(英文版),全书22章,书中包含600多个按主题分类的示例。每个示例都回答了“如何使用Ruby来完成”的问题。 ——Ruby on Rails之父David Heinemeier Hansson倾力推荐!

    The Ruby Way(第2版)

    The Ruby Way(第2版) &lt;br&gt;The Ruby Way assumes that the reader is already familiar with the subject matter. Using many code samples it focuses on "how-to use Ruby" for specific applications, either ...

    ruby学习资源(Programming Ruby, Learning Ruby, The Ruby Way)

    内含以下4个文档: 1、Addison.Wesley.The.Ruby.Way.2nd.Edition.Oct.2006.chm 2、O'Reilly.Learning.Ruby.May.2007.chm 3、Programming Ruby 2e.pdf 4、ruby中文文档.chm

    THE RUBY WAY(中文版)(第二版)pdf

    《The Ruby Way 第二版》...“《The Ruby Way (第2版)中文版》在阐述元编程(metaprogramming)等方面尤其出类拔萃,而元编程是Ruby最引人注目的方面之一。” ——Ruby on Rails之父David Heinemeier Hansson倾力推荐!

    the-ruby-way

    the ruby way the ruby way

    the ruby way 2ed

    《The Ruby Way 2nd Edition》是一本深入探讨Ruby编程语言的经典著作,旨在帮助读者全面理解和掌握Ruby的精髓。这本书的第二版在2006年出版,由Addison-Wesley出版,作者通过深入浅出的方式,揭示了Ruby语言的强大...

    11.5 时间日期the ruby way.rar

    "11.5 时间日期the ruby way"这个主题深入探讨了Ruby中处理时间日期的最佳实践和常见用法。让我们逐一了解这些知识点。 首先,`Time.now`是Ruby中获取当前时间的标准方法。它返回一个`Time`对象,表示自1970年1月1...

    the ruby way

    3. **块、proc和lambda**:Ruby中的块、Proc和Lambda是其独特之处,它们提供了强大的函数式编程特性,允许你编写更简洁、更灵活的代码。 4. **方法和元编程**:Ruby允许在运行时动态定义和修改方法,元编程能力使...

    Ruby-Way.rar_About Language

    《Ruby Way》一书还会详细介绍Ruby的Gem包管理器,Gem是Ruby生态系统的核心部分,提供了大量的库和工具,让开发者能够轻松地安装和使用第三方软件包。此外,书中可能涵盖了Ruby on Rails框架,它是基于Ruby构建Web...

    Addison Wesley The Ruby Way 2Nd Edition Oct 2006.pdf(英文版)

    ### Addison Wesley《The Ruby Way》第二版(2006年10月) #### 书籍概览 《The Ruby Way》是由Hal Fulton编写的关于Ruby编程语言的经典著作,该书的第二版出版于2006年10月,由Addison Wesley Professional出版社...

    Ruby编程,Ruby编程,

    - **科学计算与数据分析**:虽然不是主流,但Ruby也有一些库支持数值计算和数据处理。 - **嵌入式系统**:由于其轻量级特性,Ruby也可以用于某些嵌入式系统的开发。 总之,Ruby作为一种高度灵活和可扩展的编程语言...

    The Ruby Way(处理文件和目录)

    计算机的主要功能之一就是处理数据,这不仅包括内部计算,还包括输入输出(I/O)操作,即与外部世界的交互。Ruby作为一种现代的编程语言,为用户提供了一套强大且灵活的方式来处理文件和目录。下面将详细介绍Ruby中...

    Ruby Ruby Ruby Ruby Ruby Ruby

    Ruby Ruby Ruby Ruby Ruby Ruby

    ruby代码ruby代码ruby代码ruby代码ruby代码ruby代码

    ruby代码ruby代码ruby代码ruby代码ruby代码ruby代码ruby代码ruby代码

    Addison.Wesley.The.Ruby.Way.2nd.Edition.Oct.2006.chm

    《The Ruby Way》第二版是Addison-Wesley出版社在2006年推出的一本深入浅出的Ruby编程语言教程。这本书专为初学者设计,旨在帮助读者快速掌握Ruby语言的基础和高级特性,从而轻松入门Ruby编程。Ruby是一种动态、开放...

Global site tag (gtag.js) - Google Analytics