您的位置:首页 > 编程语言 > MATLAB

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]   // 非零元素的位置
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: