## 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-10~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(0.8,0.3,0.6,0.4),nrow=2)
BX <- matrix(c(4,3,0.6,0.4),nrow=2)
BY <- matrix(c(0.8,0.3,4,3),nrow=2)
cat("X=",det(BX)/det(B), "\n") # 計算 x 之值並印出,換行
## X= -1.428571
cat("Y=",det(BY)/det(B), "\n") # 計算 y 之值並印出,換行
## Y= 8.571429
C <- matrix(c(3/5,1/4,1/2,4/3),nrow=2)
CX <- matrix(c(2,4,1/2,4/3),nrow=2)
CY <- matrix(c(3/5,1/4,2,4),nrow=2)
cat("X=",det(CX)/det(C), "\n") # 計算 x 之值並印出,換行
## X= 0.9876543
cat("Y=",det(CY)/det(C), "\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-12
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,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
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 => 無解
## 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] 0
## [1] -1
## [1] -2
## [1] -3
## [1] -4
## [1] -5
## [1] -6
## [1] -7
## [1] -6
## [1] -5
## [1] -4
## [1] -3
## [1] -4
## [1] -3
## [1] -2
## [1] -1
## [1] -2
## [1] -3
## [1] -2
## [1] -1
## [1] 0
## [1] 1
## [1] 0
## [1] -1
## [1] -2
## [1] -1
## [1] 0
## [1] -1
## [1] -2
## [1] -3
## [1] -2
## [1] -1
## [1] 0
## [1] -1
## [1] -2
## [1] -3
## [1] -2
## [1] -3
## [1] -4
## [1] -5
## [1] -4
## [1] -3
## [1] -2
## [1] -1
## [1] 0
## [1] 1
## [1] 2
## [1] 1
## [1] 2
## [1] 3
## [1] 2
## [1] 1
## [1] 2
## [1] 3
## [1] 2
## [1] 3
## [1] 2
## [1] 3
## [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] 5
## [1] 4
## [1] 5
## [1] 4
## [1] 5
## [1] 4
## [1] 5
## [1] 4
## [1] 5
## [1] 4
## [1] 3
## [1] 4
## [1] 3
## [1] 4
## [1] 3
## [1] 2
## [1] 3
## [1] 4
## [1] 3
## [1] 2
## [1] 3
## [1] 2
## [1] 1
## [1] 0
## [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] 2
## [1] 3
## [1] 2
## [1] 1
## [1] 0
## [1] -1
## [1] 0
## [1] -1
## [1] 0
## [1] -1
## [1] -2
## [1] -3
## [1] -4
## [1] -5
## [1] -4
## [1] -5
## [1] -6
## [1] -5
## [1] -6
## [1] -5
## [1] -6
## [1] -7
## [1] -6
## [1] -7
## [1] -6
## [1] -5
## [1] -6
## [1] -7
## [1] -8
## [1] -9
## [1] -10
## [1] 146
## 另一種寫法,紀錄過程
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
## [43,] 1
## [44,] -1
## [45,] 1
## [46,] 1
## [47,] -1
## [48,] -1
## [49,] 1
## [50,] -1
## [51,] 1
## [52,] -1
## [53,] -1
## [54,] 1
## [55,] -1
## [56,] 1
## [57,] -1
## [58,] 1
## [59,] -1
## [60,] -1
## [61,] 1
## [62,] -1
## [63,] 1
## [64,] -1
## [65,] 1
## [66,] 1
## [67,] -1
## [68,] -1
## [69,] -1
## [70,] 1
## [71,] -1
## [72,] 1
## [73,] -1
## [74,] -1
## [75,] 1
## [76,] -1
## [77,] 1
## [78,] -1
## [79,] 1
## [80,] -1
## [81,] 1
## [82,] 1
## [83,] -1
## [84,] 1
## [85,] 1
## [86,] -1
## [87,] -1
## [88,] -1
## [89,] 1
## [90,] 1
## [91,] 1
## [92,] -1
## [93,] 1
## [94,] -1
## [95,] 1
## [96,] 1
## [97,] 1
## [98,] 1
## [99,] 1
## [100,] -1
## [101,] 1
## [102,] 1
## [103,] -1
## [104,] -1
## [105,] -1
## [106,] 1
## [107,] 1
## [108,] -1
## [109,] 1
## [110,] 1
## [111,] -1
## [112,] 1
## [113,] 1
## [114,] 1
## [115,] -1
## [116,] 1
## [117,] 1
## [118,] 1
## [1] 118
## 為什麼你通常會輸光? (模擬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= 48
## x= -10 count= 320
## x= -10 count= 212
## x= -10 count= 1798
## x= -10 count= 574
## x= -10 count= 154
## x= -10 count= 2316
## x= -10 count= 3662
## x= -10 count= 110
## x= -10 count= 82
## x= -10 count= 422
## x= -10 count= 138
## x= -10 count= 48
## x= -10 count= 710
## x= -10 count= 94
## x= -10 count= 54
## x= -10 count= 2632
## x= -10 count= 770
## x= -10 count= 46
## x= -10 count= 224
## x= -10 count= 1194
## x= -10 count= 298
## x= -10 count= 3686
## x= -10 count= 3572
## x= 100 count= 1922
## x= -10 count= 322
## x= -10 count= 20
## x= 100 count= 760
## x= -10 count= 10878
## x= -10 count= 2656
## x= -10 count= 24
## x= -10 count= 452
## x= 100 count= 2766
## x= -10 count= 1064
## x= -10 count= 1060
## x= -10 count= 88
## x= 100 count= 6278
## x= -10 count= 432
## x= -10 count= 38
## x= -10 count= 174
## x= -10 count= 16
## x= -10 count= 250
## x= -10 count= 524
## x= -10 count= 34
## x= -10 count= 320
## x= -10 count= 186
## x= -10 count= 84
## x= -10 count= 62
## x= -10 count= 244
## x= -10 count= 360
## x= -10 count= 456
## x= -10 count= 26
## x= -10 count= 24
## x= -10 count= 66
## x= -10 count= 120
## x= -10 count= 184
## x= -10 count= 36
## x= -10 count= 78
## x= -10 count= 42
## x= -10 count= 194
## x= -10 count= 156
## x= -10 count= 290
## x= -10 count= 86
## x= -10 count= 502
## x= -10 count= 2520
## x= -10 count= 590
## x= -10 count= 382
## x= -10 count= 196
## x= -10 count= 138
## x= -10 count= 214
## x= -10 count= 30
## x= -10 count= 276
## x= -10 count= 6384
## x= -10 count= 1558
## x= -10 count= 388
## x= -10 count= 234
## x= -10 count= 930
## x= -10 count= 116
## x= -10 count= 108
## x= -10 count= 56
## x= -10 count= 106
## x= -10 count= 46
## x= -10 count= 242
## x= -10 count= 1226
## x= -10 count= 128
## x= -10 count= 140
## x= -10 count= 1086
## x= -10 count= 344
## x= -10 count= 98
## x= 100 count= 3392
## x= -10 count= 236
## x= -10 count= 538
## x= -10 count= 3060
## x= -10 count= 378
## x= -10 count= 84
## x= -10 count= 7126
## x= -10 count= 144
## x= -10 count= 4888
## x= -10 count= 3184
## x= -10 count= 934
## 為什麼你通常會輸光? (模擬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= 64
## x= -10 count= 22
## x= -10 count= 102
## x= -10 count= 30
## x= -10 count= 42
## x= -10 count= 80
## x= -10 count= 192
## x= -10 count= 78
## x= -10 count= 30
## x= -10 count= 18
## x= -10 count= 226
## x= -10 count= 60
## x= -10 count= 24
## x= -10 count= 164
## x= -10 count= 236
## x= -10 count= 268
## x= -10 count= 82
## x= -10 count= 40
## x= -10 count= 104
## x= -10 count= 78
## x= -10 count= 266
## x= -10 count= 64
## x= -10 count= 170
## x= -10 count= 356
## x= -10 count= 266
## x= -10 count= 132
## x= -10 count= 36
## x= -10 count= 28
## x= -10 count= 116
## x= -10 count= 26
## x= -10 count= 14
## x= -10 count= 40
## x= -10 count= 60
## x= -10 count= 16
## x= -10 count= 360
## x= -10 count= 62
## x= -10 count= 192
## x= -10 count= 208
## x= -10 count= 34
## x= -10 count= 132
## x= -10 count= 24
## x= -10 count= 608
## x= -10 count= 62
## x= -10 count= 24
## x= -10 count= 40
## x= -10 count= 130
## x= -10 count= 36
## x= -10 count= 338
## x= -10 count= 62
## x= -10 count= 60
## x= -10 count= 82
## x= -10 count= 388
## x= -10 count= 80
## x= -10 count= 62
## x= -10 count= 28
## x= -10 count= 118
## x= -10 count= 166
## x= -10 count= 108
## x= -10 count= 162
## x= -10 count= 178
## x= -10 count= 56
## x= -10 count= 94
## x= -10 count= 64
## x= -10 count= 116
## x= -10 count= 578
## x= -10 count= 98
## x= -10 count= 178
## x= -10 count= 80
## x= -10 count= 202
## x= -10 count= 50
## x= -10 count= 56
## x= -10 count= 46
## x= -10 count= 50
## x= -10 count= 76
## x= -10 count= 246
## x= -10 count= 108
## x= -10 count= 80
## x= -10 count= 176
## x= -10 count= 136
## x= -10 count= 46
## x= -10 count= 32
## x= -10 count= 76
## x= -10 count= 376
## x= -10 count= 110
## x= -10 count= 230
## x= -10 count= 46
## x= -10 count= 16
## x= -10 count= 22
## x= -10 count= 28
## x= -10 count= 28
## x= -10 count= 82
## x= -10 count= 66
## x= -10 count= 36
## x= -10 count= 30
## x= -10 count= 50
## x= -10 count= 140
## x= -10 count= 84
## x= -10 count= 40
## x= -10 count= 210
## x= -10 count= 26
## 為什麼你通常會輸光? (模擬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= 122
## x= -10 count= 496
## x= -10 count= 94
## x= -10 count= 294
## x= -10 count= 502
## x= -10 count= 864
## x= -10 count= 252
## x= -10 count= 634
## x= -10 count= 88
## x= -10 count= 46
## x= -10 count= 2622
## x= -10 count= 180
## x= -10 count= 3448
## x= -10 count= 30
## x= -10 count= 58
## x= -10 count= 566
## x= 100 count= 6880
## x= -10 count= 190
## x= -10 count= 252
## x= -10 count= 30
## x= -10 count= 98
## x= -10 count= 140
## x= -10 count= 42
## x= -10 count= 588
## x= -10 count= 40
## x= -10 count= 226
## x= -10 count= 434
## x= -10 count= 3860
## x= -10 count= 186
## x= -10 count= 578
## x= -10 count= 264
## x= -10 count= 14
## x= -10 count= 538
## x= -10 count= 88
## x= -10 count= 352
## x= 100 count= 2670
## x= -10 count= 1042
## x= -10 count= 1978
## x= -10 count= 42
## x= -10 count= 482
## x= -10 count= 442
## x= -10 count= 104
## x= -10 count= 70
## x= -10 count= 80
## x= -10 count= 348
## x= -10 count= 206
## x= -10 count= 58
## x= -10 count= 22
## x= -10 count= 380
## x= -10 count= 238
## x= -10 count= 504
## x= 100 count= 10226
## x= 100 count= 3706
## x= -10 count= 160
## x= -10 count= 84
## x= 100 count= 5732
## x= -10 count= 32
## x= -10 count= 200
## x= -10 count= 750
## x= -10 count= 70
## x= -10 count= 56
## x= -10 count= 50
## x= 100 count= 3158
## x= -10 count= 64
## x= -10 count= 16
## x= -10 count= 46
## x= -10 count= 60
## x= -10 count= 48
## x= -10 count= 70
## x= -10 count= 708
## x= -10 count= 6218
## x= -10 count= 528
## x= -10 count= 1600
## x= -10 count= 60
## x= -10 count= 12
## x= -10 count= 260
## x= -10 count= 66
## x= -10 count= 228
## x= -10 count= 492
## x= -10 count= 78
## x= -10 count= 156
## x= -10 count= 354
## x= -10 count= 20
## x= -10 count= 858
## x= -10 count= 54
## x= -10 count= 144
## x= 100 count= 3210
## x= -10 count= 74
## x= -10 count= 68
## x= -10 count= 108
## x= -10 count= 30
## x= -10 count= 392
## x= -10 count= 1192
## x= -10 count= 466
## x= -10 count= 24
## x= -10 count= 90
## x= -10 count= 82
## x= -10 count= 3292
## x= -10 count= 694
## x= -10 count= 62
## 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] -1.524711
## 使用者 系統 流逝
## 1.06 0.00 1.08
system.time(run2())
## [1] -1.524711
## 使用者 系統 流逝
## 0 0 0
######