内积和外积:
两个向量的内积,即数量积或点积;若x,y是相同长度的向量x%*%y表示内积;R函数crossprod(x,y)也表示作内积,相当于t(x)%*%y,函数tcrossprod(x,y),相当于x%*%t(y),此函数x,y也可以为矩阵。两个向量的外积,即向量级或叉积,x%o%y表示外积;
例:
x <- c(1:4)
y <- c(3:6)
x%*%y
[,1]
[1,] 50
crossprod(x,y)
[,1]
[1,] 50
x%o%y
[,1] [,2] [,3] [,4]
[1,] 3 4 5 6
[2,] 6 8 10 12
[3,] 9 12 15 18
[4,] 12 16 20 24
tcrossprod(x,y)
[,1] [,2] [,3] [,4]
[1,] 3 4 5 6
[2,] 6 8 10 12
[3,] 9 12 15 18
[4,] 12 16 20 24
一般外积函数outer(),它等价于x%o%y
outer()的一般调用格式为
outer(x,y,fun=”*”),其中x,y为矩阵或向量,fun默认为乘法运算。函数outer()在绘制三维曲面时非常有用,它可生成一个x和y的网格。
outer(x,y)
[,1] [,2] [,3] [,4]
[1,] 3 4 5 6
[2,] 6 8 10 12
[3,] 9 12 15 18
[4,] 12 16 20 24
outer()函数在三维视图的应用:
x1 <- seq(-5,5,0.25)
x2 <- seq(-2,2,0.1)
f <- function(x,y) x^2+50*cos(y)
z <- outer(x1,x2,f)
persp(x1,x2,z)
矩阵运算
A <- matrix(c(35,4,12,2,14,11,9,5,11,3,38,12,1,0,4,2),4)
det(A)#行列式
solve(A) #矩阵A的逆
crossprod(A,A) #t(A)%*%A
tcrossprod(A,A) #A%*%t(A)
solve(A)%*%A #A^(-1)%*%A
solve(A)%*%A-A%*%solve(A)> det(A) [1] 9020 > solve(A) [,1] [,2] [,3] [,4] [1,] 0.034811530 -0.03680710 -0.004545455 -0.008314856 [2,] -0.007095344 0.09667406 -0.018181818 0.039911308 [3,] -0.020399113 0.02793792 0.072727273 -0.135254989 [4,] 0.105321508 -0.37250554 -0.386363636 1.220066519 crossprod(A,A) [,1] [,2] [,3] [,4] [1,] 1389 652 877 87 [2,] 652 423 589 60 [3,] 877 589 1718 187 [4,] 87 60 187 21 > tcrossprod(A,A) [,1] [,2] [,3] [,4] [1,] 1543 327 968 274 [2,] 327 146 261 99 [3,] 968 261 1685 533 [4,] 274 99 533 177 A%*%t(A) [,1] [,2] [,3] [,4] [1,] 1543 327 968 274 [2,] 327 146 261 99 [3,] 968 261 1685 533 [4,] 274 99 533 177 solve(A)%*%A [,1] [,2] [,3] [,4] [1,] 1.000000e+00 2.602085e-17 2.081668e-17 0 [2,] -4.163336e-17 1.000000e+00 -2.775558e-17 0 [3,] 0.000000e+00 0.000000e+00 1.000000e+00 0 [4,] 0.000000e+00 4.440892e-16 0.000000e+00 1