当前位置:科普知识站>IT科技>

如何用matlab进行矩阵运算

IT科技 阅读(1.21W)

a = [1 2 3; 4 5 6; 7 7 8];b = [1 2 2; 2 3 4];A = prod(a,2)';B = prod(b,2)';[ma,n] = size(a);[mb,n] = size(b);R = zeros(mb,ma);for r = 1:mb R(r,:) = B(r)*A;endR R = 24 480 1568 144 2880 9408

矩阵分析可以解决很多问题,但很多时候矩阵的运算比较繁琐,特别是高阶矩阵运算。这时候如果用matlab来计算就方便快捷得多。下面就为大家介绍怎么用matlab进行矩阵运算的步骤

首先可以求点乘,维数肯定要相同; “.*”和“*”的区别: 在进行数之间的运算时“.*”和“*”是没有区别的,都是表示普通的乘法运算。例:m = 2,n = 3,m.*n = 6, m*n = 6。 在进行矩阵之间的运算时“.*”和“*”的意义就有所不同了。假设a,b表示两个矩

约定:

     a=[1,3,5;2,4,6;7,9,8]    b=[9,6,4;3,4,5;2,3,4]

用xor函数,比如xor(A,B) 参看http://www.mathworks.com/help/matlab/ref/xor.html?refresh=true

如何用matlab进行矩阵运算

材料/工具

matlab

1,收先打开Matlab软件,在软件界右侧点击鼠标右键,选择“new file”,点击“script”新建一个文件: 2、在脚本里随意输入一个简单的矩阵,matlab里矩阵转置实现起来比较容易,只需要通过英文的单引号就能实现转置操作: 3、按回车键之后,就可以看

方法

加和减:

加减法的命令很简单,直接用加或者减号就可以了。如:c=a+b d=a-b

你不可以这么写。首先必须将A转化为syms,所以你应该这么写 >>A=sym(A); >>syms a >>A(1,1)=a; 这样再试试呢?

如何用matlab进行矩阵运算 第2张

乘法:

一般乘法:c=a*b,要求a的列数等于b的行数。

加和减: 加减法的命令很简单,直接用加或者减号就可以了。如: c=a+b d=a-b 乘法: 一般乘法:c=a*b,要求a的列数等于b的行数。 如果a,b是一般的向量,如a=[1,2,3] b=[3,4,5] 点积: dot(a,b), 叉积: cross(a,b) 卷积: conv(a,b) 除法:一般

如果a,b是一般的向量,如a=[1,2,3] b=[3,4,5]

矩阵没有指数和对数运算 数组运算:.^(指数)是对应元素的运算,与矩阵运算完全不同。 矩阵运算:+ - * / -1(求逆) 等运算

点积:dot(a,b),

此题考查特征值的性质 用常用性质解此题: 1.A的行列式等于A的全部特征值之积 所以 |A| = -1*1*2 = -2 2.若a是可逆矩阵A的特征值,则 |A|/a 是A*的特征值 所以A*的特征值为 2,-2,-1 所以|A*| = 2*(-2)*(-1) = 4. 注:当然也可用伴随矩阵的行列式性

叉积:cross(a,b)

转自知乎: 原帖链接:http://www.zhihu.com/question/19706331 MATLAB的矩阵计算使用的是Intel自己出的Math kernel library(MKL),这个库远比其他的blas/lapack库要快。C快在循环,要想矩阵计算也和MATLAB一样快,那就得链接MKL,写起来免不了

卷积: conv(a,b)

转自知乎: 原帖链接:http://www.zhihu.com/question/19706331 MATLAB的矩阵计算使用的是Intel自己出的Math kernel library(MKL),这个库远比其他的blas/lapack库要快。C快在循环,要想矩阵计算也和MATLAB一样快,那就得链接MKL,写起来免不了

如何用matlab进行矩阵运算 第3张

除法:一般在解线性方程组时会用到

要计算三维矩阵每一层的norm的话,用for是比较合适的,如果必须不用for的话,你可以试试这个流程: >> a = randn( 2, 2, 3 ) a(:,:,1) = 0.3129 -0.0301 -0.8649 -0.1649 a(:,:,2) = 0.6277 1.1093 1.0933 -0.8637 a(:,:,3) = 0.0774 -1.1135 -1

x=ab 如果ax=b,则 x=ab是矩阵方程的解。

pa = prod(a, 2);pb = prod(b, 2);repmat(pa', numel(pb), 1) - repmat(pb, 1, numel(pa))

x=b/a 如果xa=b,则x=b/a是矩阵方程的解。

对于使用变量的矩阵运算,首先必须要定义变量名称,在Matlab中通过使用syms来定义非常方便,通过运算后将变量替换为具体的数值,下面为具体的一个实例: 1.定义变量 syms x y z; 2.定义矩阵 R1=[cos(x) -sin(x) 0;sin(x) cos(x) 0;0 0 1]; R2=[

如何用matlab进行矩阵运算 第4张

转置:

转置时,矩阵的第一行变成第一列,第二行变成第二列,。。。

首先,肯定是算法上的优化,它没有直接按照定义去做乘,而是先对矩阵做了一些变换再乘,目的就是减少重复运算的次数。关于这个,你可以去看下Knuth的The art of programming的第一卷,那里面有例子说明怎样算最快; 其次,如果你想看些原代码,

x=a.'

如何用matlab进行矩阵运算 第5张

求逆:

要求矩阵为方阵。x=inv(a)

可以这样,m文件不应该声明为函数,也就是上面没有声明function的才可以,三个文件均作为命令脚本运行,这样运算的东西都会放到工作区当中,先执行T1再执行T2 T3就可以了 如果已经是m文件函数的形式可以用global的方法将变量导出

如何用matlab进行矩阵运算 第6张

扩展阅读,以下内容您可能还感兴趣。

如何写出比 MATLAB 更快的矩阵运算程序

转自知乎:

原帖链接:http://www.zhihu.com/question/19706331

MATLAB的矩阵计算使用的是Intel自己出的Math kernel library(MKL),这个库远比其他的blas/lapack库要快。C快在循环,要想矩阵计算也和MATLAB一样快,那就得链接MKL,写起来免不了各种折腾。而且,即使你链接上了,编译时各种优化选项之类的还是比不上人家专业的设定,速度很难接近MATLAB。

我自己在Gentoo上试过源里的所有blas/lapack库,无一能与MKL匹敌,而且连接近都不可能。甚至我把python的NumPy库链接上MKL后,速度也只是勉强接近。由于Gentoo的MKL库永远是最新的,而每一个新版本的MKL库对矩阵计算都有略微提升,导致可能暂时NumPy与MATLAB可以匹敌。但是一旦更新版本的MATLAB出来后,它会使用上更新的MKL库,这种领先优势就又丧失殆尽。你可以在MATLAB文档搜索中输入MKL,这样会被定位到MATLAB release notes,而里面就会含有这么一句话“Upgrade to Intel Math Kernel Libraries”,这就是每一个版本MATLAB矩阵计算都越发*快的原因。

当然,刚我提到的python,其矩阵计算速度虽然微微落后于MATLAB,但是在很多其他地方是可以大大强于MATLAB的。例如绘制大规模三维点云,以及轻松调用gpu之类的。因此python在矩阵计算的微小速度劣势完全可以忽略,可以考虑用于科学计算。

Matlab 三维矩阵操作怎样用矩阵运算代替for循环

要计算三维矩阵每一层的norm的话,用for是比较合适的,如果必须不用for的话,你可以试试这个流程:

>> a = randn( 2, 2, 3 )

a(:,:,1) =

0.3129 -0.0301

-0.8649 -0.1649

a(:,:,2) =

0.6277 1.1093

1.0933 -0.8637

a(:,:,3) =

0.0774 -1.1135

-1.2141 -0.0068

>> a1 = cellfun( @( x ) norm( x ), num2cell( a, [ 1 2 ] ) );

>> a1 = a1( : )

a1 =

0.9312

1.4482

1.2260

思路就是把三维矩阵转为一个元胞序列,元胞里的每个元素就是原始矩阵的每一层,然后利用cellfun函数进行批量计算。

怎么用MATLAB实现两个矩阵之间的运算

pa = prod(a, 2);

pb = prod(b, 2);

repmat(pa', numel(pb), 1) - repmat(pb, 1, numel(pa))

matlab中怎么用将矩阵当成自变量带入函数运算?

对于使用变量的矩阵运算,首先必须要定义变量名称,在Matlab中通过使用syms来定义非常方便,通过运算后将变量替换为具体的数值,下面为具体的一个实例:

1.定义变量

syms x y z;

2.定义矩阵

R1=[cos(x) -sin(x) 0;sin(x) cos(x) 0;0 0 1];

R2=[cos(y) 0 sin(y);0 1 0;-sin(y) 0 cos(y)];

R3=[1 0 0;0 cos(z) -sin(z);0 sin(z) cos(z)];

3.求解矩阵

a=R1*R2*R3

4.变量替换

subs(a,{x,y,z},{0,pi/2,0})

则能够直接求解出矩阵a的具体值。

完整的程序如下,直接保存为.m文件可以直接运行:

syms x y z;

R1=[cos(x) -sin(x) 0;sin(x) cos(x) 0;0 0 1];

R2=[cos(y) 0 sin(y);0 1 0;-sin(y) 0 cos(y)];

R3=[1 0 0;0 cos(z) -sin(z);0 sin(z) cos(z)];

a=R1*R2*R3;

subs(a,{x,y,z},{0,pi/6,pi/3})

PS:关于subs函数的使用 subs(f,{old},{new});

其中f是关于old的变量函数,new为具体的数值

matlab 矩阵快速运算是怎么实现的

首先,肯定是算法上的优化,它没有直接按照定义去做乘,而是先对矩阵做了一些变换再乘,目的就是减少重复运算的次数。关于这个,你可以去看下Knuth的The art of programming的第一卷,那里面有例子说明怎样算最快;

其次,如果你想看些原代码,貌似matlab在很久前就开始用LAPACK这个数学包了,LAPACK是开源的,是个数*算的包。你可以google下。

最后,stackexchange上有差不多的问题,比较了下各语言的速度,我给你粘贴下。

1024x1024 2048x2048 4096x4096

--------------- -------------- ---------------

CUDA C (ms) 43.11 391.05 3407.99

C++ (ms) 6137.10 64369.29 551390.93

C# (ms) 10509.00 300684.00 2527250.00

Java (ms) 9149.90 92562.28 838357.94

MATLAB (ms) 75.01 423.10 3133.90

当然上面的C++用的算法我猜是按定义直接算的。