Matlab & Mathematica 向量(行,列) 矩阵
2015-09-25 14:13
603 查看
Matlab:
矩阵用方括号[]表示,元素之间用”,” 或者 空格 隔开,行与行之间用分号“;”隔开:mat = [ 1 2 3 4; 4 5 6 7 ] 或者 mat = [ 1,2,3,4; 4,5,6,7 ]
行向量:
row = [1 2 3 4]
列向量(行向量的转置):
column = [1 2 3 4]'
获得矩阵或者向量中的元素用小括号 ():
v = [1 2 3 5]; x = v(1); x = v(1:4); %获得从第一个到第四个元素得到一个行向量 mat = [ 1 2 3; 4 5 6 ]; x = mat(1,2); %第一行第二列元素 row = mat(1,:); %第一行的所有元素
注意:mat中不存在临时变量,所以下列代码会报错:
v1 = [1 2 3]; v2 = [4 5 6]; x = (v2-v1)(1); %出错,必须使用一个变量保存 v2-v1 然后再取该变量的值
Mathematica
Here is a sample matrix and vector:mat = Array[a, {3, 3}] { {a[1, 1], a[1, 2], a[1, 3]}, // 矩阵的第一行 {a[2, 1], a[2, 2], a[2, 3]}, // 矩阵的第二行 {a[3, 1], a[3,2],a[3, 3]} // 矩阵的第三行 }
// 既不是行向量也不是列向量,为一个列表 vec = {1, 2, 3};
vec is neither a row vector nor a column vector. It is just a vector.
Mathematica treats it properly by context. Here it is treated as a column
vector in the usual textbook representation.
// 这里把列表当做一个列向量,以为其在矩阵右侧 mat.vec { a[1, 1] + 2 a[1, 2] + 3 a[1, 3], a[2, 1] + 2 a[2, 2] + 3a[2, 3] }
But if we put the vector before the matrix, Mathematica treats it as a row
vector.
// 这里把列表当做一个行向量,因为其放在矩阵左侧 vec.mat { a[1, 1] + 2 a[2, 1] + 3 a[3, 1], a[1, 2] + 2 a[2, 2] + 3 a[3, 2], a[1, 3] + 2 a[2, 3] + 3 a[3, 3] }
If we want the dot product of the vector with itself, we just write…
// 点乘 vec.vec 14
If we want to convert the vector to a one row matrix we write…
// 显示将一个列表转成一个行向量(也就是单行的矩阵) {vec} {{1, 2, 3}}
If we want to convert the vector to a one column matrix we write…
// 转置,变为列向量(单列的矩阵) Transpose[{vec}] {{1}, {2}, {3}}
We could use matrix multiplication on these to generate a 3x3 matrix.
// 列向量乘以行向量得到一个矩阵 Transpose[{vec}].{vec} {{1, 2, 3}, {2, 4, 6}, {3, 6, 9}}
Or obtain the dot product, in a rather silly way, as a 1x1 matrix.
// 行向量乘以列向量得到一个值(也就是单行单列的矩阵?) {vec}.Transpose[{vec}] {{14}}
在Mathematica中 “.” 为矩阵或者向量相乘,不是“*”,还有,要获得矩阵乘积为一个矩阵如 C=A.B 则不能在之前加//MatrixForm,否则结果为 A.B 的形式而不是 矩阵C,因为MatrixForm优先级高,会改变矩阵的显示格式。
v0加了MatrixForm,所以导致v1的结果表示为两个矩阵相乘:
去掉v0处的MatrixForm,得到计算结果:
“*”类似matlab中的
.*,即每个元素对应相乘:
在行尾加上分号“;”可以抑制显示,这点跟matlab一样。
矩阵(或者列表)操作:
m[[i,j]] // 第i,j个元素 m[[i]] // 第i行 m[[All,i]] // 第i列 Take[m,{i0,i1},{j0,j1}] // 第i0行到第j0行、第i0列到第j0列构成的子阵 m[[i0;;i1,j0;;j1]] // 第i0行到第i1行、第j0列到第j1列构成的子阵 m[[{i1,…,ir}, {j1, … , js}]] // 行标为ik、列标为jk的元素构成的 r×s 子阵 Tr[m,List] // 对角线上的元素 ArrayRules[m] // 非零元素的位置
相关文章推荐
- matlab中的sum函数的用法
- Matlab中判断文件是否为空
- MATLAB中squeeze函数的作用
- Ubuntu14.04+搜狗输入法+Cuda+opencv3.0+matlab2014b+mkl+caffe 安装
- MATLAB:镜像图片
- 特征点检测效果评估(matlab代码)
- Matlab:max函数
- MATLAB R2014b 的安装破解
- matlab生成opencv需要的xml文件
- MATLAB使用技巧
- ubuntu下安装Matlab2014及破解
- matlab getframe()
- MATLAB 中gcf、gca 以及gco 的区别
- Matlab中libsvm的安装几使用(参数的设置 )
- Mac上(Xcode7)使用Matlab调用libsvm库函数
- Ubuntu下安装Matlab
- caffe安装系列——安装Matlab
- Matlab操作基础1
- matlab函数isfield、cell2mat、vertcat
- Matlab memory问题解决记录