ベクトルを学ぶ

  • こちらから
    • ベクトルとその演算の半分くらいを習ったところ
  • 2より大きい整数が素数であるかの判定
# xを2,3,...,(x-1)で割って、あまりを調べる
x <- 17
waru <- 2:(x-1)
waru
amari <- x%%waru
amari
# あまりがすべて0ではない
# あまりが0
zerodesuka <- amari == 0
zerodesuka
# すべて0
subete0 <- all(zerodesuka)
subete0
# ...ではない
subete0denai <- !(subete0)
subete0denai
# すべて0ではない、はprod() でも(すべての要素の積)
prod(amari) != 0
> # xを2,3,...,(x-1)で割って、あまりを調べる
> x <- 17
> waru <- 2:(x-1)
> waru
 [1]  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16
> amari <- x%%waru
> amari
 [1] 1 2 1 2 5 3 1 8 7 6 5 4 3 2 1
> # あまりがすべて0ではない
> # あまりが0
> zerodesuka <- amari == 0
> zerodesuka
 [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
> # すべて0
> subete0 <- all(zerodesuka)
> subete0
[1] FALSE
> # ...ではない
> subete0denai <- !(subete0)
> subete0denai
[1] TRUE
> # すべて0ではない、はprod() でも(すべての要素の積)
> prod(amari) != 0
[1] TRUE
> # ...ではない
> subete0denai <- !(subete0)
> subete0denai
[1] FALSE
  • 処理を縮める
# 1段ずつかっこに入れていく
x%%(2:(x-1))
(x%%(2:(x-1))) = 0
all((x%%(2:(x-1))) == 0)
!(all((x%%(2:(x-1))) == 0))
> # 1段ずつかっこに入れていく
> x%%(2:(x-1))
 [1] 1 2 1 2 5 3 1 8 7 6 5 4 3 2 1
> (x%%(2:(x-1))) == 0
 [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
> all((x%%(2:(x-1))) == 0)
[1] FALSE
> !(all((x%%(2:(x-1))) == 0))
[1] TRUE
sosu <- function(x) if(x==1){FALSE}else if(x==2){TRUE}else{!any(x%%(2:(x-1))==0)}
  • 円周率の計算
    • 半径1の円の面積は\pi
    • 1辺の長さが2の正方形に内接する円は半径1の円
    • 1辺の長さが2の正方形上の点を格子上に発生させて
    • その中心からの距離を測り
    • それが1未満であるような点が正方形上の点に占める割合を計算する
    • 1辺2の正方形の面積が4なので、この割合に4を掛ければそれは\piの近似値
# 0から2まで、均等割りの数列を作る
# 値の数をkizamiとする
kizami <- 10
s <- seq(from = 0, to = 2, length=kizami)
s
# この数列を2通りの方法でkizami回繰り返す
rep.num <- kizami
x <- rep(s,rep.num)
y <- rep(s,each=rep.num)
# 2通りの方法で作った、数列をx座標,y座標とすると格子点が作れる
plot(x,y) # これはまだ習っていない
# 正方形の中心(1,1)を中心に撮りなおす
x_1 <- x-1
y_1 <- y-1
# (1,1)からの距離の二乗
r.sq <- x_1^2 + y_1^2

# 円の内側かどうかの判定
inside <- which(r.sq<1)
# その個数
inside.num <- length(inside)
# すべての点の個数
all.num <- length(x)
# 円の内側の割合
fraction <- inside.num/all.num
# 正方形の面積4で補正する
fraction * 4
  • kizami=10で2.4、kizami=100 で3.0672、kizami=1000で3.135056、kizami=10000で3.140954