matlab 求矩阵程序设计,MATLAB程序设计教程(2)—MATLAB矩阵及其运算(3)

(3) [V,D]=eig(A,‘nobalance’):与第2种格式类似,但第2种格式中先对A作相似变换后求矩阵A的特征值和特征向量,而格式3直接求矩阵A的特征值和特征向量。

例2-12 用求特征值的方法解方程。

3x5-7x4+5x2+2x-18=0

p=[3,-7,0,5,2,-18];

A=compan(p); %A的伴随矩阵

x1=eig(A) %求A的特征值

x2=roots(p) %直接求多项式p的零点

2.5 矩阵的超越函数

1.矩阵平方根sqrtm

sqrtm(A)计算矩阵A的平方根。

2.矩阵对数logm

logm(A)计算矩阵A的自然对数。此函数输入参数的条件与输出结果间的关系和函数sqrtm(A)完全一样

3.矩阵指数expm、expm1、expm2、expm3

expm(A)、expm1(A)、expm2(A)、expm3(A)的功能都求矩阵指数eA。

4.普通矩阵函数funm

funm(A,‘fun’)用来计算直接作用于矩阵A的由‘fun’指定的超越函数值。当fun取sqrt时,funm(A,‘sqrt’)可以计算矩阵A的平方根,与sqrtm(A)的计算结果一样。

2.6 字符串

在MATLAB中,字符串是用单撇号括起来的字符序列。

MATLAB将字符串当作一个行向量,每个元素对应一个字符,其标识方法和数值向量相同。也可以建立多行字符串矩阵。

字符串是以ASCII码形式存储的。abs和double函数都可以用来获取字符串矩阵所对应的ASCII码数值矩阵。相反,char函数可以把ASCII码矩阵转换为字符串矩阵。

例2-13 建立一个字符串向量,然后对该向量做如下处理:

(1) 取第1~5个字符组成的子字符串。

(2) 将字符串倒过来重新排列。

(3) 将字符串中的小写字母变成相应的大写字母,其余字符不变。

(4) 统计字符串中小写字母的个数。

命令如下:

ch=‘ABc123d4e56Fg9’;

subch=ch(1:5) %取子字符串

revch=ch(end:-1:1) %将字符串倒排

k=find(ch>=‘a’&ch<=‘z’); %找小写字母的位置

ch(k)=ch(k)-(‘a’-‘A’); %将小写字母变成相应的大写字母

char(ch)

length(k) %统计小写字母的个数

与字符串有关的另一个重要函数是eval,其调用格式为:

eval(t)

其中t为字符串。它的作用是把字符串的内容作为对应的MATLAB语句来执行。

2.7 结构数据和单元数据

2.7.1 结构数据

1.结构矩阵的建立与引用

结构矩阵的元素可以是不同的数据类型,它能将一组具有不同属性的数据纳入到一个统一的变量名下进行管理。建立一个结构矩阵可采用给结构成员赋值的办法。具体格式为:

结构矩阵名.成员名=表达式

其中表达式应理解为矩阵表达式。

2.结构成员的修改

可以根据需要增加或删除结构的成员。例如要给结构矩阵a增加一个成员x4,可给a中任意一个元素增加成员x4:

a(1).x4=‘410075’;

但其他成员均为空矩阵,可以使用赋值语句给它赋确定的值。

要删除结构的成员,则可以使用rmfield函数来完成。例如,删除成员x4:

a=rmfield(a,‘x4’);

3.关于结构的函数

除了一般的结构数据的操作外,MATLAB还提供了部分函数来进行结构矩阵的操作。

2.7.2 单元数据

1.单元矩阵的建立与引用

建立单元矩阵和一般矩阵相似,只是矩阵元素用大括号括起来。

可以用带有大括号下标的形式引用单元矩阵元素。例如b{3,3}。单元矩阵的元素可以是结构或单元数据。

可以使用celldisp函数来显示整个单元矩阵,如celldisp(b)。还可以删除单元矩阵中的某个元素。2.关于单元的函数

MATLAB还提供了部分函数用于单元的操作。

2.8 稀疏矩阵

2.8.1 矩阵存储方式

MATLAB的矩阵有两种存储方式:完全存储方式和稀疏存储方式。

1.完全存储方式

完全存储方式是将矩阵的全部元素按列存储。以前讲到的矩阵的存储方式都是按这个方式存储的,此存储方式对稀疏矩阵也适用。

2.稀疏存储方式

稀疏存储方式仅存储矩阵所有的非零元素的值及其位置,即行号和列号。在MATLAB中,稀疏存储方式也是按列存储的。

注意,在讲稀疏矩阵时,有两个不同的概念,一是指矩阵的0元素较多,该矩阵是一个具有稀疏特征的矩阵,二是指采用稀疏方式存储的矩阵。

2.8.2 稀疏存储方式的产生

1.将完全存储方式转化为稀疏存储方式

函数A=sparse(S)将矩阵S转化为稀疏存储方式的矩阵A。当矩阵S是稀疏存储方式时,则函数调用相当于A=S。

sparse函数还有其他一些调用格式:

sparse(m,n):生成一个m×n的所有元素都是0的稀疏矩阵。

sparse(u,v,S)--:u,v,S是3个等长的向量。S是要建立的稀疏矩阵的非0元素,u(i)、v(i)分别是S(i)的行和列下标,该函数建立一个max(u)行、max(v)列并以S为稀疏元素的稀疏矩阵。

此外,还有一些和稀疏矩阵操作有关的函数。例如

[u,v,S]=find(A):返回矩阵A中非0元素的下标和元素。这里产生的u,v,S可作为sparse(u,v,S)的参数。

full(A):返回和稀疏存储矩阵A对应的完全存储方式矩阵。

2.产生稀疏存储矩阵

只把要建立的稀疏矩阵的非0元素及其所在行和列的位置表示出来后由MATLAB自己产生其稀疏存储,这需要使用spconvert函数。调用格式为:

B=spconvert(A)

其中A为一个m×3或m×4的矩阵,其每行表示一个非0元素,m是非0元素的个数,A每个元素的意义是:

(i,1) 第i个非0元素所在的行。

(i,2) 第i个非0元素所在的列。

(i,3) 第i个非0元素值的实部。

(i,4) 第i个非0元素值的虚部,若矩阵的全部元素都是实数,则无须第四列。

该函数将A所描述的一个稀疏矩阵转化为一个稀疏存储矩阵。

例2-15 根据表示稀疏矩阵的矩阵A,产生一个稀疏存储方式矩阵B。

命令如下:

A=[2,2,1;3,1,-1;4,3,3;5,3,8;6,6,12];

B=spconvert(A)

3.带状稀疏存储矩阵

用spdiags函数产生带状稀疏矩阵的稀疏存储,调用格式是:

A=spdiags(B,d,m,n)

其中,参数m,n为原带状矩阵的行数与列数。B为r×p阶矩阵,这里r=min(m,n),p为原带状矩阵所有非零对角线的条数,矩阵B的第i列即为原带状矩阵的第i条非零对角线。

4.单位矩阵的稀疏存储

单位矩阵只有对角线元素为1,其他元素都为0,是一种具有稀疏特征的矩阵。函数eye产生一个完全存储方式的单位矩阵。MATLAB还有一个产生稀疏存储方式的单位矩阵的函数,这就是speye。函数speye(m,n)返回一个m×n的稀疏存储单位矩阵。

2.8.3 稀疏矩阵应用举例

稀疏存储矩阵只是矩阵的存储方式不同,它的运算规则与普通矩阵是一样的。所以,在运算过程中,稀疏存储矩阵可以直接参与运算。当参与运算的对象不全是稀疏存储矩阵时,所得结果一般是完全存储形式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值