文档视界 最新最全的文档下载
当前位置:文档视界 › MATLAB基本矩阵运算

MATLAB基本矩阵运算

MATLAB基本矩阵运算
MATLAB基本矩阵运算

Basic Matrix Operations

一、实验目的

1、掌握向量和矩阵的创建方法;

2、掌握向量和矩阵元素的索引方法;

3、掌握向量和矩阵的基本操作;

4、利用MATLAB编写程序进行矩阵运算。

二、基础知识

1、常见数学函数

函数名数学计算功能函数名数学计算功能

Abs(x) 实数的绝对值或复数的幅值floor(x) 对x朝-∞方向取整

Acos(x) 反余弦arcsin x gcd(m,n)求正整数m和n的最大公约数

acosh(x) 反双曲余弦arccosh x imag(x) 求复数x的虚部

angle(x) 在四象限内求复数 x 的相角lcm(m,n) 求正整数m和n的最小公倍数

asin(x) 反正弦arcsin x log(x) 自然对数(以e为底数)

asinh(x) 反双曲正弦arcsinh x log10(x) 常用对数(以10为底数)

atan(x) 反正切arctan x real(x) 求复数x的实部

atan2(x,y) 在四象限内求反正切Rem(m,n) 求正整数m和n的m/n之余数

atanh(x) 反双曲正切arctanh x round(x) 对x四舍五入到最接近的整数

ceil(x) 对x朝+∞方向取整sign(x) 符号函数:求出x的符号

conj(x) 求复数x的共轭复数sin(x) 正弦sin x

cos(x) 余弦cos x sinh(x) 反双曲正弦sinh x

cosh(x) 双曲余弦cosh x sqrt(x) 求实数x的平方根:x

exp(x) 指数函数xe tan(x) 正切tan x

fix(x) 对x朝原点方向取整tanh(x) 双曲正切tanh x

2、常量与变量

系统的变量命名规则:变量名区分字母大小写;变量名必须以字母打头,其后可以是任意字母,数字,或下划线的组合。此外,系统内部预先定义了几个有特殊意义和用途的变量,见下表:

特殊的变量、常量取值

ans 用于结果的缺省变量名

pi 圆周率π的近似值(3.1416)

eps 数学中无穷小(epsilon)的近似值(2.2204e - 016)

inf 无穷大,如 1/0 = inf (infinity)

NaN 非数,如 0/0 = NaN (Not a Number),inf / inf = NaN

i,j 虚数单位:i = j =1?

数值型向量(矩阵)的输入

①任何矩阵(向量),可以直接按行方式……输入每个元素:同一行中的元素用逗号(,)或者用空格符来分隔;行与行之间用分号(;)分隔。所有元素处于一方括号([ ])内;

例1:

>> Time = [11 12 1 2 3 4 5 6 7 8 9 10]

>> X_Data = [2.32 3.43;4.37 5.98]

②系统中提供了多个命令用于输入特殊的矩阵:

函数功能函数功能

compan 伴随阵toeplitz Toeplitz矩阵

diag 对角阵vander Vandermonde矩阵

hadamard Hadamard矩阵zeros 元素全为0的矩阵

hankel Hankel矩阵ones 元素全为1的矩阵

invhilb Hilbert矩阵的逆阵 rand 元素服从均匀分布的随机矩阵

kron Kronercker张量积randn 元素服从正态分布的随机矩阵

magic 魔方矩阵eye 对角线上元素为1的矩阵

pascal Pascal矩阵meshgrid 由两个向量生成的矩阵

上面函数的具体用法,可以用帮助命令help得到。如:meshgrid(x,y)

输入 x=[1 2 3 4]; y=[1 0 5]; [X,Y]=meshgrid(x, y),则

X = Y =

1 2 3 4 1 1 1 1

1 2 3 4 0 0 0 0

1 2 3 4 5 5 5 5

目的是将原始数据x,y转化为矩阵数据X,Y。

3、数组(矩阵)的点运算

运算符:+(加)、-(减)、./(右除)、.\(左除)、.^(乘方),

例3:

>> g = [1 2 3 4];h = [4 3 2 1];

>> s1 = g + h, s2 = g.*h, s3 = g.^h, s4 = g.^2, s5 = 2.^h

4、矩阵的运算

运算符:+(加)、-(减)、*(乘)、/(右除)、\(左除)、^(乘方)、’(转置)等;

常用函数:det(行列式)、inv(逆矩阵)、rank(秩)、eig(特征值、特征向量)、rref(化矩阵为行最简形)

例4:

>> A= [2 0 –1; 1 3 2]; B= [1 7 –1; 4 2 3; 2 0 1];

>> M = A*B % 矩阵A与B按矩阵运算相乘

M =

0 14 -3

17 13 10

>> det_B = det(B) % 矩阵A的行列式

det_B =

20

>> rank_A = rank(A) % 矩阵A的秩

rank_A =

2

>> inv_B = inv(B) % 矩阵B的逆矩阵

inv_B =

0.1000 -0.3500 1.1500

0.1000 0.1500 -0.3500

-0.2000 0.7000 -1.3000

>> [V,D] = eig(B) % 矩阵B的特征值矩阵V与特征向量构成的矩阵D =

7.2680 0 0

0 -1.6340 + 0.2861i 0

0 0 -1.6340 - 0.2861i

>> X = A/B % A/B = A*B-1,即XB=A,求X

0.4000 -1.4000 3.6000

0.0000 1.5000 -2.5000

>> Y = B\A % B\A = B-1*A,即BY=A,求Y

三、实验内容

1、练习数据和符号的输入方式,将前面的命令在命令窗口中执行通过。

2、键入常数矩阵输入命令:

a = [1 2 3] 与 a = [1;2;3]

记录结果,比较显示结果有何不同;

b = [1 2 5] 与 b = [1 2 5];

记录结果,比较显示结果有何不同;

a a’

b b’

记录结果,比较变量加“’”后的区别;

c = a * b 1 2 5

2 4 10

3 6 15

c = a* b’

记录显示结果与出错原因;

a = [1 2 3; 4 5 6; 7 8 0],求a^2

a^0.5

。30 36 15

66 81 42

39 54 69

0.5977 + 0.7678i 0.7519 + 0.0979i 0.5200 - 0.4680i

1.4102 + 0.1013i 1.7741 + 0.6326i 1.2271 - 0.7467i

1.2757 - 1.0289i 1.6049 - 1.0272i 1.1100 + 1.6175i

3、使用冒号选出指定元素:已知 A=[1 2 3;4 5 6;7 8 9],求 A 中第 3 列前 2 个元素,A 中所有列第 2,3 行的元素。ns =

3

6

ns =

4 5 6

7 8 0

4、输入 A=[7 1 5; 2 5 6; 3 1 5],B=[1 1 1; 2 2 2; 3 3 3],在命令窗口中执行下列表达式,掌握其含义:

A(2,3)

ans =

6

A(:,2)

A(3,:) A(:,1:2:3)

ans =

7 5

2 6

3 5

A(:,3).*B(:,2)

ns =

5

12

15

A(:,3)*B(2,:) A*B A.*B A^2 A.^2 B/A B./A

5、建立M 文件,求

123

221

343

A

??

?

= ?

?

??

的逆矩阵。nv_M =

1.0000 3.0000 -

2.0000 -1.5000 -

3.0000 2.5000 1.0000 1.0000 -1.0000

6、设

123

221

343

A

??

?

= ?

?

??

,

21

53

B

??

= ?

??

,

13

20

31

C

??

?

= ?

?

??

,建立M文件,求矩阵X ,使满

足:AXB = C。

四,详细设计

(1)存储要点

position[col]=position[col-1]+num[col-1];

三元组表(row,col,v)

稀疏矩阵((行数m,列数n,非零元素个数t),三元组,...,三元组)

row col v

A->data[0] 0 4 8

1 1 0 1

2 1 2 3

3 2 1 2

4 3 0 6

………

max-1

(2)乘法运算要点

已知稀疏矩阵A(m1× n1)和B(m2× n2),求乘积C(m1× n2)。

稀疏矩阵A、B、C及它们对应的三元组表A.data、B.data、C.data如图6所示。

由矩阵乘法规则知:

C(i,j)=A(i,1)×B(1,j)+A(i,2)×B(2,j)+…+A(i,n)×B(n,j)=

这就是说只有A(i,k)与B(k,p)(即A元素的列与B元素的行相等的两项)才有相乘的机会,且当两项都不为零时,乘积中的这一项才不为零。

矩阵用二维数组表示时,a11只有可能和B中第1行的非零元素相乘,a12只有可能和B中第2行的非零元素相乘,…,而同一行的非零元是相邻存放的,所以求c11和c12同时进行:求a11*b11累加到c11,求a11*b12累加到c12,再求a12*b21累加到c11,再求a12*b22累加到c22.,…,当然只有aik和bkj(列号与行号相等)且均不为零(三元组存在)时才相乘,并且累加到cij当中去。

(3)稀疏矩阵的快速转置要点:

矩阵A中三元组的存放顺序是先行后列,对同一行来说,必定先遇到列号小的元素,这样只需扫描一遍A.data 。所以需引入两个向量来实现:num[n+1]和position [n+1],num[col]表示矩阵A中第col列的非零元素的个数(为了方便均从1单元用起),position [col]初始值表示矩阵A中的第col列的第一个非零元素在B.data中的位置。于是position的初始值为:position [1]=1;

position [col]= position [col-1]+num[col-1]; 2≤col≤n

依次扫描A.data,当扫描到一个col列元素时,直接将其存放在B.data的position [col]位置上,position [col]加1,position [col]中始终是下一个col列元素在B.data中的位置。

A->row[0] 0

1 1

2 3

3 4

(4)逆矩阵

⒈判断矩阵是否为方阵

⒉逆矩阵的算法:

①求行列式的值

②求矩阵的伴随矩阵

③用伴随矩阵除以行列式

⒊求逆矩阵的流程:

五、源程序(测试结果)#include

#include

#include

#include

using namespace std;

#define max 100

#define datatype int typedef struct{

int row,col;//行,列

datatype v;//非0数值

}Node;

typedef struct{

Node data[max];//稀疏矩阵

int m,n,t;//m行,n列,t非0数个数

}Matrix;

/*求逆矩阵存储*/

typedef struct{ //存储结构

int m, n; //行、列数

double *p; //矩阵基址

}nMatrix;

void In(nMatrix a){ //求逆输入

cout<<"请将矩阵a的行、列数再次输入:";

cin >>a.m>>a.n;

int m = a.m, n = a.n;

int i, j;

double *p = a.p = new double[m * n]; //p是行指针

cout<<"请按行优先输入矩阵a的全部数值:\n";

for (i = 0; i < m; p += n, i++)

{

for (j = 0; j < n; j++)

cin>>p[j]; //即a.p[i*n+j]

}

}

void Out(nMatrix a){ //求逆输出

int m = a.m, n = a.n;

int i, j;

double *p = a.p;

for (i = 0; i < m; p += n, i++)

{

for (j = 0; j < n; j++)

cout<

cout<

}

}

istream& operator >>(istream& input,Matrix &A){ int i;

cout<<"请输入行数:";

input>>A.m;

cout<<"请输入列数:";

input>>A.n;

cout<<"请输入非0值个数:";

input>>A.t;

for(i=1;i<=A.t;i++){

cout<<"请输入行数,列数,非0值:"<<"("<

input>>A.data[i].row>>A.data[i].col>>A.data[i].v;

}

return input;

}

ostream& operator <<(ostream& output,Matrix &A){

int i,j,t=1,k=0;

for(i=1;i<=A.m;i++){

for(j=1;j<=A.n;j++){

if(A.data[t].row==i&&A.data[t].col==j){

output<

t++;}

else

output<

}

cout<<"\n";

}

return output;

}

Matrix operator +(Matrix A,Matrix B){//加法

int i,j,k;

Matrix C;

if(A.m!=B.m||A.n!=B.n){

cout<<"这两个矩阵不能相加"<

exit(0);}

C.m=A.m;C.n=A.n;

C.t=0;

if(A.t==0&&B.t==0) exit(0);

i=j=k=1;

while(i<=A.t&&j<=B.t){

if(A.data[i].row

C.data[k]=A.data[i];

i++;k++;

}

else{

if(A.data[i].row>B.data[j].row){

C.data[k]=B.data[j];

j++;k++;

}

else{

if(A.data[i].col

C.data[k]=A.data[i];

i++;k++;

}

else{

if(A.data[i].col>B.data[j].col){

C.data[k]=B.data[j];

j++;k++;

}

else{

if(A.data[i].v+B.data[j].v!=0){

C.data[k].row=A.data[i].row;

C.data[k].col=A.data[i].col;

C.data[k].v=A.data[i].v+B.data[j].v;

k++;

}

i++;j++;

}

}

}

}

}

while(i

C.data[k]=A.data[i];

i++;k++;

}

while(j

C.data[k]=B.data[j];

j++;k++;

}

C.t=k;

return C;

}

Matrix operator -(Matrix A,Matrix B){ Matrix C;

int i,j,k;

if(A.m!=B.m||A.n!=B.n)

{

cout<<"这两个矩阵不能相减";exit(0);} C.m=A.m;C.n=A.n;

C.t=0;

if(A.t==0&&B.t==0) exit(0);

i=j=k=1;

while(i<=A.t&&j<=B.t)

{ if(A.data[i].row

{ C.data[k]=A.data[i];

i++;k++;

}

else

{ if(A.data[i].row>B.data[j].row)

{ C.data[k]=B.data[j];

j++;k++;

}

else

{ if(A.data[i].col

i++;k++;

}

else

{ if(A.data[i].col>B.data[j].col) { C.data[k]=B.data[j];

j++;k++;

}

else

{ if(A.data[i].v-B.data[j].v!=0)

{ C.data[k].row=A.data[i].row;

C.data[k].col=A.data[i].col;

C.data[k].v=A.data[i].v-B.data[j].v;

k++;

}

i++;j++;

}

}

}

}

}

while(i

{ C.data[k]=A.data[i];

i++;k++;

}

while(j

{ C.data[k]=B.data[j];

j++;k++;

}

C.t=k;

return C;

}

Matrix operator *(Matrix A,Matrix B){

Matrix C;

int k,p,crow,brow,q,ccol;

int num[max],pos[max],ctemp[max];

if (A.n==B.m){

for(k=1;k<=B.m;k++)

num[k]=0;

for(k=1;k<=B.t;k++)

num[B.data[k].row]++;

pos[1]=1;

for(k=2;k<=B.t;k++)

pos[k]=pos[k-1]+num[k-1];

pos[1+B.t]=pos[B.t]+1;

C.m=A.m; C.n=B.n; C.t=0; p=1;

while(p<=A.t){

crow=A.data[p].row;

for(k=1;k<=C.n;k++)

ctemp[k]=0;

while (p<=A.t&&A.data[p].row==crow){

brow=A.data[p].col;

for(q=pos[brow];q<=pos[brow+1]-1;q++){

ccol=B.data[q].col;

ctemp[ccol]=ctemp[ccol]+A.data[p].v*B.data[q].v;

}

p=p+1;

}

for(ccol=1;ccol<=B.n;ccol++)

if(ctemp[ccol]!=0){

C.t=C.t+1;

C.data[C.t].row=crow;

C.data[C.t].col=ccol;

C.data[C.t].v=ctemp[ccol];

}

}

}

else

cout<<"这两个矩阵不能相乘";

return C;

}

Matrix operator ~(Matrix A){

Matrix B;

int col,i,p,q;

int num[max],position[max];

B.t=A.t;B.m=A.n; B.n=A.m;

if(B.t){

for(col=1;col<=A.n;col++)

num[col]=0;

for(i=1;i<=A.t;i++)

num[A.data[i].col]++;

position[1]=1;

for(col=2;col<=A.n;col++)

position[col]=position[col-1]+num[col-1];

for(p=1;p<=A.t;p++){

col=A.data[p].col;q=position[col];

B.data[q].row=A.data[p].col;

B.data[q].col=A.data[p].row;

B.data[q].v=A.data[p].v;

position[col]++;

}

}

return B;

}

nMatrix Trs(nMatrix a){ //求逆矩阵的先转置

nMatrix trs;

trs.m = a.n;

trs.n = a.m;

trs.p = new double[a.m * a.n];

for (int i = 0; i < a.m; i++)

{

for (int j = 0; j < a.n; j++)

{

trs.p[j * a.m + i] = a.p[i * a.n + j];

}

}

return trs;

}

nMatrix Adjunct(nMatrix a, int indexm, int indexn){ //求第indexm行indexn列元素的代数余子式

nMatrix adj;

adj.m=a.m - 1;

adj.n=a.n - 1;

adj.p = new double[(a.n - 1) * (a.n - 1)];

for (int i = 0; i < indexm; i++)

{

for (int j = 0; j < indexn; j++)

{

adj.p[i * (a.n - 1) + j] = a.p[i * a.n + j];

}

for (int k = indexn + 1; k < a.n; k++)

{

adj.p[i *(a.n - 1) + k -1] = a.p[i * a.n + k];

}

}

for (int m = indexm + 1; m < a.n; m++)

{

for (int j = 0; j < a.n - 1; j++)

{

adj.p[(m - 1) * (a.n - 1) + j] = a.p[m * a.n + j];

}

for (int k = indexn + 1; k < a.n; k++)

{

adj.p[(m - 1) * (a.n - 1) + k - 1] = a.p[m * a.n + k];

}

}

return adj;

}

double Det(nMatrix a) //递归求行列式

{

double det = 0;

if (a.m != a.n)

{

cout<<"不是方阵,没有行列式!"<

cout<<"求行列式退出"<

}

if (a.n == 1)

{

det = a.p[0];

return det;

}

else

{

for (int i = 0; i < a.n; i++)

{

if (i % 2 == 0)

det += a.p[i * a.n] * Det(Adjunct(a, i, 0));

else

det -= a.p[i * a.n] * Det(Adjunct(a, i, 0));

}

}

return det;

}

nMatrix operator !(nMatrix a) { //求矩阵的逆

nMatrix temp;

temp.m=a.n;

temp.n=a.m;

temp.p = new double[a.m * a.n];

//矩阵的逆 = 伴随矩阵 / 行列式

double det = Det(a);

if (det == 0) //如果行列式的值为0,则没有逆

{

cout<<"此矩阵没有逆!"<

cout<<"求矩阵逆退出!"<

}

for (int i = 0; i < temp.m; i++)

{

for (int j = 0; j < temp.n; j++)

{

if ((i +j) % 2 == 0)

temp.p[i * temp.m + j] = Det(Adjunct(a, i, j)) / det;

else

temp.p[i * temp.m + j] = -Det(Adjunct(a, i, j)) / det;

}

}

return Trs(temp);

}

void main(){

Matrix C={0},A={0},B={0};nMatrix a={0}, b={0},temp={0};

cin>>A; cout<<"a=\n"<

cin>>B; cout<<"b=\n"<

C=A+B;cout<<"a+b=\n"<

C=A-B;cout<<"a-b=\n"<

C=A*B;cout<<"a*b=\n"<

C=~A;cout<<"~a=\n"<

In(a);

cout<<"矩阵的行列式为:"<

cout<

cout<<"矩阵的逆为:"<

temp=!a;cout<<"!a=\n"<

六、总结

这次数据结构课程设计的制作使我对matlab的理解更加深刻,也使我认识到了自己很多不足之处。

我发现自己在处理稍微具体的程序时显得无从下手,以前学习的知识只是理论性的知识,并没有真正实践过,当我通过网上查询、请教同学、复习知识后才对编写程序有了初步的思路。后来编写程序时也碰到了许多错误,我对于指针的掌握程度较差导致了我在使用的时候产生了很多错误,请教了学习较好的同学后才逐步完成。最后还有很多细节方面难以修改,于是就改进算法,使自己的程序有了雏形。

这次程序设计使我认识到,要做成编写一个完整的程序绝对不是一件简单的事情,不单要掌握基础知识更要勇于实践,不单要舍得花费时间更要用心去完成它。无论是编写程序还是完成现实生活中的其他事情,我们都必须按部就班地从点滴做起,逐步完成。不但要完成更要做到尽善尽美。

学习数据结构的历程不会因为完成本次课程设计而停止,我是为了用知识武装大脑而学习,通过学习充实自己的生活,我一定会努力学习,争取以后能够完成规模更大的程序。

MATLAB中的矩阵与向量运算

4.1 数组运算和矩阵运算 从外观形状和数据结构来看,二维数组和数学中的矩阵没有区别.但是,矩阵作为一种变换或映射算符的体现,矩阵运算有着明确而严格的数学规则.而数组运算是MATLAB软件所定义的规则,其目的是为了数据管理方面,操作简单,指令形式自然和执行计算有效.所以,在使用MATLAB时,特别要明确搞清数组运算和矩阵运算的区别.表 4.1.1 数组运算和矩阵运算指令形式和实质内涵 数组运算矩阵运算 指令含义指令含义 A.'非共轭转置A'共轭转置 A=s把标量s赋给数组A的每个元素 s+B把标量s分别与数组B的每个元素相加s-B, B-s标量s分别与数组B的元素之差 s.*A标量s分别与数组A的元素之积s*A标量s分别与矩阵A的元素之积 s./B, B.\s标量s分别被数组B的元素除s*inv(B)矩阵B的逆乘标量s A.^n数组A的每个元素的n次方A^n A为方阵时,矩阵A的n次方 A+B数组对应元素的相加A+B矩阵相加 A-B数组对应元素的相减A-B矩阵相减 A.*B数组对应元素的相乘A*B内维相同矩阵的乘积 A./B A的元素被B的对应元素除A/B A右除B B.\A一定与上相同B\A A左除B(一般与右除不同) exp(A)以e为底,分别以A的元素为指数,求幂expm(A) A的矩阵指数函数 log(A) 对A的各元素求对数logm(A) A的矩阵对数函数 sqrt(A) 对A的积各元素求平方根sqrtm(A) A的矩阵平方函数 从上面可以看到,数组运算的运算如:乘,除,乘方,转置,要加"点".所以,我们要特别注意在求"乘,除,乘方,三角和指数函数"时,两种运算有着根本的区别.另外,在执行数组与数组运算时,参与运算的数组必须同维,运算所得的结果数组也是总与原数组同维. 4.2 数组的基本运算 在MATLAB中,数组运算是针对多个数执行同样的计算而运用的.MATLAB以一种非常直观的方式来处理数组. 4.2.1 点转置和共轭转置 . ' ——点转置.非共轭转置,相当于conj(A'). >> a=1:5; >> b=a. ' b = 1 2 3 4 5 >> c=b. ' c = 1 2 3 4 5 这表明对行向量的两次转置运算便得到原来的行向量. ' ——共轭转置.对向量进行转置运算并对每个元素取其共轭.如: >> d=a+i*a

MATLAB实验二 矩阵基本运算(一)答案

实验一 矩阵基本运算(一) (1)设A 和B 是两个同维同大小的矩阵,问: 1)A*B 和A.*B 的值是否相等? ????? ?? =763514432A ???? ? ??=94 525 313 4B A=[2 3 4;4 1 5;3 6 7]; B=[4 3 1;3 5 2;5 4 9]; A*B, A.*B ans = 37 37 44 44 37 51 65 67 78 ans = 8 9 4 12 5 10 15 24 63 2)A./B 和B.\A 的值是否相等? A=[2 3 4;4 1 5;3 6 7]; B=[4 3 1;3 5 2;5 4 9]; A./B, B./A

ans = 0.5000 1.0000 4.0000 1.3333 0.2000 2.5000 0.6000 1.5000 0.7778 ans = 2.0000 1.0000 0.2500 0.7500 5.0000 0.4000 1.6667 0.6667 1.2857 3)A/B和B\A的值是否相等? A=[2 3 4;4 1 5;3 6 7]; B=[4 3 1;3 5 2;5 4 9]; A/B, B/A ans = -0.3452 0.5119 0.3690 0.7857 -0.7857 0.6429 -0.9762 1.3095 0.5952 ans = 110.0000 -15.0000 -52.0000

92.0000 -13.0000 -43.0000 -22.0000 4.0000 11.0000 4)A/B和B\A所代表的数学含义是什么? 解: A/B是B*A的逆矩阵 B\A是B*A的逆矩阵 (2)写出完成下列操作的命令。 1)将矩阵A第2—5行中第1,3,5列元素赋给矩阵B。 A=[0.9501 0.4565 0.9218 0.4103 0.1389 0.0153 0.2311 0.0185 0.7382 0.8936 0.2028 0.7468 0.6068 0.8214 0.1763 0.0579 0.1987 0.4451 0.4860 0.4447 0.4057 0.3529 0.6038 0.9318 0.8913 0.6154 0.9355 0.8132 0.2722 0.4660 0.7621 0.7919 0.9169 0.0099 0.1988 0.4186] B=A(2:5,[1,3,5]) A = 0.9501 0.4565 0.9218 0.4103 0.1389 0.0153 0.2311 0.0185 0.7382 0.8936 0.2028 0.7468 0.6068 0.8214 0.1763 0.0579 0.1987 0.4451 0.4860 0.4447 0.4057 0.3529 0.6038 0.9318 0.8913 0.6154 0.9355 0.8132 0.2722 0.4660 0.7621 0.7919 0.9169 0.0099 0.1988 0.4186 B = 0.2311 0.7382 0.2028 0.6068 0.1763 0.1987 0.4860 0.4057 0.6038 0.8913 0.9355 0.2722 2)删除矩阵A的第7号元素。 A=rand(6,6); >> A(7)=[inf] A = 0.8385 Inf 0.1730 0.1365 0.2844 0.5155

2-matlab矩阵的代数运算 (1)

乘法运算乘法运算符为”*”,运算规则和现行代数中矩阵乘法运算相同,即放在前面的矩阵的行元素,分别与放在后面的矩阵的各列元素对应相乘并相加。 1、两个矩阵相乘:必须满足前一矩阵的列数等于后一矩阵的行数。 2、矩阵的数乘:返回数与矩阵中每一个元素相乘后的矩阵 3、向量的点乘(内积):维数相同的两个向量的点乘;A.*B表示A与B对应的元素相乘,返回的是一个向量 4、向量点积: (1)C=dot(A,B) %若A、B为向量,A与B长度相同;若为矩阵,则A与B有相同维数 (2)C=dot(A,B,dim) %在dim维数中给出A与B的点积 5、向量叉乘:在数学上,两向量的叉乘是一个过两向量交点且垂直于两向量所在平面的向量。 (1)C=cross(A,B) %若A、B为向量,则返回A与B的叉乘,即C=AXB;若为矩阵,则返回一个3Xn矩阵,其中列是A与B对应列的叉积,A、B都是3Xn矩阵 (2)C=cross(A,B,dim) %在dim维数中给出向量A与B的叉积注:A与B必须具有相同维数,size(A,dim)和size(B,dim)必须是3 6、矩阵卷积和多项式乘法:w=conv(u,v) (反褶积deconv(u,v))长度为m的向量序列u和长度为n的向量序列v的卷积定义为 ∑ = + = k 1 j j) -1 u(j)v(k )k( w,其中w向量序列长度为(m+n-1) 多项式的乘法实际上是多项式系数向量间的卷积运算,举例如下:展开多项式(s2+2s+2)(s+4)(s+1) >>w=conv([1,2,2],conv([1,4],[1,1])) w = 1 7 16 18 8 >>p=poly2str(w,’s’) %将w表示成多项式 p=s^4 +7 s^3 +16 s^2 +18 s + 8 7、张量积 C=kron(A,B) %A为mxn矩阵,B为pxq矩阵,则C为mpxnq矩阵A与B的张量积定义为: 加、减运算加、减运算符为”+”、”--”。运算规则为对应元素相加、减 pow2函数命令:X=pow2(F,E),表示F*2E;命令:X=pow2(E),表示2E 矩阵的代数 运算

matlab中的矩阵的基本运算命令范文

1.1 矩阵的表示 1.2 矩阵运算 1.2.14 特殊运算 1.矩阵对角线元素的抽取 函数diag 格式X = diag(v,k) %以向量v的元素作为矩阵X的第k条对角线元素,当k=0时,v为X的主对角线;当k>0时,v为上方第k条对角线;当k<0时,v为下方第k条对角线。 X = diag(v) %以v为主对角线元素,其余元素为0构成X。 v = diag(X,k) %抽取X的第k条对角线元素构成向量v。k=0:抽取主对角线元素;k>0:抽取上方第k条对角线元素;k<0抽取下方第k条对角线元素。 v = diag(X) %抽取主对角线元素构成向量v。 2.上三角阵和下三角阵的抽取 函数tril %取下三角部分 格式L = tril(X) %抽取X的主对角线的下三角部分构成矩阵L L = tril(X,k) %抽取X的第k条对角线的下三角部分;k=0为主对角线;k>0为主对角线以上;k<0为主对角线以下。函数triu %取上三角部分 格式U = triu(X) %抽取X的主对角线的上三角部分构成矩阵U U = triu(X,k) %抽取X的第k条对角线的上三角部分;k=0为主对角线;k>0为主对角线以上;k<0为主对角线以下。3.矩阵的变维 矩阵的变维有两种方法,即用“:”和函数“reshape”,前者主要针对2个已知维数矩阵之间的变维操作;而后者是对于一个矩阵的操作。 (1)“:”变维 (2)Reshape函数变维 格式 B = reshape(A,m,n) %返回以矩阵A的元素构成的m×n矩阵B B = reshape(A,m,n,p,…) %将矩阵A变维为m×n×p×… B = reshape(A,[m n p…]) %同上 B = reshape(A,siz) %由siz决定变维的大小,元素个数与A中元素个数 相同。 (5)复制和平铺矩阵 函数repmat 格式 B = repmat(A,m,n) %将矩阵A复制m×n块,即B由m×n块A平铺而成。 B = repmat(A,[m n]) %与上面一致 B = repmat(A,[m n p…]) %B由m×n×p×…个A块平铺而成 repmat(A,m,n) %当A是一个数a时,该命令产生一个全由a组成的m×n矩阵。 1.3 矩阵分解 1.3.1 Cholesky分解 函数chol 格式R = chol(X) %如果X为n阶对称正定矩阵,则存在一个实的非奇异上三角阵R,满足R'*R = X;若X非正定,则产生错误信息。 [R,p] = chol(X) %不产生任何错误信息,若X为正定阵,则p=0,R与上相同;若X非正定,则p为正整数,R是有序的上三角阵。 1.3.2 LU分解

MATLAB基本矩阵运算

Basic Matrix Operations 一、实验目的 1、掌握向量和矩阵的创建方法; 2、掌握向量和矩阵元素的索引方法; 3、掌握向量和矩阵的基本操作; 4、利用MATLAB编写程序进行矩阵运算。 二、基础知识 1、常见数学函数 函数名数学计算功能函数名数学计算功能 Abs(x) 实数的绝对值或复数的幅值floor(x) 对x朝-∞方向取整 Acos(x) 反余弦arcsin x gcd(m,n)求正整数m和n的最大公约数 acosh(x) 反双曲余弦arccosh x imag(x) 求复数x的虚部 angle(x) 在四象限内求复数 x 的相角lcm(m,n) 求正整数m和n的最小公倍数 asin(x) 反正弦arcsin x log(x) 自然对数(以e为底数) asinh(x) 反双曲正弦arcsinh x log10(x) 常用对数(以10为底数) atan(x) 反正切arctan x real(x) 求复数x的实部 atan2(x,y) 在四象限内求反正切Rem(m,n) 求正整数m和n的m/n之余数 atanh(x) 反双曲正切arctanh x round(x) 对x四舍五入到最接近的整数 ceil(x) 对x朝+∞方向取整sign(x) 符号函数:求出x的符号 conj(x) 求复数x的共轭复数sin(x) 正弦sin x cos(x) 余弦cos x sinh(x) 反双曲正弦sinh x cosh(x) 双曲余弦cosh x sqrt(x) 求实数x的平方根:x exp(x) 指数函数xe tan(x) 正切tan x fix(x) 对x朝原点方向取整tanh(x) 双曲正切tanh x 2、常量与变量 系统的变量命名规则:变量名区分字母大小写;变量名必须以字母打头,其后可以是任意字母,数字,或下划线的组合。此外,系统内部预先定义了几个有特殊意义和用途的变量,见下表: 特殊的变量、常量取值

Matlab常用函数数组及矩阵的基本运算

实验一 Matlab 常用函数、数组及矩阵的基本运算 一、 实验目的 1. 了解Matlab7.0软件工作界面结构和基本操作; 2. 掌握矩阵的表示方法及Matlab 常用函数; 3. 掌握数组及矩阵的基本运算. 二、 实验内容 1. 了解命令窗口(command widow)和变量空间(workspace)的作用,掌握清 除命令窗口(clc )和变量空间(clear)的方法.掌握查询函数(help)的方法. 2. 掌握保存和加载变量的方法. 加载变量:load 变量名. 3. 掌握掌握矩阵的表示方法: 给a,b,c 赋如下数据: ]6,46,23,4,2,6,3,8,0,1[,356838241248 7,278744125431-=??????????--=??????????=c b a 4. 求a+b,a*b,a.*b,a/b,a./b,a^2,a.^2的结果. 5. 将str1=electronic; str2 = information; str3 = engineering; 三个字符串连接 在一起成str = electronic information engineering. 6. 求矩阵a 的逆矩阵a -1,行列式计算。 (inv(a),det(a)) 三、 实验要求 1.上机操作,熟练掌握清除命令窗口和变量空间的方法、查询变量的方法、加载变量的方法。 2.第2道题请写出步骤。 3.对实验内容中第3-6项,写出指令,上机运行. 记录运行结果(数据)。 4.写出实验报告。 四、 实验结果 2. 用save 函数,可以将工作空间的变量保存成txt 文件或mat 文件等. 比如: save peng.mat p j 就是将工作空间中的p 和j 变量保存在peng.mat 中. 用load 函数,可以将数据读入到matlab 的工作空间中. 比如:load peng.mat 就是将peng.mat 中的所有变量读入matlab 工作空间中。

Matlab实验2-矩阵的基本运算

实验二、矩阵的基本运算 一、 问题 已知矩阵A 、B 、b 如下: ???????? ??????????-------------=0319481187638126542 86174116470561091143A ???????? ??????????------=503642237253619129113281510551201187851697236421B … []1187531=b 应用Matlab 软件进行矩阵输入及各种基本运算。 二、 实验目的: 熟悉Matlab 软件中的关于矩阵运算的各种命令 三、 预备知识 1、 、 2、 线性代数中的矩阵运算。 3、 本实验所用的Matlab 命令提示: (1)、矩阵输入格式:A =[a 11, a 12; a 21, a 22];b =初始值:步长:终值; (2)、求A 的转置:A'; (3)、求A 加B :A +B ; (4)、求A 减B :A -B ; (5)、求数k 乘以A :k*A ; (6)、求A 乘以B :A*B ; (7)、求A 的行列式:det (A ); (8)、求A 的秩:rank (A ); … (9)、求A 的逆:inv (A )或(A )-1; (10)、B 右乘A 的逆:B/A ; (11)、B 左乘A 的逆:A \B ; (12)、求A 的特征值:eig (A ); (13)、求A 的特征向量矩阵X 及对角阵D :[X ,D ]=eig (A ); ( (14)、求方阵A 的n 次幂:A ^n ;

(15)、A与B的对应元素相乘:A.*B; (16)、存储工作空间变量:save '文件名' '变量名'; (17)、列出工作空间的所有变量:whos; 四、《 五、实验内容与要求 1、输入矩阵A,B,b; >> A=[3,4,-1,1,-9,10;6,5,0,7,4,-16;1,-4,7,-1,6,-8;2,-4,5,-6,12,-8;-3,6,-7,8,-1,1;8,-4,9,1,3,0] B=[1 2 4 6 -3 2;7 9 16 -5 8 -7;8 11 20 1 5 5;10 15 28 13 -1 9;12 19 36 25 -7 23;2 4 6 -3 0 5] b=[1,3,5,7,8,11] | A = 3 4 -1 1 -9 10 6 5 0 7 4 -16 1 -4 7 -1 6 -8 2 -4 5 -6 12 -8 ^ -3 6 -7 8 -1 1 8 -4 9 1 3 0 B = 1 2 4 6 -3 2 7 9 16 -5 8 -7 ^ 8 11 20 1 5 5 10 15 28 13 -1 9 12 19 36 25 -7 23 2 4 6 - 3 0 5 b = ) 1 3 5 7 8 11 2、作X21=A'、X22=A+B、X23=A-B、X24=AB; >> X21=A' X22=A+B X23=A-B % X24=A*B X21 = 3 6 1 2 -3 8 4 5 -4 -4 6 -4 -1 0 7 5 -7 9 ; 1 7 -1 -6 8 1 -9 4 6 12 -1 3 10 -16 -8 -8 1 0 X22 = 4 6 3 7 -12 12 (

matlab中矩阵基本运算命令.docx

1.1矩阵的表示 1.2矩阵运算 1.2.14特殊运算 1.矩阵对角线元素的抽取 函数diag 格式X = diag(v,k)% 以向量 v 的元素作为矩阵 X 的第 k 条对角线元素,当 k=0 时, v 为 X 的主对角线;当 k>0 时,v 为上方第 k 条对角线;当 k<0 时, v 为下方第 k 条对角线。 X = diag(v)% 以 v 为主对角线元素,其余元素为 0 构成 X。 v = diag(X,k)%抽取 X 的第 k 条对角线元素构成向量 v。k=0:抽取主对角线元素; k>0 :抽取上方第 k 条对角线元素;k<0 抽取下方第 k 条对角线元素。 v = diag(X)% 抽取主对角线元素构成向量 v。 2.上三角阵和下三角阵的抽取 函数tril% 取下三角部分 格式L = tril(X)%抽取 X 的主对角线的下三角部分构成矩阵L L = tril(X,k)% 抽取 X 的第 k 条对角线的下三角部分; k=0 为主对角线; k>0 为主对角线以上; k<0 为主对角线以下。 函数triu% 取上三角部分 格式U = triu(X)%抽取 X 的主对角线的上三角部分构成矩阵U U = triu(X,k)% 抽取 X 的第 k 条对角线的上三角部分; k=0 为主对角线; k>0 为主对角线以上; k<0 为主对角线以下。3.矩阵的变维 矩阵的变维有两种方法,即用“:”和函数“reshape,”前者主要针对 2 个已知维数矩阵之间的变维操作;而后者是对 于一个矩阵的操作。 (1)“:”变维 (2)Reshape 函数变维 格式 B = reshape(A,m,n)%返回以矩阵 A 的元素构成的 m×n 矩阵 B B = reshape(A,m,n,p,)% 将矩阵 A 变维为 m×n×p× B = reshape(A,[m n p])%同上 B = reshape(A,siz)% 由 siz 决定变维的大小,元素个数与 A 中元素个数 相同。 (5)复制和平铺矩阵 函数repmat 格式 B = repmat(A,m,n)% 将矩阵 A 复制 m×n 块,即 B 由 m×n 块 A 平铺而成。 B = repmat(A,[m n])%与上面一致 B = repmat(A,[m n p]) %B 由 m×n×p× 个 A 块平铺而成 repmat(A,m,n)%当 A 是一个数 a 时,该命令产生一个全由 a 组成的 m×n 矩阵。 1.3矩阵分解 1.3.1Cholesky 分解 函数chol 格式R = chol(X)% 如果 X 为 n 阶对称正定矩阵,则存在一个实的非奇异上三角阵R,满足 R'*R = X ;若 X 非正定,则产生错误信息。 [R,p] = chol(X)% 不产生任何错误信息,若X 为正定阵,则p=0 ,R 与上相同;若X 非正定,则p 为正整数, R 是有序的上三角阵。 1.3.2 LU 分解

Matlab 矩阵运算

Matlab 矩阵运算 说明:这一段时间用Matlab做了LDPC码的性能仿真,过程中涉及了大量的矩阵运算,本文记录了Matlab中矩阵的相关知识,特别的说明了稀疏矩阵和有限域中的矩阵。Matlab的运算是在矩阵意义下进行的,这里所提到的是狭义上的矩阵,即通常意义上的矩阵。 目录 第一部分:矩阵基本知识 一、矩阵的创建 1.直接输入法 2.利用Matlab函数创建矩阵 3.利用文件创建矩阵 二、矩阵的拆分 1.矩阵元素 2.矩阵拆分 3.特殊矩阵 三、矩阵的运算 1.算术运算 2.关系运算 3.逻辑运算 四、矩阵分析 1.对角阵 2.三角阵 3.矩阵的转置与旋转 4.矩阵的翻转 5.矩阵的逆与伪逆 6.方阵的行列式 7.矩阵的秩与迹 8.向量和矩阵的范数 9.矩阵的特征值与特征向量 五、字符串 六、其他 第二部分矩阵的应用 一、稀疏矩阵

1.稀疏矩阵的创建 2.稀疏矩阵的运算 3.其他 二、有限域中的矩阵 内容 第一部分:矩阵基本知识(只作基本介绍,详细说明请参考Matlab帮助文档) 矩阵是进行数据处理和运算的基本元素。在MATLAB中 a、通常意义上的数量(标量)可看成是”1*1″的矩阵; b、n维矢量可看成是”n*1″的矩阵; c、多项式可由它的系数矩阵完全确定。 一、矩阵的创建 在MATLAB中创建矩阵有以下规则: a、矩阵元素必须在”[ ]“内; b、矩阵的同行元素之间用空格(或”,”)隔开; c、矩阵的行与行之间用”;”(或回车符)隔开; d、矩阵的元素可以是数值、变量、表达式或函数; e、矩阵的尺寸不必预先定义。 下面介绍四种矩阵的创建方法: 1、直接输入法 最简单的建立矩阵的方法是从键盘直接输入矩阵的元素,输入的方法按照上面的规则。建立向量的时候可以利用冒号表达式,冒号表达式可以产生一个行向量,一般格式是: e1:e2:e3,其中e1为初始值,e2为步长,e3为终止值。还可以用linspace函数产生行向量,其调用格式为:linspace(a,b,n) ,其中a和b 是生成向量的第一个和最后一个元素,n是元素总数。可以看出来linspace(a, b,n)与a:(b-a)/(n-1):b等价。 2、利用MATLAB函数创建矩阵 基本矩阵函数如下: (1) ones()函数:产生全为1的矩阵,ones(n):产生n*n维的全1矩阵,ones (m,n):产生m*n维的全1矩阵; (2) zeros()函数:产生全为0的矩阵; (3) rand()函数:产生在(0,1)区间均匀分布的随机阵; (4) eye()函数:产生单位阵; (5) randn()函数:产生均值为0,方差为1的标准正态分布随机矩阵。 3、利用文件建立矩阵 当矩阵尺寸较大或为经常使用的数据矩阵,则可以将此矩阵保存为文件,在需要

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):产生n*n维的全1矩阵,ones(m,n):产生m*n 维的全1矩阵; (2) zeros()函数:产生全为0的矩阵; (3) rand()函数:产生在(0,1)区间均匀分布的随机阵; (4) eye()函数:产生单位阵; (5) randn()函数:产生均值为0,方差为1的标准正态分布随机矩阵。 3、利用文件建立矩阵 当矩阵尺寸较大或为经常使用的数据矩阵,则可以将此矩阵保存为文件,在需要时直接将文件利用load命令调入工作环境中使用即可。同时可以利用命令reshape对调入的矩阵进行重排。reshape(A,m,n),它在矩阵总元素保持不变的前提下,将矩阵A重新排成m*n的二维矩阵。 二、矩阵的简单操作 1.获取矩阵元素

Matlab基本运算

2.1 变量和数据操作 2.1.1 变量与赋值 1.变量命名 在MATLAB 6.5中,变量名是以字母开头,后接字母、数字或下划线的字符序列,最多63个字符。在MATLAB中,变量名区分字母的大小写。 2.赋值语句 (1) 变量=表达式 (2) 表达式 其中表达式是用运算符将有关运算量连接起来的式子,其结果是一个矩阵。 2.1.2 预定义变量 在MATLAB工作空间中,还驻留几个由系统本身定义的变量。例如,用pi表示圆周率π的近似值,用i,j表示虚数单位。 预定义变量有特定的含义,在使用时,应尽量避免对这些变量重新赋值。 2.1.3 内存变量的管理 1.内存变量的删除与修改 MATLAB工作空间窗口专门用于内存变量的管理。在工作空间窗口中可以显示所有内存变量的属性。当选中某些变量后,再单击Delete 按钮,就能删除这些变量。当选中某些变量后,再单击Open按钮,将进入变量编辑器。通过变量编辑器可以直接观察变量中的具体元

素,也可修改变量中的具体元素。 clear命令用于删除MATLAB工作空间中的变量。who和whos这两个命令用于显示在MATLAB工作空间中已经驻留的变量名清单。who 命令只显示出驻留变量的名称,whos在给出变量名的同时,还给出它们的大小、所占字节数及数据类型等信息。 2.内存变量文件 利用MAT文件可以把当前MATLAB工作空间中的一些有用变量长久地保留下来,扩展名是.mat。MAT文件的生成和装入由save和load 命令来完成。常用格式为: save 文件名[变量名表] [-append][-ascii] load 文件名[变量名表] [-ascii] 其中,文件名可以带路径,但不需带扩展名.mat,命令隐含一定对.mat 文件进行操作。变量名表中的变量个数不限,只要内存或文件中存在即可,变量名之间以空格分隔。当变量名表省略时,保存或装入全部变量。-ascii选项使文件以ASCII格式处理,省略该选项时文件将以二进制格式处理。save命令中的-append选项控制将变量追加到MAT 文件中。 2.1.4 MATLAB常用数学函数 MATLAB提供了许多数学函数,函数的自变量规定为矩阵变量,运算法则是将函数逐项作用于矩阵的元素上,因而运算的结果是一个与自变量同维数的矩阵。 函数使用说明:

matlab matrix 矩阵基本运算

第1章矩阵及其基本运算 MATLAB,即“矩阵实验室”,它是以矩阵为基本运算单元。因此,本书从最基本的运算单元出发,介绍MATLAB的命令及其用法。 1.1 矩阵的表示 1.1.1 数值矩阵的生成 1.实数值矩阵输入 MATLAB的强大功能之一体现在能直接处理向量或矩阵。当然首要任务是输入待处理的向量或矩阵。 不管是任何矩阵(向量),我们可以直接按行方式输入每个元素:同一行中的元素用逗号(,)或者用空格符来分隔,且空格个数不限;不同的行用分号(;)分隔。所有元素处于一方括号([ ])内;当矩阵是多维(三维以上),且方括号内的元素是维数较低的矩阵时,会有多重的方括号。如: >> Time = [11 12 1 2 3 4 5 6 7 8 9 10] Time = 11 12 1 2 3 4 5 6 7 8 9 10 >> X_Data = [2.32 3.43;4.37 5.98] X_Data = 2.43 3.43 4.37 5.98 >> vect_a = [1 2 3 4 5] vect_a = 1 2 3 4 5 >> Matrix_B = [1 2 3; >> 2 3 4;3 4 5] Matrix_B = 1 2 3 2 3 4 3 4 5 >> Null_M = [ ] %生成一个空矩阵 2.复数矩阵输入 复数矩阵有两种生成方式: 第一种方式 例1-1 >> a=2.7;b=13/25; >> C=[1,2*a+i*b,b*sqrt(a); sin(pi/4),a+5*b,3.5+1] C= 1.0000 5.4000 + 0.5200i 0.8544 0.7071 5.3000 4.5000

矩阵运算基础

MATLAB 矩阵运算基础 2.1 在MA TLAB 中如何建立矩阵?? ?? ??194375,并将其赋予变量a ? >> a=[5 7 3;4 9 1] 2.2 有几种建立矩阵的方法?各有什么优点? 可以用四种方法建立矩阵: ①直接输入法,如a=[2 5 7 3],优点是输入方法方便简捷; ②通过M 文件建立矩阵,该方法适用于建立尺寸较大的矩阵,并且易于修改; ③由函数建立,如y=sin(x),可以由MATLAB 的内部函数建立一些特殊矩阵; ④通过数据文件建立,该方法可以调用由其他软件产生数据。 2.3 在进行算术运算时,数组运算和矩阵运算各有什么要求? 进行数组运算的两个数组必须有相同的尺寸。进行矩阵运算的两个矩阵必须满足矩阵运算规则,如矩阵a 与b 相乘(a*b )时必须满足a 的列数等于b 的行数。 2.4 数组运算和矩阵运算的运算符有什么区别? 在加、减运算时数组运算与矩阵运算的运算符相同,乘、除和乘方运算时,在矩阵运算的运算符前加一个点即为数组运算,如a*b 为矩阵乘,a.*b 为数组乘。 2.5 计算矩阵??????????897473535与??????????638976242之和。 >> a=[5 3 5;3 7 4;7 9 8]; >> b=[2 4 2;6 7 9;8 3 6]; >> a+b ans = 7 7 7 9 14 13 15 12 14 2.6 求?? ????+-+-+-+-++=i 44i 93i 49i 67i 23i 57i 41i 72i 53i 84x 的共轭转置。 >> x=[4+8i 3+5i 2-7i 1+4i 7-5i;3+2i 7-6i 9+4i 3-9i 4+4i]; >> x’ ans = 4.0000 - 8.0000i 3.0000 - 2.0000i

实验二matlab矩阵的初等运算及其答案

百度文库- 让每个人平等地提升自我 实验二 Matlab矩阵的初等运算 实验目的:掌握Matlab的运算方法 实验内容: 2.1 在Matlab命令窗口输入: H1=ones(3,2) H2=zeros(2,3) H3=eye(4) 观察以上各输入结果,并在每式的后面标注其含义。 >> format compact >> H1=ones(3,2),disp('3行2列的全1矩阵') H1 = 1 1 1 1 1 1 3行2列的全1矩阵 >> H2=zeros(2,3),disp('2行3列的全零矩阵') H2 = 0 0 0 0 0 0 2行3列的全零矩阵 >> H3=eye(4),disp('4阶的单位矩阵') H3 = 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 4阶的单位矩阵 2.2 已知 123 456 ?? =?? ?? Q,[] 789 = P, 1 ?? =?? ?? R,3 = S,试把这四个矩阵组合 为一个大矩阵,看看有几种组合方式?8 >> format compact >> Q=[1 2 3;4 5 6];P=[7 8 9];R=[1;0]; S=3; >> [Q,R;P,S] ans = 1 2 3 1 4 5 6 0 7 8 9 3 >> [R,Q;P,S] ans = 1 1 2 3 0 4 5 6 7 8 9 3 >> [Q,R;S,P] ans = 1 2 3 1 4 5 6 0 3 7 8 9 >> [R,Q;S,P] ans = 1 1 2 3 0 4 5 6 3 7 8 9 >> [S,P;R,Q] ans = 3 7 8 9 1 1 2 3 0 4 5 6 >> [S,P;Q,R] ans = 3 7 8 9 1 2 3 1 4 5 6 0 >> [P,S;R,Q] ans = 7 8 9 3 1 1 2 3 0 4 5 6 >> [P,S;Q,R] ans = 7 8 9 3 1 2 3 1 4 5 6 0

matlab实验二_矩阵基本运算

实验二 矩阵基本运算一、实验目的 1.熟悉矩阵和向量的建立方式 2.理解矩阵拆分的方法 3.通过实验进一步掌握矩阵的基本运算 二、实验环境 PC一台、MATLAB7.0绿色版 三、实验说明 1.熟练操作MATLAB7.0运行环境 2.自主编写程序,必要时参考相关资料 3.实验前应写出程序大致框架或完整的程序代码5.实验学时:2学时 四、实验内容和步骤 1.实验内容 2.已知, 求下列表达式的值: 1) A+6B和A2-B+I (I为单位矩阵) A=[-1 5 -4;0 7 8;3 61 7]; B=[8 3 -1;2 5 3;-3 2 0]; I=eye(3); >> A+6*B A^2-B+I

2)A*B,A.*B和B*A A*B A.*B >> B*A 3)A/B和B\A >> A/B >> B\A

4)[A,B]和 [A([1,3],:);B^2] >> [A,B] >> [A([1,3],:);B^2] 3.已知 ,取出其前三行构成矩阵B,其前两列构成矩阵C,其右下角3×2子矩阵构成矩阵D,B与C的乘积构成矩阵E,分别求E=10&A<25)

>> A=[23 10 -0.778 0;41 -45 65 5;32 5 0 32;6 -9.54 54 3.14]; B=A([1:3],:); C=A(:,[1,2]); D=A(2:4,[3,4]); E=B*C; E

matlab实验十一 矩阵的基本运算

实验十一矩阵的基本运算 【实验目的】 1.了解矩阵的转置、加、减、乘、逆等基本运算。 2.学习、掌握MATLAB软件的有关命令。 【实验内容】 矩阵的转置、加、减、乘、逆等基本运算 【实验准备】 矩阵基本运算的有关MATLAB命令 矩阵的加减法用“+”和“-”运算符,矩阵相乘用“*”运算符,矩阵转置用“'”运算符,矩阵的逆用inv命令。 【实验重点】 1. 矩阵的基本运算 【实验难点】 1. 矩阵的点运算的区别与应用 【实验方法与步骤】 练习1 输入矩阵 1234 5678 9101112 13141516 A ?? ?? ??= ?? ?? ?? 相应的MATLAB代码为 >>a=[1 2 3 4;5 6 7 8;9 10 11 12;13 14 15 16] 结果为 a=

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 练习2 (矩阵的初等运算)已知矩阵 311111212,210123101A B -?? ?? ???? ==-???? ???????? 求(1)屏幕输出A 和B ;(2)A 的转置A ’;(3)A+B;(4)A-B;(5)6A;(6)AB;(7)A 的逆1A -。 相应的MATLAB 代码及计算结果如下: A=[3 1 1;2 1 2;1 2 3] A= 3 1 1 2 1 2 1 2 3 B=[1 1 -1;2 -1 0;1 0 1] B= 1 1 -1 2 -1 0 1 0 1 A' %A 的转置A' ans=

1 1 2 1 2 3 A+B ans= 4 2 0 4 0 2 2 2 4 A-B ans= 2 0 2 0 2 2 0 2 2 6*A %6A ans= 18 6 6 12 6 12 6 12 18 A*B ans= 6 2 -2 6 1 0

matlab矩阵的表示和简单操作

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):产生n*n维的全1矩阵,ones(m,n):产生m*n维的全1矩阵; (2) zeros()函数:产生全为0的矩阵; (3) rand()函数:产生在(0,1)区间均匀分布的随机阵; (4) eye()函数:产生单位阵; (5) randn()函数:产生均值为0,方差为1的标准正态分布随机矩阵。 3、利用文件建立矩阵 当矩阵尺寸较大或为经常使用的数据矩阵,则可以将此矩阵保存为文件,在需要时直接将文件利用load命令调入工作环境中使用即可。同时可以利用命令reshape对调入的矩阵进行重排。

reshape(A,m,n),它在矩阵总元素保持不变的前提下,将矩阵A重新排成m*n的二维矩阵。 二、矩阵的简单操作 1.获取矩阵元素 可以通过下标(行列索引)引用矩阵的元素,如Matrix(m,n)。 也可以采用矩阵元素的序号来引用矩阵元素。 矩阵元素的序号就是相应元素在内存中的排列顺序。 在MATLAB中,矩阵元素按列存储。 序号(Index)与下标(Subscript )是一一对应的,以m*n矩阵A为例,矩阵元素A(i,j)的序号为(j-1)*m+i。 其相互转换关系也可利用sub2ind和ind2sub函数求得。 2.矩阵拆分 利用冒号表达式获得子矩阵: (1) A(:,j)表示取A矩阵的第j列全部元素;A(i,:)表示A矩阵第i行的全部元素;A(i,j)表示取A矩阵第i行、第j列的元素。 (2) A(i:i+m,:)表示取A矩阵第i~i+m行的全部元素;A(:,k:k+m)表示取A矩阵第k~k+m 列的全部元素,A(i:i+m,k:k+m)表示取A矩阵第i~i+m行内,并在第k~k+m列中的所有元素。此外,还可利用一般向量和end运算符来表示矩阵下标,从而获得子矩阵。end表示某一维的末尾元素下标。 利用空矩阵删除矩阵的元素: 在MATLAB中,定义[]为空矩阵。给变量X赋空矩阵的语句为X=[]。注意,X=[]与clear X 不同,clear是将X从工作空间中删除,而空矩阵则存在于工作空间中,只是维数为0。 3、特殊矩阵 (1) 魔方矩阵魔方矩阵有一个有趣的性质,其每行、每列及两条对角线上的元素和都相等。对于n阶魔方阵,其元素由1,2,3,…,n2共n2个整数组成。MATLAB提供了求魔方矩阵的函数magic(n),其功能是生成一个n阶魔方阵。 (2) 范得蒙矩阵范得蒙(Vandermonde)矩阵最后一列全为1,倒数第二列为一个指定的向量,其他各列是其后列与倒数第二列的点乘积。可以用一个指定向量生成一个范得蒙矩阵。在MATLAB中,函数vander(V)生成以向量V为基础向量的范得蒙矩阵。 (3) 希尔伯特矩阵在MATLAB中,生成希尔伯特矩阵的函数是hilb(n)。使用一般方法求逆会因为原始数据的微小扰动而产生不可靠的计算结果。MATLAB中,有一个专门求希尔伯特矩阵

MATLAB矩阵运算基础练习题

第2章 MATLAB 矩阵运算基础 在MATLAB 中如何建立矩阵?? ?? ??194375,并将其赋予变量a 请产生一个100*5的矩阵,矩阵的每一行都是[1 2 3 4 5] 产生一个1x10的随机矩阵,大小位于(-5 5) 有几种建立矩阵的方法各有什么优点 可以用四种方法建立矩阵: ①直接输入法,如a=[2 5 7 3],优点是输入方法方便简捷; ②通过M 文件建立矩阵,该方法适用于建立尺寸较大的矩阵,并且易于修改; ③由函数建立,如y=sin(x),可以由MATLAB 的内部函数建立一些特殊矩阵; ④通过数据文件建立,该方法可以调用由其他软件产生数据。 在进行算术运算时,数组运算和矩阵运算各有什么要求 进行数组运算的两个数组必须有相同的尺寸。进行矩阵运算的两个矩阵必须满足矩阵运算规则,如矩阵a 与b 相乘(a*b )时必须满足a 的列数等于b 的行数。 数组运算和矩阵运算的运算符有什么区别 在加、减运算时数组运算与矩阵运算的运算符相同,乘、除和乘方运算时,在矩阵运算的运算符前加一个点即为数组运算,如a*b 为矩阵乘,a.*b 为数组乘。 计算矩阵??????????897473535与???? ??????638976242之和,差,积,左除和右除。 求?? ?? ??+-+-+-+-++=i 44i 93i 49i 67i 23i 57i 41i 72i 53i 84x 的共轭转置。 计算???? ??=572396a 与??????=864142b 的数组乘积。 “左除”与“右除”有什么区别 在通常情况下,左除x=a\b 是a*x=b 的解,右除x=b/a 是x*a=b 的解,一般情况下,a\bb/a 。 对于B AX =,如果??????????=753467294A ,???? ??????=282637B ,求解X 。 已知:???? ??????=987654321a ,分别计算a 的数组平方和矩阵平方,并观察其结果。 ??????-=463521a ,?? ????-=263478b ,观察a 与b 之间的六种关系运算的结果。

相关文档
相关文档 最新文档