## Page-01
u <- c(0,4)
v <- c(3,0)
w <- c(0,-2)
a <- c(-2,-4)
b <- c(3,0)
c <- c(-6,4)
(tot <- u+v+w+a+b+c) # 計算小羊從頭到尾移動的效果並印出
## [1] -2 2
O <- c(0,0)
G <- c(-2,2)
(O-G) # 計算小羊如何由G點回到原點並印出
## [1] 2 -2
D <- c(3,2)
(D+tot) # 計算小羊若由D點開始出發,最後將位居何處,並印出
## [1] 1 4
## Page-02
u <- c(6,8)
v <- c(-4,14)
(u+v)
## [1] 2 22
(u+1/2*v)
## [1] 4 15
sqrt(u%*%u) # 向量 u 的長度(內積開根號)
## [,1]
## [1,] 10
sqrt(v%*%v) # 向量 v 的長度(內積開根號)
## [,1]
## [1,] 14.56022
# ru+sv=c(0,8r+14s) => 6r=4s => r:s = 2:3 = 1:1.5
(1*u+1.5*v)
## [1] 0 29
(w <- 1.5*v)
## [1] -6 21
sqrt(w%*%w) # 調整為大約 10:21.84033 (10: sqrt(477))
## [,1]
## [1,] 21.84033
A <- c(88,95,92)
B <- c(96,95,91)
C <- c(91,84,88)
D <- c(85,90,89)
E <- c(95,88,91)
(A+B+C+D+E) # 總分(甲錄取)
## [1] 455 452 451
(3*A+2*B+C+D+E) # 總裁加權後之總分(乙錄取)
## [1] 727 737 726
## Page-03
u <- c(2,6,5)
v <- c(2,-1,-2)
w <- c(1,0,2)
(tot <- sqrt(u%*%u)+ sqrt(v%*%v)+ sqrt(w%*%w)) # 總距離
## [,1]
## [1,] 13.29833
s <- u+v+w
(sa<-sqrt(s%*%s)) # 直接飛到D點的飛行距離
## [,1]
## [1,] 8.660254
tot-sa # 節省的距離
## [,1]
## [1,] 4.638072
uw <- c(0.88,0.75,0.94,0.84,0.93)
uc <- c(0.92,0.80,0.79,0.82,0.95)
(sqrt(uw%*%uw)) # 老王的幸福向量長度
## [,1]
## [1,] 1.947049
(sqrt(uc%*%uc)) # 老張的幸福向量長度
## [,1]
## [1,] 1.91974
up <- c(1,1,1,1,1) # 幸福最高境界
dw <- up-uw # 老王與幸福最高境界的差距
dc <- up-uc # 老張與幸福最高境界的差距
(sqrt(dw%*%dw)) # 老王與幸福最高境界的差距之長度
## [,1]
## [1,] 0.3331666
(sqrt(dc%*%dc)) # 老張與幸福最高境界的差距之長度
## [,1]
## [1,] 0.3541186
## Page-04~05
A <- matrix(c(20,60,40,12,30,20), nrow=3)
# 亦可使用 A <- matrix(c(20,12,60,30,40,20), nrow=3, byrow=T)
B <- matrix(c(25,55,30,18,40,30), nrow=3)
C <- matrix(c(25,50,45,20,35,30), nrow=3)
(M <- A+B+C) # 計算矩陣相加結果並印出
## [,1] [,2]
## [1,] 70 50
## [2,] 165 105
## [3,] 115 80
D <- matrix(c(2200,1800,1000,850,1500,900),nrow=2)
D
## [,1] [,2] [,3]
## [1,] 2200 1000 1500
## [2,] 1800 850 900
D[1,]%*%M[,1] # 將矩陣D的第一列與矩陣M的第一行做內積(視為兩向量)
## [,1]
## [1,] 491500
D[2,]%*%M[,2] # 將矩陣D的第二列與矩陣M的第二行做內積(視為兩向量)
## [,1]
## [1,] 251250
D1 <- as.matrix(D[1,]) # 將矩陣D的第一列視為矩陣D1
M1 <- as.matrix(M[,1]) # 將矩陣M的第一行視為矩陣M1
dim(D1) # 注意D1為3x1矩陣
## [1] 3 1
class(D1) # 確認D1之類型
## [1] "matrix" "array"
class(M1) # 確認M1之類型
## [1] "matrix" "array"
t(D1)%*%M1 # 將D1轉置為1x3矩陣後再與矩陣M1(3x1)相乘
## [,1]
## [1,] 491500
## Page-06~07
A1 <- matrix(c(1,3,2,4),nrow=2)
A2 <- matrix(c(3,1,4,2),nrow=2)
(A1%*%A2)
## [,1] [,2]
## [1,] 5 8
## [2,] 13 20
B1 <- matrix(c(2,5,-1,3,4,0,-1,0,2),nrow=3)
B2 <- matrix(c(0,2,-1,1,0,1),nrow=3)
(B1%*%B2)
## [,1] [,2]
## [1,] 7 1
## [2,] 8 5
## [3,] -2 1
C1 <- matrix(c(2,1,0,-1),nrow=2)
C2 <- matrix(c(3,-2,0,2),nrow=2)
C3 <- matrix(c(1,0,2,3),nrow=2)
(C1%*%C2%*%C3)
## [,1] [,2]
## [1,] 6 12
## [2,] 5 4
D1 <- matrix(c(0,2,1,2),nrow=2)
D2 <- matrix(c(0,1,3,2,-1,0),nrow=2)
D3 <- matrix(c(0,2,1,1,-1,0),nrow=3)
(D1%*%D2%*%D3)
## [,1] [,2]
## [1,] 4 -1
## [2,] 18 -8
MA <- matrix(c(2,1,0,-1),nrow=2)
MB <- matrix(c(3,2,0,-2),nrow=2)
MC <- matrix(c(1,0,2,3),nrow=2)
(MA+2*MB-3*MC)
## [,1] [,2]
## [1,] 5 -6
## [2,] 5 -14
K1 <- matrix(c(-1,0,0,1),nrow=2)
K2 <- matrix(c(0,1,1,0),nrow=2)
K3 <- matrix(c(0.5,0,0,0.5),nrow=2)
MM <- matrix(c(1,3,2,5,2.5,4.5),nrow=2)
MM
## [,1] [,2] [,3]
## [1,] 1 2 2.5
## [2,] 3 5 4.5
K1
## [,1] [,2]
## [1,] -1 0
## [2,] 0 1
K1%*%MM
## [,1] [,2] [,3]
## [1,] -1 -2 -2.5
## [2,] 3 5 4.5
K2
## [,1] [,2]
## [1,] 0 1
## [2,] 1 0
K2%*%MM
## [,1] [,2] [,3]
## [1,] 3 5 4.5
## [2,] 1 2 2.5
K3
## [,1] [,2]
## [1,] 0.5 0.0
## [2,] 0.0 0.5
K3%*%MM
## [,1] [,2] [,3]
## [1,] 0.5 1.0 1.25
## [2,] 1.5 2.5 2.25
(K21 <- K2%*%K1)
## [,1] [,2]
## [1,] 0 1
## [2,] -1 0
(K21%*%MM) # (1)以Y軸做對稱軸做轉換 (2)以Y=X做對稱軸做轉換
## [,1] [,2] [,3]
## [1,] 3 5 4.5
## [2,] -1 -2 -2.5
(K12 <- K1%*%K2)
## [,1] [,2]
## [1,] 0 -1
## [2,] 1 0
(K12%*%MM) # (1)以Y=X做對稱軸做轉換 (2)以Y軸做對稱軸做轉換
## [,1] [,2] [,3]
## [1,] -3 -5 -4.5
## [2,] 1 2 2.5
(K1%*%K1) # 以Y軸做對稱軸做兩次轉換
## [,1] [,2]
## [1,] 1 0
## [2,] 0 1
(K2%*%K2) # 以Y=X做對稱軸做兩次轉換
## [,1] [,2]
## [1,] 1 0
## [2,] 0 1
## Page-08~09
A <- matrix(c(8,4,4,7),nrow=2)
solve(A)
## [,1] [,2]
## [1,] 0.175 -0.1
## [2,] -0.100 0.2
B <- matrix(c(0,3,2,1),nrow=2)
solve(B)
## [,1] [,2]
## [1,] -0.1666667 0.3333333
## [2,] 0.5000000 0.0000000
polyroot(c(-8,8,1)) # 解 k^2+8k-8 = 0
## [1] 0.8989795+0i -8.8989795+0i
C <- matrix(c(0,-1,1,0),nrow=2)
solve(C)
## [,1] [,2]
## [1,] 0 -1
## [2,] 1 0
(D <- matrix(c(-2,0,0,-2),nrow=2))
## [,1] [,2]
## [1,] -2 0
## [2,] 0 -2
(E <- solve(D))
## [,1] [,2]
## [1,] -0.5 0.0
## [2,] 0.0 -0.5
M <- matrix(c(2,8,4,7,4,5),nrow=2) # 三個點座標構成的矩陣M
(MN <- D%*%M) # 三個點透過矩陣D轉換得新座標矩陣MN
## [,1] [,2] [,3]
## [1,] -4 -8 -8
## [2,] -16 -14 -10
(E%*%MN) # 新座標再透過D的反矩陣E轉換回原來的座標
## [,1] [,2] [,3]
## [1,] 2 4 4
## [2,] 8 7 5
## Page-11
A <- matrix(c(1,2,1,4),nrow=2)
AX <- matrix(c(10,28,1,4),nrow=2)
AY <- matrix(c(1,2,10,28),nrow=2)
cat("X=",det(AX)/det(A), "\n") # 計算 x 之值並印出,換行
## X= 6
cat("Y=",det(AY)/det(A), "\n") # 計算 y 之值並印出,換行
## Y= 4
B <- matrix(c(4, 6, 5, -3),nrow=2)
BX <- matrix(c(7, 21, 5, -3),nrow=2)
BY <- matrix(c(4,6, 7, 21),nrow=2)
cat("X=",det(BX)/det(B), "\n") # 計算 x 之值並印出,換行
## X= 3
cat("Y=",det(BY)/det(B), "\n") # 計算 y 之值並印出,換行
## Y= -1
C <- matrix(c(0.8,0.3,0.6,0.4),nrow=2)
CX <- matrix(c(4,3,0.6,0.4),nrow=2)
CY <- matrix(c(0.8,0.3,4,3),nrow=2)
cat("X=",det(CX)/det(C), "\n") # 計算 x 之值並印出,換行
## X= -1.428571
cat("Y=",det(CY)/det(C), "\n") # 計算 y 之值並印出,換行
## Y= 8.571429
D <- matrix(c(3/5,1/4,1/2,4/3),nrow=2)
DX <- matrix(c(2,4,1/2,4/3),nrow=2)
DY <- matrix(c(3/5,1/4,2,4),nrow=2)
cat("X=",det(DX)/det(D), "\n") # 計算 x 之值並印出,換行
## X= 0.9876543
cat("Y=",det(DY)/det(D), "\n") # 計算 y 之值並印出,換行
## Y= 2.814815
D <- matrix(c(1,2,2,1,4,0,1,6,4),nrow=3)
DX <- matrix(c(10,38,14,1,4,0,1,6,4),nrow=3)
DY <- matrix(c(1,2,2,10,38,14,1,6,4),nrow=3)
DZ <- matrix(c(1,2,2,1,4,0,10,38,14),nrow=3)
cat("X=",det(DX)/det(D), "\n") # 計算 x 之值並印出,換行
## X= 3
cat("Y=",det(DY)/det(D), "\n") # 計算 y 之值並印出,換行
## Y= 5
cat("Y=",det(DZ)/det(D), "\n") # 計算 z 之值並印出,換行
## Y= 2
## Page-13
M <- matrix(c(3,4,2,8,1,0,5,3,2),nrow=3)
MX <- matrix(c(60,46,24,8,1,0,5,3,2),nrow=3)
MY <- matrix(c(3,4,2,60,46,24,5,3,2),nrow=3)
MZ <- matrix(c(3,4,2,8,1,0,60,46,24),nrow=3)
cat("X=",det(MX)/det(M), "\n") # 計算 x 之值並印出,換行
## X= 8
cat("Y=",det(MY)/det(M), "\n") # 計算 y 之值並印出,換行
## Y= 2
cat("Y=",det(MZ)/det(M), "\n") # 計算 z 之值並印出,換行
## Y= 4
b <- matrix(c(60,46,24),nrow=3)
MS <- solve(M) # 計算 M 的反矩陣
cat("x y z=", MS%*%b, "\n") # 解出(x,y,z)向量,並印出
## x y z= 8 2 4
## Page-14~15
A <- matrix(c(1,2,2,1,4,0,1,6,4),nrow=3)
b <- matrix(c(10,38,14),nrow=3)
(Ab <-cbind(A,b)) # 利用cbind指令將矩陣A與b合併(並列)
## [,1] [,2] [,3] [,4]
## [1,] 1 1 1 10
## [2,] 2 4 6 38
## [3,] 2 0 4 14
Ab[2,] <- Ab[1,]*(-2)+Ab[2,] # 將合併矩陣之第一列乘以-2加到第二列
Ab
## [,1] [,2] [,3] [,4]
## [1,] 1 1 1 10
## [2,] 0 2 4 18
## [3,] 2 0 4 14
Ab[3,] <- Ab[1,]*(-2)+Ab[3,] # 將合併矩陣之第一列乘以-2加到第三列
Ab
## [,1] [,2] [,3] [,4]
## [1,] 1 1 1 10
## [2,] 0 2 4 18
## [3,] 0 -2 2 -6
Ab[2,] <- Ab[2,]*(1/2) # 將合併矩陣之第二列乘以1/2
Ab
## [,1] [,2] [,3] [,4]
## [1,] 1 1 1 10
## [2,] 0 1 2 9
## [3,] 0 -2 2 -6
Ab[1,] <- Ab[2,]*(-1)+Ab[1,] # 將合併矩陣之第二列乘以-1加到第一列
Ab
## [,1] [,2] [,3] [,4]
## [1,] 1 0 -1 1
## [2,] 0 1 2 9
## [3,] 0 -2 2 -6
Ab[3,] <- Ab[2,]*2+Ab[3,] # 將合併矩陣之第二列乘以2加到第三列
Ab
## [,1] [,2] [,3] [,4]
## [1,] 1 0 -1 1
## [2,] 0 1 2 9
## [3,] 0 0 6 12
Ab[3,] <- Ab[3,]*(1/6) # 將合併矩陣之第三列乘以1/6
Ab
## [,1] [,2] [,3] [,4]
## [1,] 1 0 -1 1
## [2,] 0 1 2 9
## [3,] 0 0 1 2
Ab[1,] <- Ab[3,]*1+Ab[1,] # 將合併矩陣之第三列乘以1加到第一列
Ab
## [,1] [,2] [,3] [,4]
## [1,] 1 0 0 3
## [2,] 0 1 2 9
## [3,] 0 0 1 2
Ab[2,] <- Ab[3,]*(-2)+Ab[2,] # 將合併矩陣之第三列乘以-2 加到第二列
Ab
## [,1] [,2] [,3] [,4]
## [1,] 1 0 0 3
## [2,] 0 1 0 5
## [3,] 0 0 1 2
A <- matrix(c(1,2,2,1,4,0,1,6,4),nrow=3)
(AI <-cbind(A,diag(3))) # 利用cbind指令將矩陣A與I3合併(並列)
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 1 1 1 0 0
## [2,] 2 4 6 0 1 0
## [3,] 2 0 4 0 0 1
AI[2,] <- AI[1,]*(-2)+AI[2,] # 將合併矩陣之第一列乘以-2加到第二列
AI
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 1 1 1 0 0
## [2,] 0 2 4 -2 1 0
## [3,] 2 0 4 0 0 1
AI[3,] <- AI[1,]*(-2)+AI[3,] # 將合併矩陣之第一列乘以-2加到第三列
AI
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 1 1 1 0 0
## [2,] 0 2 4 -2 1 0
## [3,] 0 -2 2 -2 0 1
AI[2,] <- AI[2,]*(1/2) # 將合併矩陣之第二列乘以1/2
AI
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 1 1 1 0.0 0
## [2,] 0 1 2 -1 0.5 0
## [3,] 0 -2 2 -2 0.0 1
AI[1,] <- AI[2,]*(-1)+AI[1,] # 將合併矩陣之第二列乘以-1加到第一列
AI
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 0 -1 2 -0.5 0
## [2,] 0 1 2 -1 0.5 0
## [3,] 0 -2 2 -2 0.0 1
AI[3,] <- AI[2,]*2+AI[3,] # 將合併矩陣之第二列乘以2加到第三列
AI
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 0 -1 2 -0.5 0
## [2,] 0 1 2 -1 0.5 0
## [3,] 0 0 6 -4 1.0 1
AI[3,] <- AI[3,]*(1/6) # 將合併矩陣之第三列乘以1/6
AI
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 0 -1 2.0000000 -0.5000000 0.0000000
## [2,] 0 1 2 -1.0000000 0.5000000 0.0000000
## [3,] 0 0 1 -0.6666667 0.1666667 0.1666667
AI[1,] <- AI[3,]*1+AI[1,] # 將合併矩陣之第三列乘以1加到第一列
AI
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 0 0 1.3333333 -0.3333333 0.1666667
## [2,] 0 1 2 -1.0000000 0.5000000 0.0000000
## [3,] 0 0 1 -0.6666667 0.1666667 0.1666667
AI[2,] <- AI[3,]*(-2)+AI[2,] # 將合併矩陣之第三列乘以-2 加到第二列
AI
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 0 0 1.3333333 -0.3333333 0.1666667
## [2,] 0 1 0 0.3333333 0.1666667 -0.3333333
## [3,] 0 0 1 -0.6666667 0.1666667 0.1666667
# 亦可直接利用 A 的逆矩陣 A^{-1} 求解
(AIN <- AI[,4:6]) # 合併矩陣之後三欄即為欲求之反矩陣
## [,1] [,2] [,3]
## [1,] 1.3333333 -0.3333333 0.1666667
## [2,] 0.3333333 0.1666667 -0.3333333
## [3,] -0.6666667 0.1666667 0.1666667
cat("x y z=", AIN%*%b, "\n") # 印出(x,y,z)之解
## x y z= 3 5 2
## Page-16
A <- matrix(c(1,2,4,5,4,-2,-2,3,1),nrow=3)
b <- matrix(c(21,19,10),nrow=3)
(Ab <-cbind(A,b)) # 利用cbind指令將矩陣A與b合併(並列)
## [,1] [,2] [,3] [,4]
## [1,] 1 5 -2 21
## [2,] 2 4 3 19
## [3,] 4 -2 1 10
Ab[2,] <- Ab[1,]*(-2)+Ab[2,] # 將合併矩陣之第一列乘以-2加到第二列
Ab
## [,1] [,2] [,3] [,4]
## [1,] 1 5 -2 21
## [2,] 0 -6 7 -23
## [3,] 4 -2 1 10
Ab[3,] <- Ab[1,]*(-4)+Ab[3,] # 將合併矩陣之第一列乘以-4加到第三列
Ab
## [,1] [,2] [,3] [,4]
## [1,] 1 5 -2 21
## [2,] 0 -6 7 -23
## [3,] 0 -22 9 -74
Ab[2,] <- Ab[2,]*(-1/6) # 將合併矩陣之第二列乘以 -1/6
Ab
## [,1] [,2] [,3] [,4]
## [1,] 1 5 -2.000000 21.000000
## [2,] 0 1 -1.166667 3.833333
## [3,] 0 -22 9.000000 -74.000000
Ab[1,] <- Ab[2,]*(-5)+Ab[1,] # 將合併矩陣之第二列乘以-5加到第一列
Ab
## [,1] [,2] [,3] [,4]
## [1,] 1 0 3.833333 1.833333
## [2,] 0 1 -1.166667 3.833333
## [3,] 0 -22 9.000000 -74.000000
Ab[3,] <- Ab[2,]*(22)+Ab[3,] # 將合併矩陣之第二列乘以22加到第三列
Ab
## [,1] [,2] [,3] [,4]
## [1,] 1 0 3.833333 1.833333
## [2,] 0 1 -1.166667 3.833333
## [3,] 0 0 -16.666667 10.333333
Ab[3,] <- Ab[3,]*(-1)/(16+2/3) # 將合併矩陣之第三列乘以-1/(16+2/3)
Ab
## [,1] [,2] [,3] [,4]
## [1,] 1 0 3.833333 1.833333
## [2,] 0 1 -1.166667 3.833333
## [3,] 0 0 1.000000 -0.620000
Ab[1,] <- Ab[3,]*(-(3+5/6))+Ab[1,] # 將合併矩陣之第三列乘以(-(3+5/6))加到第一列
Ab
## [,1] [,2] [,3] [,4]
## [1,] 1 0 -4.440892e-16 4.210000
## [2,] 0 1 -1.166667e+00 3.833333
## [3,] 0 0 1.000000e+00 -0.620000
Ab[2,] <- Ab[3,]*(1+1/6)+Ab[2,] # 將合併矩陣之第三列乘以(1+1/6)加到第二列
Ab
## [,1] [,2] [,3] [,4]
## [1,] 1 0 -4.440892e-16 4.21
## [2,] 0 1 0.000000e+00 3.11
## [3,] 0 0 1.000000e+00 -0.62
A <- matrix(c(1,2,1,-1,3,4,2,1,-1),nrow=3)
b1 <- matrix(c(4,6,2),nrow=3)
b2 <- matrix(c(4,6,5),nrow=3)
(Ab12 <-cbind(A,b1,b2)) # 利用cbind指令將矩陣A與b1、b2合併(並列)
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 -1 2 4 4
## [2,] 2 3 1 6 6
## [3,] 1 4 -1 2 5
Ab12[2,] <- Ab12[1,]*(-2)+Ab12[2,] # 將合併矩陣之第一列乘以-2加到第二列
Ab12
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 -1 2 4 4
## [2,] 0 5 -3 -2 -2
## [3,] 1 4 -1 2 5
Ab12[3,] <- Ab12[1,]*(-1)+Ab12[3,] # 將合併矩陣之第一列乘以-1加到第三列
Ab12
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 -1 2 4 4
## [2,] 0 5 -3 -2 -2
## [3,] 0 5 -3 -2 1
Ab12[2,] <- Ab12[2,]*(1/5) # 將合併矩陣之第二列乘以1/5
Ab12
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 -1 2.0 4.0 4.0
## [2,] 0 1 -0.6 -0.4 -0.4
## [3,] 0 5 -3.0 -2.0 1.0
Ab12[1,] <- Ab12[2,]*(1)+Ab12[1,] # 將合併矩陣之第二列乘以1加到第一列
Ab12
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 0 1.4 3.6 3.6
## [2,] 0 1 -0.6 -0.4 -0.4
## [3,] 0 5 -3.0 -2.0 1.0
Ab12[3,] <- Ab12[2,]*(-5)+Ab12[3,] # 將合併矩陣之第二列乘以-5加到第三列
Ab12
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 0 1.400000e+00 3.6 3.6
## [2,] 0 1 -6.000000e-01 -0.4 -0.4
## [3,] 0 0 4.440892e-16 0.0 3.0
# 對於b1,得 x1+1.4*x3=3.6 , x2-0.6*x2=-0.4 , 0*x1+0*x2+0*x3=0 => 無窮多解
# 對於b2,得 x1+1.4*x3=3.6 , x2-0.6*x2=-0.4 , 0*x1+0*x2+0*x3=3.0 => 無解
A <- matrix(c(1,2,4,0,1,0,-1,1,0,1,3,2,-1,3,1,2),nrow=4)
(AI <-cbind(A,diag(4))) # 利用cbind指令將矩陣A與I4合併(並列)
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
## [1,] 1 1 0 -1 1 0 0 0
## [2,] 2 0 1 3 0 1 0 0
## [3,] 4 -1 3 1 0 0 1 0
## [4,] 0 1 2 2 0 0 0 1
AI[2,] <- AI[1,]*(-2)+AI[2,] # 將合併矩陣之第一列乘以-2加到第二列
AI
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
## [1,] 1 1 0 -1 1 0 0 0
## [2,] 0 -2 1 5 -2 1 0 0
## [3,] 4 -1 3 1 0 0 1 0
## [4,] 0 1 2 2 0 0 0 1
AI[3,] <- AI[1,]*(-4)+AI[3,] # 將合併矩陣之第一列乘以-4加到第三列
AI
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
## [1,] 1 1 0 -1 1 0 0 0
## [2,] 0 -2 1 5 -2 1 0 0
## [3,] 0 -5 3 5 -4 0 1 0
## [4,] 0 1 2 2 0 0 0 1
AI[2,] <- AI[2,]*(-1/2) # 將合併矩陣之第二列乘以-1/2
AI
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
## [1,] 1 1 0.0 -1.0 1 0.0 0 0
## [2,] 0 1 -0.5 -2.5 1 -0.5 0 0
## [3,] 0 -5 3.0 5.0 -4 0.0 1 0
## [4,] 0 1 2.0 2.0 0 0.0 0 1
AI[1,] <- AI[2,]*(-1)+AI[1,] # 將合併矩陣之第二列乘以-1加到第一列
AI
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
## [1,] 1 0 0.5 1.5 0 0.5 0 0
## [2,] 0 1 -0.5 -2.5 1 -0.5 0 0
## [3,] 0 -5 3.0 5.0 -4 0.0 1 0
## [4,] 0 1 2.0 2.0 0 0.0 0 1
AI[3,] <- AI[2,]*(5)+AI[3,] # 將合併矩陣之第二列乘以5加到第三列
AI
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
## [1,] 1 0 0.5 1.5 0 0.5 0 0
## [2,] 0 1 -0.5 -2.5 1 -0.5 0 0
## [3,] 0 0 0.5 -7.5 1 -2.5 1 0
## [4,] 0 1 2.0 2.0 0 0.0 0 1
AI[4,] <- AI[2,]*(-1)+AI[4,] # 將合併矩陣之第二列乘以-1加到第四列
AI
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
## [1,] 1 0 0.5 1.5 0 0.5 0 0
## [2,] 0 1 -0.5 -2.5 1 -0.5 0 0
## [3,] 0 0 0.5 -7.5 1 -2.5 1 0
## [4,] 0 0 2.5 4.5 -1 0.5 0 1
AI[3,] <- AI[3,]*(2) # 將合併矩陣之第三列乘以2
AI
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
## [1,] 1 0 0.5 1.5 0 0.5 0 0
## [2,] 0 1 -0.5 -2.5 1 -0.5 0 0
## [3,] 0 0 1.0 -15.0 2 -5.0 2 0
## [4,] 0 0 2.5 4.5 -1 0.5 0 1
AI[1,] <- AI[3,]*(-0.5)+AI[1,] # 將合併矩陣之第三列乘以-0.5加到第一列
AI
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
## [1,] 1 0 0.0 9.0 -1 3.0 -1 0
## [2,] 0 1 -0.5 -2.5 1 -0.5 0 0
## [3,] 0 0 1.0 -15.0 2 -5.0 2 0
## [4,] 0 0 2.5 4.5 -1 0.5 0 1
AI[2,] <- AI[3,]*(0.5)+AI[2,] # 將合併矩陣之第三列乘以0.5加到第二列
AI
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
## [1,] 1 0 0.0 9.0 -1 3.0 -1 0
## [2,] 0 1 0.0 -10.0 2 -3.0 1 0
## [3,] 0 0 1.0 -15.0 2 -5.0 2 0
## [4,] 0 0 2.5 4.5 -1 0.5 0 1
AI[4,] <- AI[3,]*(-2.5)+AI[4,] # 將合併矩陣之第三列乘以-2.5加到第四列
AI
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
## [1,] 1 0 0 9 -1 3 -1 0
## [2,] 0 1 0 -10 2 -3 1 0
## [3,] 0 0 1 -15 2 -5 2 0
## [4,] 0 0 0 42 -6 13 -5 1
AI[4,] <- AI[4,]*(1/42) # 將合併矩陣之第四列乘以1/42
AI
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
## [1,] 1 0 0 9 -1.0000000 3.0000000 -1.0000000 0.00000000
## [2,] 0 1 0 -10 2.0000000 -3.0000000 1.0000000 0.00000000
## [3,] 0 0 1 -15 2.0000000 -5.0000000 2.0000000 0.00000000
## [4,] 0 0 0 1 -0.1428571 0.3095238 -0.1190476 0.02380952
AI[1,] <- AI[4,]*(-9)+AI[1,] # 將合併矩陣之第四列乘以-9加到第一列
AI
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
## [1,] 1 0 0 0 0.2857143 0.2142857 0.07142857 -0.21428571
## [2,] 0 1 0 -10 2.0000000 -3.0000000 1.00000000 0.00000000
## [3,] 0 0 1 -15 2.0000000 -5.0000000 2.00000000 0.00000000
## [4,] 0 0 0 1 -0.1428571 0.3095238 -0.11904762 0.02380952
AI[2,] <- AI[4,]*(10)+AI[2,] # 將合併矩陣之第四列乘以10加到第二列
AI
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
## [1,] 1 0 0 0 0.2857143 0.2142857 0.07142857 -0.21428571
## [2,] 0 1 0 0 0.5714286 0.0952381 -0.19047619 0.23809524
## [3,] 0 0 1 -15 2.0000000 -5.0000000 2.00000000 0.00000000
## [4,] 0 0 0 1 -0.1428571 0.3095238 -0.11904762 0.02380952
AI[3,] <- AI[4,]*(15)+AI[3,] # 將合併矩陣之第四列乘以15加到第三列
AI
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
## [1,] 1 0 0 0 0.2857143 0.2142857 0.07142857 -0.21428571
## [2,] 0 1 0 0 0.5714286 0.0952381 -0.19047619 0.23809524
## [3,] 0 0 1 0 -0.1428571 -0.3571429 0.21428571 0.35714286
## [4,] 0 0 0 1 -0.1428571 0.3095238 -0.11904762 0.02380952
## Page-18
A <- matrix(c(-1, 0, 0, 1),nrow=2)
eigen(A)
## eigen() decomposition
## $values
## [1] 1 -1
##
## $vectors
## [,1] [,2]
## [1,] 0 -1
## [2,] 1 0
A <- matrix(c(0.5, 0, 0, 0.5),nrow=2)
eigen(A)
## eigen() decomposition
## $values
## [1] 0.5 0.5
##
## $vectors
## [,1] [,2]
## [1,] 0 -1
## [2,] 1 0
A <- matrix(c(-4, 3, -6, 5),nrow=2)
eigen(A)
## eigen() decomposition
## $values
## [1] 2 -1
##
## $vectors
## [,1] [,2]
## [1,] 0.7071068 -0.8944272
## [2,] -0.7071068 0.4472136
A <- matrix(c(5, 4, 2, 4, 5, 2, 2, 2, 2),nrow=3)
eigen(A)
## eigen() decomposition
## $values
## [1] 10 1 1
##
## $vectors
## [,1] [,2] [,3]
## [1,] -0.6666667 0.0000000 0.7453560
## [2,] -0.6666667 -0.4472136 -0.5962848
## [3,] -0.3333333 0.8944272 -0.2981424
## Page-23~25
(A <- matrix(c(1,0,0,0,0,0,0,4,0,3,0,0,0,0,0,0,2,0,0,0),nrow=4))
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 0 0 0 2
## [2,] 0 0 3 0 0
## [3,] 0 0 0 0 0
## [4,] 0 4 0 0 0
svd(A,nu=4,nv=5) #求矩陣A之SVD分解,設定U為4x4,V為5x5
## $d
## [1] 4.000000 3.000000 2.236068 0.000000
##
## $u
## [,1] [,2] [,3] [,4]
## [1,] 0 0 1 0
## [2,] 0 1 0 0
## [3,] 0 0 0 -1
## [4,] 1 0 0 0
##
## $v
## [,1] [,2] [,3] [,4] [,5]
## [1,] 0 0 0.4472136 0 -0.8944272
## [2,] 1 0 0.0000000 0 0.0000000
## [3,] 0 1 0.0000000 0 0.0000000
## [4,] 0 0 0.0000000 1 0.0000000
## [5,] 0 0 0.8944272 0 0.4472136
(A <- matrix(c(1,0,0,3,0,0,4,0,0,1,0,2),nrow=4))
## [,1] [,2] [,3]
## [1,] 1 0 0
## [2,] 0 0 1
## [3,] 0 4 0
## [4,] 3 0 2
svd(A,nu=4,nv=3) #求矩陣A之SVD分解,設定U為4x4,V為3x3
## $d
## [1] 4.000000 3.741657 1.000000
##
## $u
## [,1] [,2] [,3] [,4]
## [1,] 0 -0.2223748 5.547002e-01 -0.8017837
## [2,] 0 -0.1482499 -8.320503e-01 -0.5345225
## [3,] 1 0.0000000 0.000000e+00 0.0000000
## [4,] 0 -0.9636241 -1.110223e-16 0.2672612
##
## $v
## [,1] [,2] [,3]
## [1,] 0 -0.8320503 0.5547002
## [2,] 1 0.0000000 0.0000000
## [3,] 0 -0.5547002 -0.8320503
## 自行構建一個10x10矩陣(影片例)
(A <- matrix(c(rep(0,20),rep(c(0,1,1,1,1,1,1,1,1,0),2),rep(c(0,1,1,0,0,0,0,1,1,0),2),rep(c(0,1,1,1,1,1,1,1,1,0),2),rep(0,20)),nrow=10))
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,] 0 0 0 0 0 0 0 0 0 0
## [2,] 0 0 1 1 1 1 1 1 0 0
## [3,] 0 0 1 1 1 1 1 1 0 0
## [4,] 0 0 1 1 0 0 1 1 0 0
## [5,] 0 0 1 1 0 0 1 1 0 0
## [6,] 0 0 1 1 0 0 1 1 0 0
## [7,] 0 0 1 1 0 0 1 1 0 0
## [8,] 0 0 1 1 1 1 1 1 0 0
## [9,] 0 0 1 1 1 1 1 1 0 0
## [10,] 0 0 0 0 0 0 0 0 0 0
image(A,col=topo.colors(256)) # 用image指令畫圖

s <- svd(A,nu=10,nv=10) # 將svd分解的結果存入s
(D <- diag(s$d)) # 取出奇異值做成矩陣
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 6.040896 0.000000 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
## [2,] 0.000000 1.872853 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
## [3,] 0.000000 0.000000 7.918465e-16 0.000000e+00 0.000000e+00 0.000000e+00
## [4,] 0.000000 0.000000 0.000000e+00 1.275686e-16 0.000000e+00 0.000000e+00
## [5,] 0.000000 0.000000 0.000000e+00 0.000000e+00 3.408907e-33 0.000000e+00
## [6,] 0.000000 0.000000 0.000000e+00 0.000000e+00 0.000000e+00 1.253829e-49
## [7,] 0.000000 0.000000 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
## [8,] 0.000000 0.000000 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
## [9,] 0.000000 0.000000 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
## [10,] 0.000000 0.000000 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
## [,7] [,8] [,9] [,10]
## [1,] 0 0 0 0
## [2,] 0 0 0 0
## [3,] 0 0 0 0
## [4,] 0 0 0 0
## [5,] 0 0 0 0
## [6,] 0 0 0 0
## [7,] 0 0 0 0
## [8,] 0 0 0 0
## [9,] 0 0 0 0
## [10,] 0 0 0 0
image(D,col=topo.colors(256)) # 用image指令畫圖

AA <- t(A)%*%A # 計算A的轉置矩陣乘以A
g <- eigen(AA) # 將特徵值與特徵向量的計算結果存入g
(V <- diag(g$values)) # 取出特徵值做成矩陣
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
## [1,] 36.49242 0.000000 0.000000e+00 0.00000e+00 0.000000e+00 0 0 0
## [2,] 0.00000 3.507577 0.000000e+00 0.00000e+00 0.000000e+00 0 0 0
## [3,] 0.00000 0.000000 3.647876e-16 0.00000e+00 0.000000e+00 0 0 0
## [4,] 0.00000 0.000000 0.000000e+00 1.97373e-16 0.000000e+00 0 0 0
## [5,] 0.00000 0.000000 0.000000e+00 0.00000e+00 4.930381e-32 0 0 0
## [6,] 0.00000 0.000000 0.000000e+00 0.00000e+00 0.000000e+00 0 0 0
## [7,] 0.00000 0.000000 0.000000e+00 0.00000e+00 0.000000e+00 0 0 0
## [8,] 0.00000 0.000000 0.000000e+00 0.00000e+00 0.000000e+00 0 0 0
## [9,] 0.00000 0.000000 0.000000e+00 0.00000e+00 0.000000e+00 0 0 0
## [10,] 0.00000 0.000000 0.000000e+00 0.00000e+00 0.000000e+00 0 0 0
## [,9] [,10]
## [1,] 0 0.000000e+00
## [2,] 0 0.000000e+00
## [3,] 0 0.000000e+00
## [4,] 0 0.000000e+00
## [5,] 0 0.000000e+00
## [6,] 0 0.000000e+00
## [7,] 0 0.000000e+00
## [8,] 0 0.000000e+00
## [9,] 0 0.000000e+00
## [10,] 0 -4.749287e-16
image(V,col=topo.colors(256)) # 用image指令畫圖

## 擷取矩陣的一部分
(RA <- A[3:8,3:8])
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 1 1 1 1 1
## [2,] 1 1 0 0 1 1
## [3,] 1 1 0 0 1 1
## [4,] 1 1 0 0 1 1
## [5,] 1 1 0 0 1 1
## [6,] 1 1 1 1 1 1
image(RA,col=topo.colors(256)) # 用image指令畫圖

s <- svd(RA,nu=6,nv=6) # 將svd分解的結果存入s
(D <- diag(s$d)) # 取出奇異值做成矩陣
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 5.048676 0.000000 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
## [2,] 0.000000 1.584574 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
## [3,] 0.000000 0.000000 6.613243e-16 0.000000e+00 0.000000e+00 0.000000e+00
## [4,] 0.000000 0.000000 0.000000e+00 1.695558e-17 0.000000e+00 0.000000e+00
## [5,] 0.000000 0.000000 0.000000e+00 0.000000e+00 2.219185e-33 0.000000e+00
## [6,] 0.000000 0.000000 0.000000e+00 0.000000e+00 0.000000e+00 2.372586e-50
image(D,col=topo.colors(256)) # 用image指令畫圖

## 透過函數繪製影像圖(修改自R範例)
x <- y <- seq(-4*pi, 4*pi, len = 500)
r <- sqrt(outer(x^2, y^2, "+"))
image(z = z <- cos(r^2)*exp(-r/6), col = gray((0:256)/256))

image(z, axes = FALSE, main = "Math can be beautiful ...",
xlab = expression(cos(r^2) * e^{-r/6}))

image(z, axes = FALSE, main = "Math can be beautiful ...",
xlab = expression(cos(r^2) * e^{-r/6}),col=cm.colors(16))

## Page35
## 模擬醉漢走路,路寬左右各十米處有懸崖
x<-0 ; count<-0
repeat{x<- x + sample(c(-1,1),1) ; print(x); count<-count+1; if(x>=10 || x<=-10) {print(count);break}}
## [1] -1
## [1] 0
## [1] -1
## [1] 0
## [1] -1
## [1] -2
## [1] -3
## [1] -2
## [1] -3
## [1] -4
## [1] -5
## [1] -4
## [1] -5
## [1] -4
## [1] -5
## [1] -6
## [1] -7
## [1] -6
## [1] -5
## [1] -4
## [1] -5
## [1] -4
## [1] -3
## [1] -2
## [1] -3
## [1] -2
## [1] -3
## [1] -2
## [1] -3
## [1] -2
## [1] -1
## [1] -2
## [1] -3
## [1] -2
## [1] -3
## [1] -2
## [1] -1
## [1] 0
## [1] -1
## [1] -2
## [1] -1
## [1] 0
## [1] -1
## [1] -2
## [1] -1
## [1] 0
## [1] -1
## [1] 0
## [1] 1
## [1] 0
## [1] -1
## [1] 0
## [1] 1
## [1] 2
## [1] 1
## [1] 0
## [1] -1
## [1] -2
## [1] -1
## [1] 0
## [1] -1
## [1] 0
## [1] -1
## [1] -2
## [1] -3
## [1] -4
## [1] -3
## [1] -4
## [1] -5
## [1] -4
## [1] -3
## [1] -4
## [1] -5
## [1] -4
## [1] -3
## [1] -2
## [1] -3
## [1] -4
## [1] -5
## [1] -4
## [1] -3
## [1] -4
## [1] -5
## [1] -4
## [1] -3
## [1] -2
## [1] -3
## [1] -4
## [1] -5
## [1] -4
## [1] -3
## [1] -4
## [1] -3
## [1] -2
## [1] -1
## [1] -2
## [1] -3
## [1] -4
## [1] -3
## [1] -2
## [1] -1
## [1] 0
## [1] -1
## [1] -2
## [1] -1
## [1] -2
## [1] -1
## [1] 0
## [1] -1
## [1] 0
## [1] -1
## [1] 0
## [1] -1
## [1] 0
## [1] 1
## [1] 0
## [1] 1
## [1] 0
## [1] 1
## [1] 0
## [1] 1
## [1] 2
## [1] 1
## [1] 0
## [1] -1
## [1] 0
## [1] 1
## [1] 0
## [1] -1
## [1] -2
## [1] -3
## [1] -2
## [1] -3
## [1] -2
## [1] -3
## [1] -4
## [1] -3
## [1] -4
## [1] -5
## [1] -6
## [1] -5
## [1] -4
## [1] -3
## [1] -2
## [1] -1
## [1] 0
## [1] -1
## [1] -2
## [1] -1
## [1] 0
## [1] 1
## [1] 0
## [1] 1
## [1] 2
## [1] 1
## [1] 0
## [1] -1
## [1] 0
## [1] -1
## [1] -2
## [1] -1
## [1] -2
## [1] -1
## [1] -2
## [1] -1
## [1] -2
## [1] -1
## [1] 0
## [1] -1
## [1] -2
## [1] -3
## [1] -4
## [1] -3
## [1] -4
## [1] -5
## [1] -4
## [1] -3
## [1] -4
## [1] -5
## [1] -6
## [1] -5
## [1] -4
## [1] -3
## [1] -2
## [1] -3
## [1] -2
## [1] -3
## [1] -4
## [1] -3
## [1] -2
## [1] -1
## [1] -2
## [1] -1
## [1] 0
## [1] -1
## [1] 0
## [1] 1
## [1] 0
## [1] -1
## [1] -2
## [1] -3
## [1] -4
## [1] -3
## [1] -2
## [1] -1
## [1] 0
## [1] -1
## [1] 0
## [1] 1
## [1] 2
## [1] 3
## [1] 2
## [1] 1
## [1] 0
## [1] -1
## [1] -2
## [1] -1
## [1] -2
## [1] -1
## [1] 0
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 5
## [1] 6
## [1] 7
## [1] 6
## [1] 5
## [1] 4
## [1] 3
## [1] 4
## [1] 3
## [1] 2
## [1] 3
## [1] 2
## [1] 3
## [1] 4
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 5
## [1] 4
## [1] 3
## [1] 4
## [1] 3
## [1] 2
## [1] 1
## [1] 2
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 3
## [1] 2
## [1] 1
## [1] 0
## [1] 1
## [1] 0
## [1] 1
## [1] 0
## [1] 1
## [1] 2
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 5
## [1] 6
## [1] 7
## [1] 6
## [1] 5
## [1] 6
## [1] 7
## [1] 8
## [1] 7
## [1] 6
## [1] 7
## [1] 8
## [1] 7
## [1] 8
## [1] 9
## [1] 10
## [1] 288
## 另一種寫法,紀錄過程
x<-c() ; count<-0
repeat{x<- rbind(x, sample(c(-1,1),1)) ; count<-count+1; if(sum(x)>=10 || sum(x)<=-10) {print(x); print(count); break}}
## [,1]
## [1,] -1
## [2,] 1
## [3,] 1
## [4,] -1
## [5,] -1
## [6,] -1
## [7,] -1
## [8,] 1
## [9,] 1
## [10,] -1
## [11,] 1
## [12,] -1
## [13,] -1
## [14,] -1
## [15,] -1
## [16,] -1
## [17,] 1
## [18,] -1
## [19,] 1
## [20,] 1
## [21,] -1
## [22,] 1
## [23,] -1
## [24,] 1
## [25,] -1
## [26,] -1
## [27,] -1
## [28,] 1
## [29,] 1
## [30,] 1
## [31,] -1
## [32,] 1
## [33,] 1
## [34,] -1
## [35,] -1
## [36,] 1
## [37,] -1
## [38,] -1
## [39,] -1
## [40,] -1
## [41,] -1
## [42,] -1
## [1] 42
## 為什麼你通常會輸光? (模擬100次,賭徒與莊家財力 10:100)
for ( i in 1:100) {
x<-0 ; count<-0
repeat{x<- x + sample(c(-1,1),1) ; count<-count+1; if(x>=100 || x<=-10) {cat("x=",x,"count=",count, "\n"); break}} }
## x= -10 count= 2618
## x= -10 count= 32
## x= -10 count= 30
## x= 100 count= 2098
## x= -10 count= 1906
## x= -10 count= 1300
## x= -10 count= 58
## x= -10 count= 2782
## x= -10 count= 74
## x= -10 count= 3548
## x= -10 count= 200
## x= -10 count= 120
## x= -10 count= 24
## x= 100 count= 4034
## x= -10 count= 26
## x= -10 count= 58
## x= -10 count= 164
## x= -10 count= 74
## x= -10 count= 212
## x= -10 count= 30
## x= -10 count= 76
## x= 100 count= 1340
## x= -10 count= 2006
## x= -10 count= 184
## x= -10 count= 352
## x= -10 count= 236
## x= -10 count= 744
## x= -10 count= 302
## x= -10 count= 208
## x= -10 count= 332
## x= -10 count= 232
## x= -10 count= 3138
## x= -10 count= 56
## x= -10 count= 454
## x= -10 count= 394
## x= -10 count= 28
## x= 100 count= 2474
## x= -10 count= 102
## x= -10 count= 106
## x= -10 count= 788
## x= -10 count= 854
## x= -10 count= 316
## x= -10 count= 24
## x= -10 count= 134
## x= 100 count= 7770
## x= -10 count= 312
## x= -10 count= 686
## x= -10 count= 192
## x= -10 count= 7194
## x= -10 count= 140
## x= -10 count= 154
## x= -10 count= 160
## x= -10 count= 410
## x= -10 count= 34
## x= -10 count= 162
## x= -10 count= 1346
## x= -10 count= 54
## x= -10 count= 5346
## x= -10 count= 32
## x= -10 count= 188
## x= -10 count= 66
## x= -10 count= 2596
## x= -10 count= 42
## x= -10 count= 64
## x= -10 count= 76
## x= 100 count= 4514
## x= -10 count= 300
## x= -10 count= 8560
## x= -10 count= 456
## x= -10 count= 2374
## x= -10 count= 98
## x= -10 count= 188
## x= -10 count= 66
## x= -10 count= 40
## x= 100 count= 3912
## x= -10 count= 1536
## x= -10 count= 334
## x= -10 count= 756
## x= -10 count= 10
## x= -10 count= 5604
## x= -10 count= 672
## x= -10 count= 114
## x= -10 count= 42
## x= -10 count= 352
## x= -10 count= 140
## x= -10 count= 716
## x= -10 count= 40
## x= -10 count= 1432
## x= -10 count= 2416
## x= -10 count= 424
## x= -10 count= 124
## x= 100 count= 2206
## x= -10 count= 722
## x= -10 count= 32
## x= -10 count= 54
## x= -10 count= 676
## x= 100 count= 1106
## x= -10 count= 48
## x= -10 count= 46
## x= -10 count= 108
## 為什麼你通常會輸光? (模擬100次,調高莊家的勝率,賭徒與莊家財力 10:100)
for ( i in 1:100) {
x<-0 ; count<-0
repeat{x<- x + sample(c(-1,1,-1,1,-1,1,-1,1,-1,1,-1),1) ; count<-count+1; if(x>=100 || x<=-10) {cat("x=",x,"count=",count, "\n"); break}} }
## x= -10 count= 102
## x= -10 count= 80
## x= -10 count= 156
## x= -10 count= 174
## x= -10 count= 26
## x= -10 count= 30
## x= -10 count= 24
## x= -10 count= 138
## x= -10 count= 14
## x= -10 count= 12
## x= -10 count= 188
## x= -10 count= 42
## x= -10 count= 100
## x= -10 count= 92
## x= -10 count= 38
## x= -10 count= 164
## x= -10 count= 128
## x= -10 count= 30
## x= -10 count= 68
## x= -10 count= 116
## x= -10 count= 158
## x= -10 count= 112
## x= -10 count= 86
## x= -10 count= 32
## x= -10 count= 40
## x= -10 count= 58
## x= -10 count= 30
## x= -10 count= 42
## x= -10 count= 224
## x= -10 count= 116
## x= -10 count= 40
## x= -10 count= 56
## x= -10 count= 16
## x= -10 count= 208
## x= -10 count= 126
## x= -10 count= 72
## x= -10 count= 108
## x= -10 count= 28
## x= -10 count= 416
## x= -10 count= 38
## x= -10 count= 40
## x= -10 count= 26
## x= -10 count= 26
## x= -10 count= 20
## x= -10 count= 192
## x= -10 count= 30
## x= -10 count= 72
## x= -10 count= 136
## x= -10 count= 128
## x= -10 count= 36
## x= -10 count= 444
## x= -10 count= 84
## x= -10 count= 20
## x= -10 count= 54
## x= -10 count= 84
## x= -10 count= 208
## x= -10 count= 426
## x= -10 count= 56
## x= -10 count= 24
## x= -10 count= 38
## x= -10 count= 142
## x= -10 count= 46
## x= -10 count= 300
## x= -10 count= 548
## x= -10 count= 120
## x= -10 count= 70
## x= -10 count= 32
## x= -10 count= 66
## x= -10 count= 100
## x= -10 count= 158
## x= -10 count= 320
## x= -10 count= 90
## x= -10 count= 32
## x= -10 count= 70
## x= -10 count= 28
## x= -10 count= 22
## x= -10 count= 94
## x= -10 count= 118
## x= -10 count= 16
## x= -10 count= 64
## x= -10 count= 536
## x= -10 count= 638
## x= -10 count= 24
## x= -10 count= 34
## x= -10 count= 68
## x= -10 count= 12
## x= -10 count= 68
## x= -10 count= 22
## x= -10 count= 138
## x= -10 count= 48
## x= -10 count= 164
## x= -10 count= 20
## x= -10 count= 488
## x= -10 count= 134
## x= -10 count= 30
## x= -10 count= 80
## x= -10 count= 250
## x= -10 count= 30
## x= -10 count= 22
## x= -10 count= 30
## 為什麼你通常會輸光? (模擬100次,調整莊家的勝率至501/1000,賭徒與莊家財力 10:100)
for ( i in 1:100) {
x<-0 ; count<-0
repeat{x<- x + sample(c(rep(1,499),rep(-1,501)),1) ; count<-count+1; if(x>=100 || x<=-10) {cat("x=",x,"count=",count, "\n"); break}} }
## x= -10 count= 470
## x= -10 count= 2722
## x= -10 count= 114
## x= -10 count= 182
## x= -10 count= 364
## x= 100 count= 5452
## x= -10 count= 74
## x= -10 count= 40
## x= -10 count= 674
## x= -10 count= 3104
## x= -10 count= 206
## x= -10 count= 24
## x= -10 count= 110
## x= -10 count= 18
## x= -10 count= 36
## x= -10 count= 1084
## x= -10 count= 52
## x= -10 count= 72
## x= -10 count= 674
## x= -10 count= 80
## x= -10 count= 214
## x= -10 count= 80
## x= -10 count= 24
## x= -10 count= 1008
## x= 100 count= 2382
## x= -10 count= 2596
## x= -10 count= 454
## x= -10 count= 112
## x= 100 count= 2264
## x= -10 count= 180
## x= -10 count= 140
## x= -10 count= 76
## x= -10 count= 1480
## x= -10 count= 124
## x= -10 count= 1296
## x= -10 count= 104
## x= -10 count= 256
## x= -10 count= 14
## x= -10 count= 4086
## x= -10 count= 200
## x= -10 count= 168
## x= 100 count= 3022
## x= -10 count= 128
## x= -10 count= 446
## x= -10 count= 22
## x= -10 count= 76
## x= -10 count= 194
## x= -10 count= 1072
## x= 100 count= 5126
## x= 100 count= 9312
## x= -10 count= 574
## x= -10 count= 32
## x= -10 count= 232
## x= -10 count= 348
## x= -10 count= 58
## x= -10 count= 4060
## x= -10 count= 246
## x= -10 count= 122
## x= -10 count= 58
## x= -10 count= 1422
## x= -10 count= 218
## x= -10 count= 36
## x= 100 count= 4158
## x= -10 count= 78
## x= 100 count= 3736
## x= -10 count= 144
## x= -10 count= 18
## x= -10 count= 5008
## x= -10 count= 22
## x= -10 count= 24
## x= 100 count= 8640
## x= -10 count= 118
## x= -10 count= 38
## x= -10 count= 530
## x= -10 count= 150
## x= -10 count= 44
## x= -10 count= 324
## x= -10 count= 74
## x= -10 count= 1674
## x= -10 count= 36
## x= -10 count= 168
## x= -10 count= 80
## x= -10 count= 172
## x= -10 count= 58
## x= -10 count= 278
## x= -10 count= 2890
## x= -10 count= 3366
## x= -10 count= 4488
## x= -10 count= 1228
## x= -10 count= 2126
## x= -10 count= 5732
## x= -10 count= 14
## x= -10 count= 14
## x= -10 count= 9826
## x= -10 count= 104
## x= -10 count= 322
## x= -10 count= 336
## x= -10 count= 160
## x= -10 count= 626
## x= -10 count= 426
## Page36
A<-matrix(c(.5,.4,.2,.3,.3,.4,.2,.3,.4),nrow=3, dimnames=list(c("晴","陰","雨"),c("晴","陰","雨")))
A
## 晴 陰 雨
## 晴 0.5 0.3 0.2
## 陰 0.4 0.3 0.3
## 雨 0.2 0.4 0.4
# 晴 陰 雨
# 晴 0.5 0.3 0.2
# 陰 0.4 0.3 0.3
# 雨 0.2 0.4 0.4
# Ex: 0.41 = 0.5*0.5+0.3*0.4+0.2*0.2
A%*%A
## 晴 陰 雨
## 晴 0.41 0.32 0.27
## 陰 0.38 0.33 0.29
## 雨 0.34 0.34 0.32
# 晴 陰 雨
# 晴 0.41 0.32 0.27
# 陰 0.38 0.33 0.29
# 雨 0.34 0.34 0.32
A%*%A%*%A
## 晴 陰 雨
## 晴 0.387 0.327 0.286
## 陰 0.380 0.329 0.291
## 雨 0.370 0.332 0.298
# 晴 陰 雨
# 晴 0.387 0.327 0.286
# 陰 0.380 0.329 0.291
# 雨 0.370 0.332 0.298
P <- matrix(c(.7,0,.5,0,.3,0,.5,0,0,.4,0,.2,0,.6,0,.8),nrow=4)
row.names(P) <- c("RR","RN","NR","NN")
colnames(P) <- c("RR","RN","NR","NN")
P
## RR RN NR NN
## RR 0.7 0.3 0.0 0.0
## RN 0.0 0.0 0.4 0.6
## NR 0.5 0.5 0.0 0.0
## NN 0.0 0.0 0.2 0.8
# RR RN NR NN
# RR 0.7 0.3 0.0 0.0
# RN 0.0 0.0 0.4 0.6
# NR 0.5 0.5 0.0 0.0
# NN 0.0 0.0 0.2 0.8
## "RRNRNNR" => RR -> RN -> NR -> RN -> NN -> NR
(P1 <- 0.3*0.4*0.5*0.6*0.2)
## [1] 0.0072
## "RRRNNRN" => RR -> RR -> RN -> NN -> NR -> RN
(P2 <- 0.7*0.3*0.6*0.2*0.5)
## [1] 0.0126
## Page45
## Entropy的計算可用定義函數的方式簡化,例如:
## ent <- function(x) {sum(-x*log2(x))}
(H <- -(8*(1/16)*log2(1/16)+24*(1/48)*log2(1/46)))
## [1] 4.761781
## 若32隊奪冠機會完全相同,則由哪對奪冠不確定性高,此時 H=32*-(1/32)*log2(1/32)=5 達最大值)
## Page47
(HX <- -((1/2)*log2(1/2)+(1/4)*log2(1/4)+2*(1/8)*log2(1/8)))
## [1] 1.75
(HY <- -(4*(1/4)*log2(1/4)))
## [1] 2
(HYIX <- -((1/8)*log2(1/4)+2*(1/16)*log2(1/8)+(1/4)*log2(1/2)+(1/8)*log2(1/2)+2*(1/16)*log2(1/4)+2*(1/32)*log2(1/4)+(1/16)*log2(1/2)+2*(1/32)*log2(1/4)+(1/16)*log2(1/2)))
## [1] 1.625
(HXIY <- -((1/8)*log2(1/2)+(1/16)*log2(1/4)+2*(1/32)*log2(1/8)+(1/16)*log2(1/4)+(1/8)*log2(1/2)+2*(1/32)*log2(1/8)+4*(1/16)*log2(1/4)+(1/4)*log2(1)))
## [1] 1.375
(IXY <- -((1/8)*log2(1)+(1/16)*log2(1)+2*(1/32)*log2(1)+(1/16)*log2(1/2)+(1/8)*log2(1/2)+2*(1/32)*log2(1)+(1/16)*log2(1/2)+(1/16)*log2(1)+2*(1/16)*log2(2)+(1/4)*log2(1/2)))
## [1] 0.375
(IXY <- HX-HXIY) # 另一作法
## [1] 0.375
(IYX <- HY-HYIX)
## [1] 0.375
(IXY==IYX) # 可看出 I(X;Y) = I(Y;X)
## [1] TRUE
(HXY <- -(2*(1/8)*log2(1/8)+(1/4)*log2(1/4)+6*(1/16)*log2(1/16)+4*(1/32)*log2(1/32)))
## [1] 3.375
(IXY==HX+HY-HXY) # 可看出 I(X;Y) = H(X)+H(Y)-H(X,Y)
## [1] TRUE
(IXX= ((1/2)*log2((1/2)/(1/4))+(1/4)*log2((1/4)/(1/16))+2*(1/8)*log2((1/8)/(1/64))))
## [1] 1.75
(IXX==HX) # 可看出 I(X;X) = H(X)
## [1] TRUE
## Page48 (Entropy maximized when p=1/2)
(fx <- deriv(~ -(x*log2(x)+(1-x)*log2(1-x)),"x"))
## expression({
## .expr1 <- log2(x)
## .expr3 <- 1 - x
## .expr4 <- log2(.expr3)
## .expr8 <- log(2)
## .value <- -(x * .expr1 + .expr3 * .expr4)
## .grad <- array(0, c(length(.value), 1L), list(NULL, c("x")))
## .grad[, "x"] <- -(.expr1 + x * (1/(x * .expr8)) - (.expr3 *
## (1/(.expr3 * .expr8)) + .expr4))
## attr(.value, "gradient") <- .grad
## .value
## })
x <- 0.5
eval(fx)
## [1] 1
## attr(,"gradient")
## x
## [1,] 0
## Page50
A <- matrix(c(1,3,1,2,3,4,0,5,2,1,2,3,2,5,-1,3),nrow=4)
B <- matrix(c(2,1,2,3,1,3,1,4,0,1,-2,2,4,0,0,-1),nrow=4)
(AB <- A%*%B) # 將 A、B矩陣相乘並印出結果
## [,1] [,2] [,3] [,4]
## [1,] 15 20 3 2
## [2,] 27 36 12 7
## [3,] 3 -1 -6 5
## [4,] 24 32 5 5
A1B <- A[1,]%*%B # 將A拆成4個小矩陣,分別乘以B
A2B <- A[2,]%*%B
A3B <- A[3,]%*%B
A4B <- A[4,]%*%B
(JA <- rbind(A1B,A2B,A3B,A4B)) # 將個四乘出來的部分合併
## [,1] [,2] [,3] [,4]
## [1,] 15 20 3 2
## [2,] 27 36 12 7
## [3,] 3 -1 -6 5
## [4,] 24 32 5 5
(AB==A%*%B) # 與A、B矩陣相乘結果比較,完全一致
## [,1] [,2] [,3] [,4]
## [1,] TRUE TRUE TRUE TRUE
## [2,] TRUE TRUE TRUE TRUE
## [3,] TRUE TRUE TRUE TRUE
## [4,] TRUE TRUE TRUE TRUE
(A23B <- A[2,1]*B[1,3]+A[2,2]*B[2,3]+A[2,3]*B[3,3]+A[2,4]*B[4,3]) # MapReduce分治
## [1] 12
(A23B==AB[2,3]) # 與A、B矩陣相乘結果之第二列第三行元素,完全一致
## [1] TRUE
K <- matrix(c(1,2,2,5),nrow=2)
MATH <- matrix(c(13,1,20,8),nrow=2)
ENC <- K%*%MATH # 用 K 做 Encryption
KI <- solve(K) # As a key to Decryption
DEC <- KI%*%ENC
(DEC==MATH) # 判斷解碼後結果與原始文字所代表矩陣是否一致
## [,1] [,2]
## [1,] TRUE TRUE
## [2,] TRUE TRUE
###### 測試 MapReduce分治算法
A <- matrix(rnorm(1000000),nrow=1000)
B <- matrix(rnorm(1000000),nrow=1000)
run1<-function(){
AB <- A%*%B ; print(AB[3,2])
}
run2<-function(){
s<-0
{for (i in 1:nrow(A)) {s <- s + A[3,i]*B[i,2] }
}
print(s)
}
system.time(run1())
## [1] 12.46043
## 使用者 系統 流逝
## 0.52 0.00 0.51
system.time(run2())
## [1] 12.46043
## 使用者 系統 流逝
## 0 0 0
######