ruby way之數值計算之三

2021-08-29 11:18:20 字數 2215 閱讀 5038

1定積分的計算

我麼可以使用riemann sum來計算積分:

[code]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

endsum

enddef f(x)

x**2

endz = integrate(0.0,5.0)

puts z, "\n" # 41.7291875[/code]

2三角計算

現有的sin之類的三角函式只能接受乙個弧度為引數,我們可以這樣處理能讓它接受角度和梯度:

[code]module math

rad2deg = 360.0/(2.0*pi) # radians to degrees

rad2grad = 400.0/(2.0*pi) # radians to grads

enddef sin_d(theta)

math.sin(theta/math::rad2deg)

enddef sin_g(theta)

math.sin(theta/math::rad2grad)

endputs sin_d(30)[/code]

3 求對數

我們現在求對數經常是基於10為底的,或者是以e為底的,當我們現在要求以任何數為底的對數:

這個的求值,我們使用到了對數的乙個變化,比如求以二為底的對數:

[code]def log2(x)

math.log(x)/math.log(2)

end[/code]

以此類推,我們能夠求任意底的對數。

4 求均值,中值和眾數

這節沒什麼意思,都是些概念性的東西

5計算方差和標準差

方差:是各個資料與平均數之差的平方的平均數,即 s^2=1/n[(x1-x_)^2+(x2-x_)^2+...+(xn-x_)^2],標準差就是方差的1/2次方.

程式如下;

[code]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

sum/x.size

enddef sigma(x)

math.sqrt(variance(x))

endputs variance(data) # 1.461538462

puts sigma(data) # 1.20894105[/code]

6 得到乙個相關係數

7 得到隨機數

使用rand方法,和其他語言中的使用方法一樣,得到的是乙個偽隨機數。

如果你想自己放入乙個隨機數種子,你可以使用srand方法

8使用memoize快取函式

假設你正在做乙個計算,乙個函式會被呼叫很多次,並且其中的很多次傳進去的引數,得到的結果都是一樣的,這個時候我們可以使用快取函式來提公升效能:

[code]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?

x,y,z = x1,y1,z1

endgen

endputs 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)[/code]

我們還可以指定儲存為乙個檔案,不過這樣的話速度更慢一下,放在記憶體中是最快的.

三 shell 變數的數值計算

三 read 運算操作符與運算命令 意義舉例 用於整數的常用運算子,效率很高 i 6 1 i 6 1 let類似 效率沒 高 let i 6 1 expr 可用於整數運算,還有許多額外功能 i expr 6 1 bclinux下的計算器,適合整數和小數運算 echo 1.0 6.0 用於整數運算 i...

MATLAB學習筆記(三) 數值計算

主要內容包括 矩陣的多種運算方法matlab實現 計算矩陣的秩 特徵值及其對應的特徵向量 利用矩陣操作求解線性方程組 數值微積分 1 矩陣的結構變換 轉置 a a.非共軛轉置 對稱變換 利用指令flipud 和fliplr a flipud b 上下方向翻轉矩陣。如果是列向量,返回相反順序的向量 如...

Matlab學習筆記(三) 數值計算

3.1.1 行列式 逆和秩 3.1.2 特徵值和特徵向量的求取 3.2.1 基本分析函式 sum函式 用於求矩陣列矩陣元素或向量的和 b sum a 若a為向量,則返回所有元素的和 如a為矩陣,則返回其他各列所有元素和 b sum a,dim 返回a中第dim維的所有元素和 cumsum函式 用於求...