MAT用基础及教程 10_第1页
MAT用基础及教程 10_第2页
MAT用基础及教程 10_第3页
MAT用基础及教程 10_第4页
MAT用基础及教程 10_第5页
已阅读5页,还剩59页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

矩阵的创建矩阵的修改矩阵的基本运算矩阵的分析字符串结构数组和元胞数组Chapter_02_矩阵及其运算内容提纲重点难点矩阵的生成,

矩阵基本运算作业:见最后页(cha.2)Next:cha.32.1矩阵的创建MATLAB语言最简单的创建矩阵方法是通过键盘在命令窗口直接输入矩阵,直接输入法的规则是:将所有矩阵元素置于一对方括号“[]”内;同一行不同元素之间用逗号“,”或者空格符来分隔;不同行用分号“;”或者回车符分隔。一、直接输入矩阵MATLAB各种数据类型都是以矩阵形式存在,大部分运算都是基于矩阵运算,矩阵主要分为三类:数值矩阵,符号矩阵和特殊矩阵例如,在命令空间输入:>>A=[12;34]%元素之间用空格符分隔,换行用分号A=1234MATLAB语言创建复数矩阵,方法和创建一般实数矩阵一样,虚数单位用i或者j表示。例如,创建复数矩阵:>>B=[1+2i,2-3*j;2+2*sqrt(-2),3.5j]B=1.0000+2.0000i2.0000-3.0000i2.0000+2.8284i0.0000+3.5000i其中:虚部和虚数单位之间可以使用乘号“*”连接,也可以忽略乘号“*”;复数矩阵元素可以用运算表达式;虚数单位用i或者j,显示时都是i。利用冒号“:”产生步长相等的一维数组或行向量。其格式为:x=a:step:ba是数组或者行向量的第一个元素,b是最后一个元素,step是步长增量;冒号表达式可以产生一个由a开始到b结束,以步长step自增或自减(步长为负值,b<a)的数组或者行向量;如果步长step=1,则冒号表达式可以省略步长,直接写为x=a:b。

例如:>>x1=1:1:10x1=12345678910>>x2=1:10x2=12345678910>>x3=10:-2:0x3=1086420二、冒号生成矩阵1linspace函数

可以用linspace函数生成初值、终值和元素个数已知的一维数组或者行向量,元素之间是等差数列。其调用格式如下:x=linspace(a,b,n)a和b分别是生成一维数组或者行向量的初值和终值,n是元素总数。当n省略时候,自动产生100个元素;linspace函数产生的一维数组或者行向量,n个元素是等差数列;当a>b,元素之间是等差递减;当a<b,元素之间是等差递增;显然,linspace(a,b,n)与a:(b-a)/(n-1):b是等价的。>>x1=linspace(0,10,5)x1=02.50005.00007.500010.0000>>x2=linspace(10,0,5)x2=10.00007.50005.00002.50000>>x3=10:(0-10)/(5-1):0x3=10.00007.50005.00002.50000三、利用函数生成矩阵2

logspace函数MATLAB语言可以用logspace函数生成一维数组或者行向量,元素之间也是对数等比数列。其调用格式如下.x=logspace(a,b,n)其中:第一个元素为10^a,最后一个元素为10^b,元素个数为n的对数等比数列;如果b的值为pi,则该函数产生到pi之间n个对数等比数列。例如:>>x1=logspace(1,2,10)x1=10.000012.915516.681021.544327.825635.938146.415959.948477.4264100.0000>>x2=logspace(1,pi,10)x2=10.00008.79287.73146.79805.97745.25584.62134.06343.57293.1416

矩阵还可以由文本文件生成,即先建立txt数据文件,然后在命令窗口直接调用该文件,就能产生数据矩阵。需要注意,txt文件中不含变量名称,文件名为矩阵变量名,每行数值个数相等。优点:可以将数据存储在文本文件中,利用load函数,直接将数据读入工作空间中,自动生成矩阵,而不需要手动输入数据。【例2-1】利用文本文件建立矩阵A,其中把下面代码另存为工作目录中,文件名为A.txt文件。1234>>loadA.txt>>AA=1234四、利用文本文件生成矩阵对于一些比较大的常用矩阵,可以立一个M文件,在命令窗口中调用文件,适合大型矩阵创建,便于修改。需要注意,M文件中的矩阵变量名不能与文件名相同,否则变量名和文件名会混乱。%定义exam_2_2.m函数,将下面代码另存为工作目录下的A=[343230282624323028262422302826242220282624222018262422201816]>>exam_2_2A=343230282624323028262422302826242220282624222018262422201816五、利用M文件生成矩阵MATLAB语言中内置了许多特殊矩阵的生成函数,可以通过这些函数自动生成具有不同特殊性质的矩阵。表2-1是MATLAB语言常见特殊矩阵函数。六、特殊矩阵的生成函数名功能函数名功能eye单位矩阵rand元素服从0~1分布的随机矩阵zeros元素全为零的矩阵randn元素服从0均值单位方差正太分布的随机矩阵ones元素全为1的矩阵diag对角矩阵magic魔方矩阵tril(u)tril下三角矩阵;triu上三角矩阵表2-1常见特殊矩阵函数1.单位矩阵MATLAB语言生成单位矩阵的函数是eye,其调用格式如下:A1=eye(n);A2=eye(m,n)。其中:A1=eye(n)表示生成的单位矩阵;A2=eye(m,n)表示生成

的单位矩阵。

例如:>>A1=eye(3)A1=100010001>>A2=eye(2,3)A2=1000102.0矩阵MATLAB语言生成所有元素为0的矩阵函数是zeros,其调用格式如下:A1=zeros(n);A2=zeros(m,n)。其中:A1=zeros(n)表示生成的0矩阵;A2=zeros(m,n)表示生成

的0矩阵。例如:>>A1=zeros(3)A1=000000000>>A2=zeros(1,3)A2=0003.1矩阵

MATLAB语言生成所有元素为1的矩阵函数是ones,其调用格式如下:A1=ones(n);A2=ones(m,n)。其中:A1=ones(n)表示生成的1矩阵;A2=ones(m,n)表示生成

的1矩阵。例如:>>A1=ones(3)A1=111111111>>A2=ones(2,3)A2=1111114.魔方矩阵魔方矩阵是指行、列、正和反斜对角线元素之和都相等的矩阵,MATLAB语言用magic函数生成魔方矩阵,其调用格式如下:A=magic(n)其中,A=magic(n)表示生成

的魔方矩阵,

且

。例如:>>A=magic(3)A=816357492>>B=sum(A)%计算每列的和B=151515>>C=sum(A')%计算每行的和C=151515显然,由B和C结果可知,矩阵A是一个魔方矩阵。5.

0~1均匀分布随机矩阵MATLAB语言生成0~1均匀分布的随机矩阵函数是rand,其调用格式如下:A1=rand(n)表示生成n*n个元素值为0~1均匀分布的随机矩阵;A2=rand(m,n)表示生成m*n个元素值为0~1均匀分布的随机矩阵;A3=a+(b-a)*rand(m,n)表示生成m*n个元素值为a~b均匀分布的随机矩阵。例如:>>A1=rand(3)A1=0.81470.91340.27850.90580.63240.54690.12700.09750.9575>>A3=10+(15-10)*rand(2,3)A3=10.709414.578714.797512.108813.961013.27876.正态分布随机矩阵MATLAB语言生成均值为0,单位方差的正态分布的随机矩阵函数是randn,其调用格式如下:A1=randn(n)表示生成n*n个元素且均值为0,单位方差的正态分布的随机矩阵;A2=randn(m,n)表示生成m*n个元素的正态分布随机矩阵;A3=a+sqrt(b)*randn(m,n)表示均值为a,方差为b。例如:>>A1=randn(3)A1=-1.20750.4889-0.30340.71721.03470.29391.63020.7269-0.7873>>A3=1+sqrt(0.1)*randn(2,3)%均值为1,方差为0.1A3=1.10281.43330.96770.76130.45880.92367.对角矩阵MATLAB语言生成对角矩阵函数是diag,其调用格式如下:A=diag(v,k)表示生成以向量v元素作为矩阵A的第k条对角线元素的对角矩阵。当k=0时,v为A的主对角线;当k>0时,为主对角线上方第k条对角线元素;当k<0时,为主对角线下方第k条对角线元素。例如:>>v=[321];>>A1=diag(v)A1=300020001若A是一个矩阵,则diag(A)是提取矩阵A的对角线矩阵。>>A=[123;456];>>B=diag(A)B=15>>A2=diag(v,1)A2=03000020000100008.三角矩阵MATLAB语言生成三角矩阵函数是tril和triu,其调用格式如下:A1=tril(A,k)表示生成矩阵A中第k条对角线的下三角部分的矩阵;A1=triu(A,k)表示生成矩阵A中第k条对角线的上三角部分的矩阵;

其中,k=0为A的主对角线,k>0为A的主对角线以上,k<0为A的主对角线以下。例如:

>>A=ones(4);>>L=tril(A,-2)L=0000000010001100>>U=triu(A,0)U=11110111001100012.2矩阵的修改MATLAB语言可以部分替换矩阵的某个值、某行或者某列的值,常用下面格式:A(m,n)=a1表示替换矩阵A中的第m行,第n列元素为a1;A(m,:)=[a1,a2,...an]表示替换第m行的所有元素为a1,a2,…,an;A(:,n)=[a1,a2,…,am]替换第n列的所有元素为a1,a2,…,am。例如:>>A=[123;456;789];>>A(2,:)=[141516]A=

123141516789一、矩阵部分替换>>A=[123;456;789];>>A(:,2)=[121518]%整列替换

A=112341567189MATLAB语言可以部分删除矩阵行或者列,常用下面格式:A(:,n)=[]表示删除矩阵A的第n列;A(m,:)=[]表示删除矩阵A的第m行。例如:>>A=[1234;2345;3456]A=123423453456>>A(2,:)=[]%删除A的第2行A=12343456二、矩阵部分删除>>A(:,2)=[]%删除A的第2列A=134245356MATLAB语言可以部分扩展矩阵,生成大的矩阵,常用下面格式:1.M=[A;BC]其中:A为原矩阵,B和C为要扩展的元素,M为扩展后的矩阵;需要注意,B和C的行数都要相等;B和C的列数之和要与A的列数相等。例如:>>A=[1000;0100]A=10000100>>B=zeros(2);>>C=eye(2);三、矩阵部分扩展>>M=[A;BC]M=10000100001000012.平铺矩阵函数MATLAB语言可以利用平铺矩阵函数repmat扩展矩阵,函数调用格式如下:M=repmat(A,m,n)其中,M=repmat(A,m,n)表示将矩阵A复制扩展为

块。例如:>>A=[123;456;789];>>M=repmat(A,2,3)M=1231231234564564567897897891231231234564564567897897893.指定维数拼接函数利用指定维数拼接函数cat拼接矩阵,函数调用格式如下:M1=cat(1,A,B)垂直拼接;M2=cat(2,A,B)水平拼接;M3=cat(3,A,B)三维拼接。例如:>>A=eye(2);>>B=zeros(2);>>M1=cat(1,A,B)M1=10010000>>M2=cat(2,A,B)M2=10000100>>M3=cat(3,A,B)M3(:,:,1)=1001M3(:,:,2)=00001.上下行对调可以用函数flipud上下变换矩阵的结构。M=flipud(A)其中M=flipud(A)表示将矩阵A的行元素上下对调,列数不变。2.左右列对调可以用函数fliplr左右变换矩阵的结构。M=fliplr(A)其中M=fliplr(A)表示将矩阵A的列元素左右对调,行数不变。例如:>>A=[123;456]A=123456>>M=flipud(A)M=456123四、矩阵结构变换>>A=[136;248]A=136248>>M=fliplr(AM=6318423.逆(顺)时针旋转MATLAB语言可以用函数rot90旋转矩阵的结构,函数调用格式如下:M1=rot90(A)表示将矩阵A逆时针旋转90度;M2=rot90(A,k)表示将矩阵A旋转k*90度,当k>0,逆时针旋转,当k<0,顺时针旋转。例如:>>A=[123;456]A=123456>>M1=rot90(A)M1=362514>>M1=rot90(A,-1)M1=4152634.

转置矩阵的转置用“’”运算符,调用格式如下:M1=A’;M2=B’其中:当A为实数矩阵时候,转置的运算规则是,矩阵的行变列,列变行;

当B为复数矩阵时候,转置的运算规则是,先将B取共轭,然后行变列,列变行,也就是Hermit转置。例如:>>A=[12;34]A=1234>>M1=A'M1=1324>>B=[1+i,1-2i;2+i,2i]B=1.0000+1.0000i1.0000-2.0000i2.0000+1.0000i0.0000+2.0000i>>M2=B'M2=1.0000-1.0000i2.0000-1.0000i1.0000+2.0000i0.0000-2.0000i5.矩阵的变维MATLAB语言可以用函数reshape实现矩阵变维,函数调用格式如下:M=reshape(A,m,n)其中M=reshape(A,m,n)表示以矩阵A的元素构成m*n维M矩阵。显然M中元素个数与A相同。例如:>>A=1:8A=12345678>>M=reshape(A,2,4)M=135724682.3矩阵的基本运算

两个矩阵相加或相减运算的规则是两个同维(相同的行和列)的矩阵对应元素相加减。若一个标量和一个矩阵相加减,规则是标量和所有元素分别进行相加减操作。

加减运算符分别是“+”,“-”。例如:>>A=[123;456];>>B=[234;567];>>M1=A-1M1=012345一、矩阵的加减运算>>M2=A-BM2=-1-1-1-1-1-1两个矩阵相乘运算的规则是第一个矩阵的各行元素分别与第二个矩阵各列元素对应相乘并相加。假定两个矩阵

和

,则,

。若一个标量和一个矩阵相乘,规则是标量和所有元素分别进行乘操作。乘法运算符是“*”。例如:>>A=[123;456];>>B=[12;34;56];>>M1=A*BM1=22284964二、矩阵的乘法运算>>M2=A*2M2=24681012在MATLAB语言中,有两种除法运算:左除和右除。左除和右除的运算符分别是“\”和“/”。假定矩阵A是非奇异方阵,A\B等效为A的逆矩阵左乘B矩阵,即inv(A)*B,相当于方程

的解;B/A等效为A的逆矩阵右乘B矩阵,即B*inv(A),相当于方程

的解。一般来说,A\B≠B/A。例如:>>A=[12;34];>>B=[13;21];>>M1=A\BM1=0-5.00000.50004.0000三、矩阵的除法运算>>M2=B/AM2=2.5000-0.5000-2.50001.5000在MATLAB语言中,当A是方阵,n为大于0的整数时,一个矩阵A的n次乘方运算可以表示成为A^n,即A自乘n次;当n为小于0的整数时,A^n表示A的逆矩阵(A^-1)的|n|次方。例如:>>A=[12;34];>>M1=A^2M1=7101522>>M2=A^-2M2=5.5000-2.5000-3.75001.7500四、矩阵的乘方运算>>M=M1*M2M=1.00000.0000-0.00001.0000显然,由例题可以验证:M=A^2*A^-2=I单位矩阵。

点运算是在有关算术运算符前加点。点运算符有“.*”,“./”,

“.\”,“.^”这四种。点运算规则是对应元素进行相关运算:若两个矩阵A,B进行点乘运算,要求矩阵维度相同,对应元素相乘;如果A,B两个矩阵同维,则A./B表示A矩阵除以B矩阵的对应元素;B.\A表示A矩阵除以B矩阵的对应元素,等价于A./B;若A,B两个矩阵同维,则A.^B表示两个矩阵对应元素进行乘方运算;若b是标量,则A.^b表示A的每个元素与b做乘方运算;若a是标量,则a.^B表示a与B的每个元素进行乘方运算。五、矩阵的点运算例如:>>A=[12;34];>>B=[1-1;21];>>C=A.*B%A点乘BC=1-264>>C=A./B%A点右除BC=1.0000-2.00001.50004.0000>>C=B.\A%B点左除AC=1.0000-2.00001.50004.0000>>C=A.^B%A点乘方BC=1.00000.50009.00004.0000>>a=2;b=2;>>C=A.^b%A点乘方标量bC=14916>>C=a.^B%标量a点乘方BC=2.00000.50004.00002.0000点运算有时候点运算可以代替一重循环运算,例如:当x从0到1,增量是0.1变化,求函数

的值。一般需要用一重循环语句,求出y的值。而用MATLAB语言的点运算,可以很方便求出y的值,具体代码如下:>>x=0:0.1:1x=00.10000.20000.30000.40000.50000.60000.70000.80000.90001.0000>>y=exp(x)*sin(x)错误使用*内部矩阵维度必须一致。>>y=exp(x).*sin(x)y=00.11030.24270.39890.58090.79041.02881.29731.59651.92672.2874其中,y表达式中必须用点乘运算,因为exp(x)和sin(x)是一个1同维的矩阵。例如:>>A=[12;34];>>B=[1-1;21];>>C=A.*B%A点乘BC=1-264>>C=A./B%A点右除BC=1.0000-2.00001.50004.0000>>C=B.\A%B点左除AC=1.0000-2.00001.50004.0000>>C=A.^B%A点乘方BC=1.00000.50009.00004.00002.4矩阵的分析D=det(A)函数求方矩阵A的行列式的值。1.矩阵的秩与矩阵线性无关的行或者列数称为矩阵的秩。r=rank(A)函数求矩阵的秩2.矩阵的迹

矩阵的迹等于矩阵的对角线元素之和,也等于矩阵的特征值之和t=trace(A)函数求矩阵的迹例如:>>A=[101;210;021];>>D=det(A)D=5一、方矩阵的行列式二、矩阵的秩和迹>>r=rank(A)r=3>>t=trace(A)t=31.方阵的逆矩阵

在MATLAB语言里,用求逆矩阵的函数是inv(A)。例如:>>A=[101;210;021]A=101210021>>B=inv(A)B=0.20000.4000-0.2000-0.40000.20000.40000.8000-0.40000.2000显然,A*B=B*A=I,故B与A是互逆矩阵。三、矩阵的逆和伪逆>>A*Bans=100010001>>B*Aans=1000100012.矩阵的伪逆矩阵

如果矩阵A不是一个方阵,或者A为非满秩矩阵,那么就不存在逆矩阵,但可以求广义上的逆矩阵B,称为伪逆矩阵。MATLAB语言用B=pinv(A)函数求伪逆矩阵。例如:>>A=[101;210]A=101210>>B=pinv(A)B=0.16670.3333-0.33330.33330.8333-0.3333>>A*Bans=1.00000.0000-0.00001.0000在线性代数中,可以用矩阵求逆的方法求解线性方程组的解。将设有n个未知数,由n个方程构成线性方程组,表示为:用矩阵表示为:

其中:

线性方程组的解为:所以,求系数矩阵A的逆矩阵,可以求线性方程组的解。【例2-3】利用MATLAB求系数矩阵的逆矩阵方法,求线性方程组的解。MATLAB命令程序如下:A=[1-11;31-1;111];b=[3;6;4];x=inv(A)*bx=2.25000.50001.2500求矩阵的特征值和特征向量用eig(A)函数,常用下面两种格式:E=eig(A):求矩阵A的特征值,构成向量E;[v,D]=eig(A)求矩阵A的特征值D和特征向量v。例如:>>A=[111;100.25;0.50.252];>>[v,D]=eig(A)v=0.5334-0.68340.6435

-0.8456-0.53260.3174

-0.02110.49920.6966D=-0.624600

01.04880

002.5758显然,A*v=v*D,故D和v分别是A矩阵的特征值和特征向量。四、矩阵的特征值和特征向量>>A*vans=-0.3332-0.71681.65740.5282-0.55860.81760.01320.52361.7942>>v*Dans=-0.3332-0.71681.65740.5282-0.55860.81760.01320.52361.7942特征值还应用求解一元多次方程的根,具体方法是,先将方程的多项式系数组成行向量a,然后用compan(a)函数构造成伴随矩阵A,最后再用eig(A)函数求A的特征值,特征值就是方程的根。【例2-4】用MATLAB求特征值的方法求解一元多次方程的根,方程如下:MATLAB命令程序如下:a=[1-555-60];A=compan(a);x1=eig(A)x1=03.0000-1.00002.00001.0000显然,用这两种不同方法求解一元多次方程的根,结果是一样的。求一元多次方程的根还可以利用多项式函数roots。x2=roots(a)x2=03.0000-1.00002.00001.00001.对称正定矩阵分解对称正定矩阵Cholesky分解用函数chol(A),函数语法格式如下:[R,p]=chol(A),其中分解后的R满足R’*R=A。若A是n阶对称正定矩阵,则R为实数的非奇异上三角矩阵,p=0;若A是非正定矩阵,则p为正整数。例如:已知A=[111;123;136],求该矩阵的Cholesky分解。MATLAB语言程序代码及结果如下:>>A=[111;123;136];>>[R,p]=chol(A)R=111012001p=0五、矩阵的分解>>R'*Rans=1111231362.矩阵的高斯消去法分解lu(A)函数实现LU分解。函数语法格式如下:[L,U]=lu(A),其中L为下三角矩阵或其变换形式,U为上三角矩阵,且满足LU=A;[L,U,P]=lu(A),其中L为下三角矩阵,U为上三角矩阵,P为单位矩阵的行变换矩阵,且满足LU=PA。例如:已知A=[123;456;789],求该矩阵的LU分解。>>A=[123;456;789];>>[L,U]=lu(A)L=0.14291.000000.57140.50001.00001.000000LU分解得到的L是一个下三角变换矩阵,U是一个上三角矩阵,且满足L*U=A。U=7.00008.00009.000000.85711.714300-0.0000>>L*Uans=1234567893.矩阵的正交分解qr(A)函数实现QR分解。函数语法格式如下:[Q,R]=qr(A),其中Q为正交矩阵,R为上三角矩阵,满足QR=A;[Q,R,E]=qr(A),其中Q为正交矩阵,R为对角元素按大小降序排列上三角矩阵,E为单位矩阵的变换形式,且满足QR=AE。例如:已知A=[123;456;789],求该矩阵的QR分解。>>A=[123;456;789];>>[Q,R]=qr(A)Q=-0.12310.90450.4082-0.49240.3015-0.8165-0.8616-0.30150.4082R=-8.1240-9.6011-11.078200.90451.809100-0.0000QR分解得到的Q是一个正交矩阵,R是一个上三角矩阵,且满足Q*R=A。>>Q*Rans=1.00002.00003.00004.00005.00006.00007.00008.00009.00004.矩阵的奇异值分解svd(A)函数实现奇异值分解。函数语法格式如下:s=svd(A),产生矩阵A的奇异值向量;[U,S,V]=svd(A),产生一个与A同大小的对角矩阵S,两个酉矩阵U和V,且满足A=U*S*V'。若A为m×n阵,则U为m×m阵,V为n×n阵。奇异值在S的对角线上,非负且按降序排列。例如:已知A=[123;456],求该矩阵的奇异值分解。>>A=[123;456];>>[U,S,V]=svd(A)U=-0.3863-0.9224-0.92240.3863S=9.50800000.77290奇异值分解得到的一个与A同大小的对角矩阵S,两个酉矩阵U和V,且满足A=U*S*V'。V=-0.42870.80600.4082-0.56630.1124-0.8165-0.7039-0.58120.4082>>U*S*V'ans=1.00002.00003.00004.00005.00006.00001.Sizesize(A)函数来获取矩阵A的行和列的数。调用格式如下所示:D=size(A),返回一个行和列数构成两个元素的行向量;[M,N]=size(A),返回矩阵A的行数为M,和列数为N。2.lengthlength(A)函数获取矩阵A的行数和列数的较大者,调用格式为d=length(A),返回矩阵A的行数和列数的较大者。3.numelnumel(A)函数来获取矩阵A的元素总个数。调用格式为:n=numel(A),返回矩阵A的元素总个数。>>A=[123;456]>>D=size(A)D=23>>[M,N]=size(A)M=2N=3六、矩阵的信息获取函数>>d=length(A)d=3>>n=numel(A)n=62.5字符串字符串一般以ASCII码形式存储,以行向量形式存在,并且每个字符占用两个字节的内存。创建一个字符串有下面几种方法:1)

直接将字符内容用单引号('')括起来2)用方括号连接多个字符串组成一个长字符串>>str='Student_name'str=Student_name>>whosNameSizeBytesClassAttributesStr1x1224char若要显示单引号(')字符,需要使用两个单引号,例如:>>str='I''mastudent'str=I'mastudent一、字符串的创建>>str=['I''m''a''student']str=I'mastudent3)用函数strcat把多个字符串水平连接合并成一个长字符串。str=strcat(str1,str2,…)>>str1='I''mastudent';>>str2='of';>>str3='GuangdongOceanUniversity';>>str=strcat(str1,str2,str3)str=I'mastudentofGuangdongOceanUniversity4)用函数strvcat把多个字符串连接成多行字符串。str=strvcat(str1,str2,…)>>str1='good';>>str2='verygood';>>str3='veryverygood';>>strvcat(str1,str2,str3)ans=goodverygoodveryverygoodabs或者double函数获取字符串所对应的ASCII码数值矩阵。相反,可以用char函数把ASCII码转换为字符串。例如>>str1=‘I’’mastudent’;

>>A=abs(str1)%把字符串转换为对应的ASCII码数值矩阵A=7339109329732115116117100101110116>>str=char(A)%把ASCII码数值矩阵转换为字符串str=I'mastudent【例2-5】已知一个字符串向量str='ItisaGreenBird',完成以下任务:1)计算字符串向量字符个数;2)显示‘aGreenBird’3)将字符串倒序重排4)将字符串中的大字母变成相应小写字符,其余字符不变。str='ItisaGreenBird'%创建字符串向量n=length(str)%计算字符串向量字符个数str1=str(7:18)%显示‘aGreenBird’str2=str(end:-1:1)%将字符串倒序重排k=find(str>='A'&str<='Z')%查找大写字母的位置str(k)=str(k)+('a'-'A')%将大写字符变成相应小写字母程序运行结果如下:str=ItisaGreenBirdn=18str1=aGreenBirdstr2=driBneerGasitIk=1915str=itisagreenbird二、字符串的操作1.字符串比较MATLAB语言比较两个字符串是否相同的常用函数有四个:strcmp、strncmp、strcmpi和strncmpi,字符串比较函数的调用格式及功能说明如表2-2所示。函数名调用格式功能说明strcmpstrcmp(str1,str2)比较两个字符串是否相等,相等为1,不等为0strncmpstrncmp(str1,str2,n)比较两个字符串前n个字符是否相等,相等为1,不等为0strcmpistrcmpi(str1,str2)忽略大小写,比较两个字符串是否相等,相等为1,不等为0strncmpistrncmpi(str1,str2,n)忽略大小写,比较两个字符串前n个字符是否相等,相等为1,不等为0表2-2字符串比较函数格式及功能例题见书本p.532.字符串查找和替换MATLAB语言查找与替换字符串常用函数有五个:strfind、findstr、strmatch、strtok和strrep,字符串查找函数的调用格式及功能说明如表2-3所示。表2-3字符串查找函数函数名功能说明strfind(str,'str1')在字符串str中查找另一个字符串str1出现的位置findstr(str,'str1')在一个较长符串str中查找较短字符串str1出现的位置strmatch('str1',str)在str字符串数组中,查找匹配以字符str1为开头的所在的行数strtok(str)从字符串str中截取第一个分隔符(包括空格,Tab键,回车键)前面的字符串strrep(str,'oldstr','newstr')在原来字符串str中,用新的字符串newstr替换旧的字符串oldstr例题见书本p.543.字符串的其他操作在MATLAB语言中,除了常用的字符串创建、比较、查找和替换操作外,还有许多其他字符串操作,如表2-4所示。表2-4字符串其他操作函数函数名函数功能及说明upper(str)将字符串str中的字符转为大写lower(str)将字符串str中的字符转为小写strjust(str,’right’)strijust(str)将字符串str右对齐strjust(str,’left’)将字符串str左对齐strjust(str,’center’)将字符串str中间对齐strtrim(str)删除字符串开头和结束的空格符eval(str)执行字符常量str运算例题见书本p.55三、字符串转换在MATLAB语言中,字符串进行算术运算,会自动转换为数值型。提供许多字符串与数值之间转换函数,如表2-5所示。表2-5字符串与数值转换函数函数名格式及例子功能与说明absabs('a')=97将字符串转换为ASCII码数值doubledouble('a')=97将字符串转换为ASCII码数值的双精度数据charchar(97)=a将数值整数部分转换为ASCII码等值的字符str2numstr2num('23')=23将字符串转为数值num2strnum2str(63)='63'将数值转为字符串str2doublestr2double('97')=97将字符串转为双精度类型数据mat2strmat2str([32,64;97,101])='[3264;97101]'将矩阵转为字符串dec2hexdec2hex(64)='40'将十进制整数转为十六进制整数字符串hex2dechex2dec('40')=64将十六进制字符串转为十进制整数dec2bindec2bin(16)='10000'将十进制整数转为二进制整数字符串b

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论