Rで自然数・整数・有理数・実数・複素数 Rで数学の色々をいじってみる

  • 自然数・整数
    • 整数を表すのに'L'が使われる
    • 整数と整数のように見えるものは異なる
    • 数学としては整数は整数、整数らしきものは整数らしきもの
    • 計算機の中でのその扱いは異なって来得る
# 円周率piはRの中では小数として登録されている
>x <- pi * c(-1:1,10)
# それを整数扱いで取り出すと、整数部分のみが残る
>as.integer(x)
[1] -3  0  3 31
# 1は整数ではない 
> is.integer(1) # is FALSE !
[1] FALSE
# 1Lは整数
> is.integer(1L)
[1] TRUE 
# コンピュータの精度限界を考慮して、きっちりした値になるように処理すると整数として扱われる
> is.wholenumber <- function(x, tol = .Machine$double.eps^0.5)  abs(x - round(x)) < tol
> is.wholenumber(1) # is TRUE
[1] TRUE
# きっちりになる??
> (x <- seq(1,5, by=0.5) )
[1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0
> is.wholenumber( x ) #-->  TRUE FALSE TRUE ...
[1]  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE
  • 有理数は整数と整数の比、整数÷整数
# MASSパッケージをインストールして、読み込む
> install.packages("MASS")
> library(MASS)
# 十分に0に近ければ0と表示する
> zapsmall(solve(X, X/5)) # print near-zeroes as zero
     [,1] [,2] [,3] [,4] [,5]
[1,]  0.2  0.0  0.0  0.0  0.0
[2,]  0.0  0.2  0.0  0.0  0.0
[3,]  0.0  0.0  0.2  0.0  0.0
[4,]  0.0  0.0  0.0  0.2  0.0
[5,]  0.0  0.0  0.0  0.0  0.2
> fractions(solve(X, X/5))
     [,1] [,2] [,3] [,4] [,5]
[1,] 1/5    0    0    0    0 
[2,]   0  1/5    0    0    0 
[3,]   0    0  1/5    0    0 
[4,]   0    0    0  1/5    0 
[5,]   0    0    0    0  1/5 
> fractions(solve(X, X/5)) + 1
     [,1] [,2] [,3] [,4] [,5]
[1,] 6/5    1    1    1    1 
[2,]   1  6/5    1    1    1 
[3,]   1    1  6/5    1    1 
[4,]   1    1    1  6/5    1 
[5,]   1    1    1    1  6/5 
# 実数成分、虚数成分を与えて、複素数を作る
> z<-complex(real=3,imaginary=2)
# 実数成分を取り出す
> Re(z)
[1] 3
# 虚数成分を取り出す
> Im(z)
[1] 2
# 複素平面ではz=x+ iy としてsqrt(x^2+y^2)=Mod(z)
> Mod(z)
[1] 3.605551
z=x+iy = Mod(z) * cos(t)+i sin(t); t=Arg(z)
> Arg(z)
[1] 0.5880026
> Conj(z)
[1] 3-2i
# 共役
> Conj(z)
[1] 3-2i
> sqrt(Re(z)^2+Im(z)^2)
[1] 3.605551
> Mod(z)*(cos(Arg(z))+complex(real=0,imaginary=1)*sin(Arg(z)))
[1] 3+2i
# e^{pi i} = -1
> exp(pi*complex(real=0,imaginary=1))
[1] -1+0i