Matlab & Mathematica 向量(行,列) 矩阵

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行、第i1列到第j1列构成的子阵
m[[i0;;i1,j0;;j1]]        // 第i0行到第i1行、第j0列到第j1列构成的子阵
m[[{i1,…,ir}, {j1, … , js}]]    // 行标为ik、列标为jk的元素构成的 r×s 子阵
Tr[m,List]      // 对角线上的元素
ArrayRules[m]   // 非零元素的位置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值