matlab 如何定义多个矩阵

matlab 如何定义多个矩阵,第1张

MATLAB不用定义矩阵,它的矩阵是动态的。

MATLAB不用事先定义大小,可以动态增加

但是也有一些函数可以完成你的要求

分别说下:

1,不定义大小,动态的

>> M=1

M =

1

>> M(1,2)=2

M =

1 2

>> M(2,1)=3

M =

1 2

3 0

==============

2,利用内置函数生成指定大小,然后用下标 *** 作就行了

>> M=ZEROS(2,3)

M =

0 0 0

0 0 0

>> M=ONES(2,3)

M =

1 1 1

1 1 1

方法:

B=A' 是转置

B=A'  是共轭转置

设A为m×n阶矩阵(即m行n列),第i 行j 列的元素是a(i,j),即:A=a(i,j)

定义A的转置为这样一个n×m阶矩阵B,满足B=a(j,i),即 b (i,j)=a (j,i)(B的第i行第j列元素是A的第j行第i列元素),记A'=B。

将A的所有元素绕着一条从第1行第1列元素出发的右下方45度的射线作镜面反转,即得到A的转置。

扩展资料:

构造矩阵的方法:可以直接用[ ]来输入数组,也可以用以下提供的函数来生成矩阵。

ones( )  创建一个所有元素都为1的矩阵,其中可以制定维数,1,2…个变量

zeros()  创建一个所有元素都为0的矩阵

eye()    创建对角元素为1,其他元素为0的矩阵

diag()    根据向量创建对角矩阵,即以向量的元素为对角元素

rand()    创建随机矩阵,服从均匀分布

randn()  创建随机矩阵,服从正态分布

-MATLAB

-矩阵转置

详情见下。

在MATLAB中创建矩阵有以下规则:

a、矩阵元素必须在”[]”内;

b、矩阵的同行元素之间用空格(或”,”)隔开;

c、矩阵的行与行之间用”;”(或回车符)隔开;

d、矩阵的元素可以是数值、变量、表达式或函数;

e、矩阵的尺寸不必预先定义。

二,矩阵的创建:

1、直接输入法

最简单的建立矩阵的方法是从键盘直接输入矩阵的元素,输入的方法按照上面的规则。建立向量的时候可以利用冒号表达式,冒号表达式可以产生一个行向量,一般格式是:e1:e2:e3,其中e1为初始值,e2为步长,e3为终止值。还可以用linspace函数产生行向量,其调用格式为:linspace(a,b,n),其中a和b是生成向量的第一个和最后一个元素,n是元素总数。

2、利用MATLAB函数创建矩阵。

基本矩阵函数如下:

(1)ones()函数:产生全为1的矩阵,ones(n):产生nn维的全1矩阵,ones(m,n):产生mn维的全1矩阵;

(2)zeros()函数:产生全为0的矩阵;

(3)rand()函数:产生在(0,1)区间均匀分布的随机阵;

(4)eye()函数:产生单位阵;

(5)randn()函数:产生均值为0,方差为1的标准正态分布随机矩阵。

3、利用文件建立矩阵

当矩阵尺寸较大或为经常使用的数据矩阵,则可以将此矩阵保存为文件,在需要时直接将文件利用load命令调入工作环境中使用即可。同时可以利用命令reshape对调入的矩阵进行重排。reshape(A,m,n),它在矩阵总元素保持不变的前提下,将矩阵A重新排成mn的二维矩阵。

1、预置(preallocation)是编写MATLAB程序比较重要的一个因素,在数组比较大的时候,是否进行预置程序运行时间相差几十倍甚至几百几千倍都很常见。所以使用

A=zero(1,n);

或者

A=zero(n,1);

进行预置通常很重要(如果n不大倒可以不做)。

2、提高MATLAB程序效率的另一个要点是向量化(Vectorization)代替显式循环。向量化表达式主要使用点运算 *** 作符。例如,就楼主的问题而言,可以很简单的写成

A=x^(1:n);

省略了 for 循环,对于程序效率也会有很大提升。关于点运算更详细的介绍,可以看一下参考资料的链接中我以前回答的问题。

下面的例子简单对比了两种代码的效率:

>> tic,n=100000;x=09;A=[];for i=1:n,b=x^i; A=[A,b];end,toc

Elapsed time is 29920198 seconds

>> tic,n=100000;x=09;B=x^(1:n);,toc

Elapsed time is 0020975 seconds

>> isequal(A,B)

ans =

1

两种做法的结果相同,但时间相差了近1500倍。二者的差别主要由预置引起,向量化表达式简化了程序代码,但对于效率提升并不是非常明显。以下把n进一步加大做了对比(否则时间太短,几乎看不出差别):

>> tic,n=1000000;x=09;A=zeros(1,n);for i=1:n,b=x^i; A(i)=b;end,toc

Elapsed time is 0203902 seconds

>> tic,n=1000000;x=09;B=x^(1:n);,toc

Elapsed time is 0120953 seconds

可见,时间相差不到一倍,但使用点运算的向量化表达式显然更简练。

3、关于另外的疑问:

(1)如果使用楼上的循环方式,A=[];是必要的,相当于对数组进行初始化。否则后面的A=[A,b];会在原来数组A基础上进一步增加元素,既花费更多瞬间,结果也不正确。

(2)A=[A,b];这是最基本的数组拼接 *** 作(Concatenation),没有错,但属于在循环场合不推荐的做法。

希望对楼主有帮助。

在定义空矩阵的时候,就要用到zero函数进行定义了,zero定义是C语言上常用的定义。

空矩阵没有大小,你往里面装多少就是多少。

如:

>> m=[]

m =

[]

>> a=zeros(3);

>> m=a

m =

0     0     0

0     0     0

0     0     0

zero定义的意义在于建立一个可以任我们添加东西的内容矩阵,当然我们要提前定义矩阵的大小。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/11673109.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存