版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二讲基本运算第一页,共一百一十九页,编辑于2023年,星期四矩阵和数组MATLAB提供了一种计算机高级编程语言——M语言MATLAB提供了不同类型的数据MATLAB专门以矩阵作为基本的运算单位MATLAB提供了关于数组和矩阵不同的运算方法第二页,共一百一十九页,编辑于2023年,星期四在M语言中最常用的数据类型表现手段和形式就是变量和常量M语言的基本处理单位是数值矩阵或者数值向量回顾有关概念变量和常量数组向量矩阵第三页,共一百一十九页,编辑于2023年,星期四变量和常量变量:程序运行过程中需要改变数值的量每一个变量都具有一个名字变量在内存中占据一定的空间变量必须以字母开头,后面可以是字母、数字或者下划线的组合MATLAB仅识别前面N个字符,在不同的操作系统下可以识别的字符个数不同常量:在程序运行的过程中不需要改变数值的量常量具有名字在M语言中不存在常量的定义,只在MATLAB中提供一些常用的常数作为常量第四页,共一百一十九页,编辑于2023年,星期四MATLAB的常量常量说明ans最近运算的结果eps浮点数相对精度,定义为1.0到最近浮点数的距离realmaxMATLAB能表示的实数的最大绝对值realminMATLAB能表示的实数的最小绝对值pi圆周率的近似值3.1415926i,j复数的虚部数据最小单位inf或Inf表示正无大,定义为1/0NaN或nan非数,它产生于0×,0/0,/等运算第五页,共一百一十九页,编辑于2023年,星期四数组是有序数据的集合数组的每一个成员(元素)都属于同一种数据类型,它们使用同一个数组名称和不同的下标来唯一确定数组中的成员(元素)。在MATLAB中元胞数组比较特殊,数组中的元素可以是不同的数据类型。第六页,共一百一十九页,编辑于2023年,星期四向量从编程语言的角度上看,向量其实就是一维数组从数学的角度上看,向量就是1×N或者N×1的矩阵,即行向量或列向量b1,1b2,1B=b3,1和B=[b1,1b1,2b1,3······b1,n]∶∶bn,1第七页,共一百一十九页,编辑于2023年,星期四矩阵是用一对圆括号或方括号括起来,符合一定规则的数学对象b11b12b13B=b21b22b23b31b32b33对于编程语言,矩阵就是二维的数组第八页,共一百一十九页,编辑于2023年,星期四创建向量1.在命令窗口逐个输入元素例1:>>X=[13pi3+5i]2.利用冒号运算符创建向量 X=J:INC:KJ为向量的第一个元素,K为向量的最后一个元素,INC为向量元素递增的步长J、INC、K之间必须用“:”间隔若忽略INC,则默认的递增步长为1INC可以为正数,也可以为负数例2:>>X=1:10例3:>>X=1:0.01:1.1
第九页,共一百一十九页,编辑于2023年,星期四创建向量(续)3.定数线性采样法:在设定的“总点数”下,均匀采样生成向量(一维“行”数组)使用函数linspace和logspacelinspace是用来创建线性间隔向量的函数linspace的基本语法X=linespace(X1,X2,n)X1为向量的第一个元素,X2为向量的最后一个元素,n为向量具有的元素个数,函数将根据n的数值平均计算元素之间的间隔,间隔计算公式为若在表达式中忽略参数n,则系统默认地将向量设置为100个元素第十页,共一百一十九页,编辑于2023年,星期四创建向量(续)例4使用linspace函数创建向量>>X=linspace(1,2,5)X=1.00001.25001.50001.75002.0000第十一页,共一百一十九页,编辑于2023年,星期四创建向量(续)logspace是用来创建对数空间的向量logspace的基本语法X=logspace(X1,X2,n)该函数创建的向量第一个元素值为10X1,而最后一个元素的数值为10X2,n为向量的元素个数,元素彼此之间的间隔按照对数空间的间隔设置若在表达式中忽略参数n,则系统默认地将向量设置为50个元素第十二页,共一百一十九页,编辑于2023年,星期四创建向量(续)例5使用logspace函数创建向量>>X=logspace(1,3,3)X=101001000第十三页,共一百一十九页,编辑于2023年,星期四创建向量(续)创建列向量使用分号作为元素与元素之间的间隔使用转置运算符“'”例6:>>A=[1;2;3;4;5;6]或>>A=(1:6)'第十四页,共一百一十九页,编辑于2023年,星期四创建矩阵矩阵的元素可以为任意MATLAB数据类型的数值或对象创建矩阵的方法直接输入法使用数组编辑器
第十五页,共一百一十九页,编辑于2023年,星期四直接输入法规则:整个矩阵的元素必须用[]括住同一行的矩阵元素之间必须用逗号或空格分隔在[]内矩阵的行与行之间必须用分号分隔,也可以在需要分行的地方用回车键间隔矩阵元素可以是任何MATLAB表达式,可以是实数,也可以是复数,复数用i,j输入
例2-7:>>A=[1,2,3;4,5,6;7,8,9]>>X=[2pi/2;sqrt(3)3+5i]
第十六页,共一百一十九页,编辑于2023年,星期四逗号和分号的作用逗号和分号可作为指令间的分隔符,MATLAB允许多条语句在同一行出现。分号如果出现在指令后,屏幕上将不显示结果。只要是赋过值的变量,不管是否在屏幕上显示过,都会存储在工作空间中,以后可随时显示或调用。变量名尽可能不要重复,否则会覆盖。直接输入法(续)第十七页,共一百一十九页,编辑于2023年,星期四例8:>>A=[1,2,3;4,5,6;7,8,9],X=[2pi/2;sqrt(3)3+5i]A=123456789X=2.00001.57081.73213.0000+5.0000i>>A=[1,2,3;4,5,6;7,8,9];X=[2pi/2;sqrt(3)3+5i]X=2.00001.57081.73213.0000+5.0000i直接输入法(续)第十八页,共一百一十九页,编辑于2023年,星期四冒号的作用用于生成等间隔的向量,默认间隔为1。例9:>>y=[1:3;4:6;7:9]直接输入法(续)第十九页,共一百一十九页,编辑于2023年,星期四数组编辑器调用数组编辑器的方法选择工作空间浏览器中的变量,然后单击工作栏中的按钮在工作空间浏览器中直接双击变量选择工作空间浏览器中的变量,然后单击快捷菜单命令Open在MATLAB命令行窗口中键入指令“openvar变量名”数组编辑器仅能编辑、修改向量或矩阵,对于多维数组,数组编辑器只能察看数组的内容,不能修改多维数组的元素第二十页,共一百一十九页,编辑于2023年,星期四数组编辑器(续)利用数组编辑器完成矩阵的编辑步骤在命令行窗口中创建一个新的变量,为其赋任意数值如:A=1打开数组编辑器,在数组编辑器中加载相应的变量在数组编辑器的工具栏中,修改矩阵的行数和列数,双击任意元素修改矩阵的元素值第二十一页,共一百一十九页,编辑于2023年,星期四矩阵的修改直接修改在命令行窗口中,可用↑键找到所要修改的矩阵,用←键移动到要修改的矩阵元素上即可修改。在数组编辑器中,可用↑、↓、←、→键找到所要修改的矩阵元素进行修改。指令修改:用A(,)=来修改。例10:>>A=[120;305;789]A=120305789>>A(3,3)=0A=120 305 780第二十二页,共一百一十九页,编辑于2023年,星期四矩阵元素的访问访问矩阵的元素需要使用矩阵元素的索引使用矩阵元素的行列全下标形式A(*,*)使用全下标形式访问矩阵元素的方法简单、直接,同线性代数的矩阵元素的概念一一对应使用矩阵元素的单下标形式A(*)矩阵元素的单下标是矩阵元素在内存中存储的序列号,一般地,同一个矩阵的元素在连续的内存单元中(元素的排列以列元素优先)第二十三页,共一百一十九页,编辑于2023年,星期四矩阵元素的访问(续)4
110
5196
132
178
22
69
104
147
187
35
77
111
155
190
43
84
125
168
20A(1:4,5)A(:,5)A(:,end)A(17:20)'A(2:4,2:3)A([234],[23])A(1,2)A(5)例13A=第二十四页,共一百一十九页,编辑于2023年,星期四矩阵元素的访问(续)使用索引访问矩阵元素的方法矩阵元素的访问说明A(i,j)访问矩阵A的第i行第j列上的元素,其中i和j为标量A(I,J)访问由向量I和J指定的矩阵A中的元素A(i,:)访问矩阵A中第i行的所有元素A(:,j)访问矩阵A中第j列的所有元素A(:)访问矩阵A中的所有元素,将矩阵看成一个向量A(l)使用单下标的方式访问矩阵元素,其中l为标量A(L)访问由向量L指定的矩阵A的元素,向量L中的元素为矩阵元素的单下标数值在索引矩阵或数组的元素时,若直接用冒号运算符且不给任何的参数,则表示选择该行或列,或维中的所有元素第二十五页,共一百一十九页,编辑于2023年,星期四矩阵元素的访问(续)例:用不同的方法访问矩阵的元素>>A=1:25>>A=reshape(A,5,5)A=16111621271217223813182349141924510152025>>A(3,1)或A(3)ans=3>>A(3,:)ans=3813182316111621271217223813182349141924510152025>>A(end,:)ans=510152025>>I=[135];J=[24];>>A(I,J)>>A([135],[24])ans=6168181020>>A(:,4)ans=1617181920第二十六页,共一百一十九页,编辑于2023年,星期四矩阵的基本运算函数基本数学运算规则数组的运算运算函数运算指令第二十七页,共一百一十九页,编辑于2023年,星期四矩阵生成函数函数说明zeros产生元素全为0的矩阵ones产生元素全为1的矩阵eye产生单位矩阵rand产生均匀分布的随机数矩阵,数值范围(0,1)randn产生均值为0,方差为1的正态分布随机数矩阵diag获取矩阵的对角线元素,也可生成对角矩阵tril产生下三角矩阵triu产生上三角矩阵pascal产生帕斯卡矩阵magic产生幻方阵第二十八页,共一百一十九页,编辑于2023年,星期四例14矩阵生成函数示例>>A=zeros(3)A=000000000>>A=ones(3)A=111111111矩阵生成函数(续)>>A=eye(3)A=100010001>>A=rand(3)A=0.95010.48600.45650.23110.89130.01850.60680.76210.8214>>A=randn(3)A=-0.43260.28771.1892-1.6656-1.1465-0.03760.12531.19090.3273第二十九页,共一百一十九页,编辑于2023年,星期四例14矩阵生成函数示例>>A=magic(3)A=816357(15)492>>A=magic(4)A=162313511108(34)97612414151矩阵生成函数(续)第三十页,共一百一十九页,编辑于2023年,星期四基本矩阵运算运算命令说明A’矩阵转置A^n矩阵求幂,n可以为任意实数A*B矩阵相乘A/B矩阵右除(一般的除法,A/B=A÷B)A\B矩阵左除(一种倒置的除法,A\B=B÷A)A+B矩阵相加A-B矩阵相减inv矩阵求逆,注意不是所有的矩阵都有逆矩阵det求方阵的行列式rank求矩阵的秩eig求矩阵的特征向量和特征值svd对矩阵进行奇异值分解norm求矩阵的范数第三十一页,共一百一十九页,编辑于2023年,星期四1.矩阵加、减运算(A+B、A-B)规则:相加、减的两矩阵必须有相同的行和列,两矩阵对应元素相加减。MATLAB允许参与运算的两矩阵之一是标量,标量与矩阵的所有元素分别进行加减操作。例:A=[123;456]B=[345;789]C=3A+B=[468;111315]A+C=[456;789]B+C=[678;101112]基本矩阵运算(续)第三十二页,共一百一十九页,编辑于2023年,星期四2.矩阵乘运算A*B:A矩阵的列数必须等于B矩阵的行数。s*A或A*s:标量可与任何矩阵相乘,标量s分别与矩阵A每个元素相乘。例:>>A=[123;456;780];B=[1;2;3];>>C=A*BC=143223>>D=[-1;0;2];>>F=pi*DF=-3.141606.2832
基本矩阵运算(续)第三十三页,共一百一十九页,编辑于2023年,星期四
3.矩阵除运算及线性方程组的解在线性代数中没有矩阵的除运算,只有矩阵逆的运算,在MATLAB中有两种矩阵除运算。 A/B—矩阵右除,相当于Ainv(B) A\B—矩阵左除,相当于inv(A)B因此,x=A\B是线性方程组Ax=B的解。例:求解方程组3x1+x2-x3=3.6x1+2x2+4x3=2.1-x1+4x2+5x3=-1.4>>A=[31-1;124;-145];>>B=[3.6;2.1;-1.4];
>>x=A\Bx= 1.4818 -0.4606 0.3848基本矩阵运算(续)第三十四页,共一百一十九页,编辑于2023年,星期四4.矩阵乘方
A^n——A自乘n次幂
例>>a=[1,2,3;4,5,6;7,8,9];>>a^2ans=303642668196102126150
方阵>1的整数基本矩阵运算(续)第三十五页,共一百一十九页,编辑于2023年,星期四数组运算指元素对元素的算术运算,与通常意义上的由符号表示的线性代数矩阵运算不同。1. 数组加减(+,-)运算规则:相加、减的两数组必须有相同的行和列,两数组对应元素相加减。MATLAB允许参与运算的两数组之一是标量,标量与数组的所有元素分别进行加减操作 A+B A-B基本数组(元素群)运算
与矩阵加减运算等效,数组之一也可为标量。第三十六页,共一百一十九页,编辑于2023年,星期四2.数组乘()
运算AB
A,B两数组必须有相同的行和列,两数组相应元素相乘。
sA或As标量与数组相乘,标量s分别与数组A每个元素相乘,与sA或As相同。例16:>>A=[123;456;789];>>B=[246;135;7910];>>A.*Bans= 2818 41530 497290基本数组(元素群)运算(续)>>A=[123;456;789];>>B=[246;135;7910];>>A*Bans= 253746 5585109 85133172第三十七页,共一百一十九页,编辑于2023年,星期四3.数组除(/,\)运算C=A./B——数组右除 C(i,j)=A(i,j)/B(i,j)C=A.\B——数组左除 C(i,j)=B(i,j)/A(i,j)A./B=B.\AA./s=s.\A—A的元素分别被标量s除s./A=A.\s—标量s分别被A的元素除例:>>A=[123];>>B=[456];>>C1=A./BC1=0.25000.40000.5000>>C2=B.\AC2=0.25000.40000.5000>>C3=A.\BC3=4.00002.50002.0000基本数组(元素群)运算(续)>>A=[123];B=[456];>>A/Bans=0.4156>>A\Bans=0000001.33331.66672.0000第三十八页,共一百一十九页,编辑于2023年,星期四4.数组乘方(.^)A.^n——A的每个元素自乘n次A.^p——对A各元素分别求非整数幂p.^A——以p为底,分别以A的元素为指数求幂值C=A.^B——元素对元素的幂C(i,j)=A(i,j).^B(i,j)例:>>A=[123];B=[456];>>X=A.^2X=1.004.009.00>>Y=A.^0.5Y=1.00001.41421.7321
基本数组(元素群)运算(续)>>C=3.^BY=81.00243.00729.00
3^43^53^6>>Z=A.^BZ=1.0032.00729.001^42^53^6第三十九页,共一百一十九页,编辑于2023年,星期四5.数组转置(.’)例:>>A=[135;246]A=135246>>A'ans=123456>>A.'ans=123456基本数组(元素群)运算(续)结论:对于实数矩阵,矩阵转置和数组转置的计算结果是一致的。第四十页,共一百一十九页,编辑于2023年,星期四例:>>A=A*iA=0+1.0000i0+3.0000i0+5.0000i0+2.0000i0+4.0000i0+6.0000i>>A'ans=0-1.0000i0-2.0000i0-3.0000i0-4.0000i0-5.0000i0-6.0000i>>A.'ans=0+1.0000i0+2.0000i0+3.0000i0+4.0000i0+5.0000i0+6.0000i基本数组(元素群)运算(续)结论:对于复数矩阵,矩阵转置和数组转置的计算结果不一致。矩阵转置运算——共轭转置数组转置运算——非共轭转置第四十一页,共一百一十九页,编辑于2023年,星期四函数的主要类别三角函数指数运算函数复数运算函数圆整和求余函数函数在处理参数时,是按照数组运算的规则进行的基本数学函数
第四十二页,共一百一十九页,编辑于2023年,星期四三角函数基本数学函数(续)函数说明函数说明函数说明sin正弦函数tanh双曲正切函数csch双曲余割函数sinh双曲正弦函数atan反正切函数acsc反余割函数asin反正弦函数atan2四象限反正切函数acsch反双曲余割函数asinh反双曲正弦函数atanh反双曲正切函数cot余切函数cos余弦函数sec正割函数coth双曲余切函数cosh双曲余弦函数sech双曲正割函数acot反余切函数acos反余弦函数asec反正割函数acoth反双曲余切函数acosh反双曲余弦函数asech双曲反正割函数tan正切函数csc余割函数第四十三页,共一百一十九页,编辑于2023年,星期四指数运算函数基本数学函数(续)函数说明函数说明exp指数函数realpow实数幂运算函数log自然对数函数reallog实数自然对数函数log10常用对数函数realsqrt实数平方根函数log2以2为底的对数函数sqrt平方根函数pow22的幂函数nextpow2求大于输入参数的第一个2的幂第四十四页,共一百一十九页,编辑于2023年,星期四复数运算函数基本数学函数(续)函数说明函数说明abs求复数的模,若参数为实数则求绝对值real求复数的实部angle求复数的相角unwrap相位角按照360°线调整complex构造复数isreal判断输入的参数是否为实数conj求复数的共轭复数cplxpair复数阵成共轭对形式排列image求复数的虚部第四十五页,共一百一十九页,编辑于2023年,星期四圆整和求余函数基本数学函数(续)函数说明函数说明fix向0取整的函数mod求模函数floor向-∞取整的函数rem求余数ceil向+∞取整的函数sign符号函数round向最近的整数取整的函数第四十六页,共一百一十九页,编辑于2023年,星期四用于矩阵(数组)操作的常用函数矩阵(数组)操作函数
函数说明size获取矩阵的行、列数,对于多维数组,获取数组的各个维的尺寸length获取向量长度,若输入参数为矩阵或多维数组,则返回各个维尺寸的最大值ndims获取矩阵或多维数组的维数numel获取矩阵或数组的元素个数disp显示矩阵或者字符串内容cat合并不同的矩阵或数组reshape保持矩阵元素的个数不变,修改矩阵的行数和列数repmat复制矩阵元素并扩展矩阵fliplr交换矩阵左右对称位置上的元素flipud交换矩阵上下对称位置上的元素flipdim获取指定的方向翻转交换矩阵元素find获取矩阵或者数组中非零元素的索引第四十七页,共一百一十九页,编辑于2023年,星期四例18:reshape函数使用示例>>A=1:8A=12345678>>B=reshape(A,2,4)B=13572468>>C=reshape(A,3,3)???Errorusing==>reshapeToRESHAPEthenumberofelementsmustnotchange.矩阵(数组)操作函数(续)不能改变矩阵包含元素的个数将矩阵A改成2行4列,也可写成B=reshape(1:8,2,4)第四十八页,共一百一十九页,编辑于2023年,星期四例19:对称交换函数使用示例B=13572468>>fliplr(B)ans=
75318642>>flipud(B)ans=
24681357矩阵(数组)操作函数(续)flipdim函数的第二个参数必须是大于0的整数:参数为1时,效果和flipud函数一致参数为2时,效果和fliplr函数一致>>flipdim(B,1)ans=
24681357>>flipdim(B,2)ans=
75318642第四十九页,共一百一十九页,编辑于2023年,星期四例20:repmat使用示例>>A=pascal(2)A=1112>>repmat(A,2,3)ans=
111111
121212111111121212矩阵(数组)操作函数(续)repmat函数的基本语法为:repmat(A,M,N)作用是将指定的矩阵A复制M×N次,其中M对应的是行,N对应的是列。第五十页,共一百一十九页,编辑于2023年,星期四创建复杂矩阵使用MATLAB提供的矩阵扩展方法完成相应矩阵的构造假设矩阵A为三阶方阵,B为二阶方阵,由A和B组合构成五阶方阵C=[AO;O’B],其中O为相应的零矩阵矩阵(数组)操作函数(续)第五十一页,共一百一十九页,编辑于2023年,星期四例2-21:>>A=reshape(1:9,3,3);>>B=[12;34];>>O=zeros(length(A),length(B))O=000000>>C=[A
O;O'B]C=
147
00
258
00
369
00
00012
00034矩阵(数组)操作函数(续)>>E=[123;456]E=123456>>length(E)ans=3>>F=[123;456;789;427]F=123456789427>>length(F)ans=
4第五十二页,共一百一十九页,编辑于2023年,星期四提问:A=reshape(1:9,3,3);B=[12;34];C=
1200034000
00
147
00
258
00
369>>O=zeros(length(B),length(A))O=000000>>C=[BO;O'A]矩阵(数组)操作函数(续)>>O=zeros(length(A),length(B))O=000000>>C=[BO';OA]第五十三页,共一百一十九页,编辑于2023年,星期四创建复杂矩阵利用不同的矩阵运算,通过矩阵合并运算符“[]”将不同的矩阵组合在一起构成大矩阵>>A=[12;34];>>B=[A,A*2;tril(A),triu(A);A*3,A*4]B=12
24
34
68
10
12
34
04
3648
9121216矩阵(数组)操作函数(续)第五十四页,共一百一十九页,编辑于2023年,星期四稀疏矩阵矩阵的存储方式: 1.全元素(Full)存储——完全矩阵 2.稀疏(Sparse)存储——稀疏矩阵稀疏矩阵存在的必要性: 对大多数元素数值为0的矩阵,若采用满阵方式表示,则0元素将占用相当的存储空间。稀疏矩阵的特点: 只存储“非零元素”值(按列)和“非零元素”的位置
第五十五页,共一百一十九页,编辑于2023年,星期四对大多数元素数值为0的矩阵,创建稀疏矩阵稀疏矩阵建立指令sparse 1、B=sparse(A) 例23.>>A=[2000;0001;0400]A=200000010400>>B=sparse(A)B=(1,1)2(3,2)4(2,4)1一、稀疏矩阵的建立
>>C=[1234;5678;3729];C=123456783729>>B+Cans=3234567931129第五十六页,共一百一十九页,编辑于2023年,星期四2、S=sparse(ir,jc,data,m,n)“三元组”表示法ir—非零元素所在的行序号jc—非零元素所在的列序号data—非零元素的数值m—矩阵的行n—矩阵的列稀疏矩阵的建立(续)
向量标量第五十七页,共一百一十九页,编辑于2023年,星期四例24.1500220-15011
3000S=000-600000000
91000000028000>>data=[15
91
11
3
28
22
-6-15];>>ir=[1
5
2
2
6
1
31];>>jc=[1
1
2
3
3
4
46];>>S=sparse(ir,jc,data,6,6)S=(1,1)15(5,1)91(2,2)11(2,3)3(6,3)28(1,4)22(3,4)-6(1,6)-15稀疏矩阵的建立(续)
>>full(S)ans=1500220-150113000000-60000000091000000028000第五十八页,共一百一十九页,编辑于2023年,星期四例25>>S=sparse([132],[124],[241],3,4)S=(1,1)2(3,2)4(2,4)1>>full(S)ans=200000010400稀疏矩阵的建立(续)
第五十九页,共一百一十九页,编辑于2023年,星期四在MATLAB命令行窗口中键入指令helpsparfun,可以得到稀疏矩阵运算函数列表稀疏矩阵的建立(续)
创建稀疏矩阵speye创建单位稀疏矩阵sprand创建均匀分布的随机数稀疏矩阵sprandn创建正态分布的随机数稀疏矩阵满阵和稀疏矩阵之间的转换sparse创建稀疏矩阵或者将满阵转变为稀疏矩阵full将稀疏矩阵转变为满阵find获取非零元素的索引向量稀疏矩阵的操作函数nnz获取矩阵的非零元素的个数nonzeros获取矩阵的非零元素向量nzmax获取矩阵的各个向量的最大长度spones将稀疏矩阵中的非零元素用数字1替代issparse判断输入参数是否为稀疏矩阵稀疏矩阵的常用函数第六十页,共一百一十九页,编辑于2023年,星期四1、speye(创建单位稀疏矩阵)speye(m,n)——在行、列相同位置上的元素值为“1”,其余位置上的元素值为“0”speye(m)——是speye(m,m)的简写。在对角线上的元素值为“1”,其余位置上的元素值为“0”例26:>>A=speye(3,4)A=(1,1)1(2,2)1(3,3)1>>full(A)ans=100001000010稀疏矩阵的建立(续)
>>B=speye(3,3)B=(1,1)1(2,2)1(3,3)1>>full(B)ans=100010001>>C=speye(3)C=(1,1)1(2,2)1(3,3)1>>full(C)ans=100010001第六十一页,共一百一十九页,编辑于2023年,星期四2、find(获取矩阵非零元素的索引向量)——find(A)例27:>>S=sparse([132],[124],[241],3,4)S=(1,1)2(3,2)4(2,4)1>>find(S)ans=1611稀疏矩阵的建立(续)
>>full(S)ans=200000010400第六十二页,共一百一十九页,编辑于2023年,星期四3、nonzeros(获取矩阵的非零元素向量)——nonzeros(A)例27:>>S=sparse([132],[124],[241],3,4)S=(1,1)2(3,2)4(2,4)1>>nonzeros(S)ans=241稀疏矩阵的建立(续)
>>full(S)ans=200000010400第六十三页,共一百一十九页,编辑于2023年,星期四4、nnz(获取矩阵的非零元素的个数)——nnz(A)例28:>>S=sparse([132],[124],[241],3,4)S=(1,1)2(3,2)4(2,4)1>>nnz(S)ans=3稀疏矩阵的建立(续)
>>full(S)ans=200000010400第六十四页,共一百一十九页,编辑于2023年,星期四5、nzmax(获取矩阵的各个向量的最大长度)——nzmax(A)例29:>>S=sparse([132],[124],[241],3,4)S=(1,1)2(3,2)4(2,4)1>>nzmax(S)ans=3稀疏矩阵的建立(续)
>>full(S)ans=200000010400第六十五页,共一百一十九页,编辑于2023年,星期四6、spones(将稀疏矩阵中的非零元素用数字1代替)——spones(A)例30:>>S=sparse([132],[124],[241],3,4)S=(1,1)2(3,2)4(2,4)1>>A=spones(S)A=(1,1)1(3,2)1(2,4)1>>full(A)ans=100000010100稀疏矩阵的建立(续)
>>full(S)ans=200000010400第六十六页,共一百一十九页,编辑于2023年,星期四7、issparse(判断输入参数是否为稀疏矩阵)——issparse(A):是,则ans为“1”否,则ans为“0”例31:>>S=sparse([132],[124],[241],3,4)S=(1,1)2(3,2)4(2,4)1>>issparse(S)ans=1>>A=[123;456];>>issparse(A)ans=0稀疏矩阵的建立(续)
第六十七页,共一百一十九页,编辑于2023年,星期四稀疏矩阵和普通矩阵(满阵)之间可以直接进行运算,运算结果是满阵
例32:>>A=[2000;0001;0400];>>S=sparse(A)S=(1,1)2(3,2)4(2,4)1>>A+Sans=400000020800二、稀疏矩阵的运算
第六十八页,共一百一十九页,编辑于2023年,星期四稀疏矩阵和稀疏矩阵之间进行运算,运算结果是稀疏矩阵 例33>>B=[0030;1000;0500];>>T=sparse(B)T=(2,1)1(3,2)5(1,3)3>>S+Tans=(1,1)2(2,1)1(3,2)9(1,3)3(2,4)1稀疏矩阵的运算(续)
>>full(S+T)ans=203010010900>>A+Bans=203010010900第六十九页,共一百一十九页,编辑于2023年,星期四matlab语言把多项式表达成一个行向量,该向量中的元素是按多项式降幂排列的。f(x)=anxn+an-1xn-1+……+a0
可用行向量p=[anan-1……a1a0]表示poly——产生特征多项式系数向量特征多项式一定是n+1维的特征多项式第一个元素一定是1多项式运算第七十页,共一百一十九页,编辑于2023年,星期四例:a=[123;456;780];p=poly(a)p=1.00-6.00-72.00-27.00p是多项式p(x)=x3-6x2-72x-27的matlab描述方法,我们可用:p1=poly2str(p,‘x’)—函数文件,显示数学多项式的形式p1=x^3-6x^2-72x-27第七十一页,共一百一十九页,编辑于2023年,星期四2.roots——求多项式的根a=[123;456;780];p=poly(a)p=1.00-6.00-72.00-27.00r=roots(p)r=12.12-5.73——显然r是矩阵a的特征值-0.39第七十二页,共一百一十九页,编辑于2023年,星期四当然我们可用poly令其返回多项式形式p2=poly(r)p2=1.00-6.00-72.00-27.00matlab规定多项式系数向量用行向量表示,一组根用列向量表示。第七十三页,共一百一十九页,编辑于2023年,星期四3.conv,convs多项式乘运算例:a(x)=x2+2x+3;b(x)=4x2+5x+6;c=(x2+2x+3)(4x2+5x+6)a=[123];b=[456];c=conv(a,b)=conv([123],[456])c=4.0013.0028.0027.0018.00p=poly2str(c,'x')p=4x^4+13x^3+28x^2+27x+18第七十四页,共一百一十九页,编辑于2023年,星期四4.deconv多项式除运算a=[123];c=[4.0013.0028.0027.0018.00]d=deconv(c,a)d=4.005.006.00[d,r]=deconv(c,a)余数c除a后的整数第七十五页,共一百一十九页,编辑于2023年,星期四5.多项式微分matlab提供了polyder函数多项式的微分。命令格式:polyder(p):求p的微分polyder(a,b):求多项式a,b乘积的微分[p,q]=polyder(a,b):求多项式a,b商的微分例:a=[12345];poly2str(a,'x')ans=x^4+2x^3+3x^2+4x+5b=polyder(a)b=4664poly2str(b,'x')ans=4x^3+6x^2+6x+4第七十六页,共一百一十九页,编辑于2023年,星期四代数方程组求解matlab中有两种除运算左除和右除。对于方程ax+b,a为an×m矩阵,有三种情况:当n=m时,此方程成为“恰定”方程当n>m时,此方程成为“超定”方程当n<m时,此方程成为“欠定”方程matlab定义的除运算可以很方便地解上述三种方程第七十七页,共一百一十九页,编辑于2023年,星期四1.恰定方程组的解方程ax+b(a为非奇异)x=a-1
b矩阵逆两种解:x=inv(a)b—采用求逆运算解方程x=a\b—采用左除运算解方程第七十八页,共一百一十九页,编辑于2023年,星期四方程ax=ba=[12;23];b=[8;13];x=inv(a)*b
x=a\bx=x=2.002.003.003.00
=
ax=b例:x1+2x2=82x1+3x2=13第七十九页,共一百一十九页,编辑于2023年,星期四2.超定方程组的解方程ax=b,m<n时此时不存在唯一解。方程解(a'a)x=a'bx=(a'
a)-1a'b——求逆法x=a\b——matlab用最小二乘法找一个准确地基本解。
第八十页,共一百一十九页,编辑于2023年,星期四例:x1+2x2=12x1+3x2=23x1+4x2=3a=[12;23;34];b=[1;2;3];解1x=a\b解2x=inv(a'a)a'b
x=x=1.001.0000.00
=
ax=b第八十一页,共一百一十九页,编辑于2023年,星期四3.欠定方程组的解
当方程数少于未知量个数时,即不定情况,有无穷多个解存在。matlab可求出两个解:用除法求的解x是具有最多零元素的解是具有最小长度或范数的解,这个解是基于伪逆pinv求得的。第八十二页,共一百一十九页,编辑于2023年,星期四x1+2x2+3x3=12x1+3x2+4x3=2a=[123;234];b=[1;2];x=a\bx=pinv(a)bx=x=1.000.8300.330-0.17=ax=b第八十三页,共一百一十九页,编辑于2023年,星期四编程基础MATLAB的工作模式指令驱动模式通常MATLAB以指令驱动模式工作,即在MATLABM命令行窗口下用户输入单行指令时,MATLAB立即处理这条指令,并显示结果,这就是MATLAB命令行方式。命令行方式程序可读性差,而且不能存储,当处理复杂问题和大量数据时很不方便。M文件模式将MATLAB语句构成的程序存储成以m为扩展名的文件,然后再执行该程序文件,这种工作模式称为程序文件模式。程序文件不能在指令窗口下建立,因为指令窗口只允许一次执行一行上的一个或几个语句。第八十四页,共一百一十九页,编辑于2023年,星期四MATLAB通过M语言来实现完整的编写应用程序的能力M语言M语言是一种解释性语言,利用该语言编写的代码仅能被MATLAB接受,被MATLAB解释、执行。M语言文件可以分为脚本文件和函数文件一个M语言文件就是由若干MATLAB的命令组合在一起构成的。M语言文件是标准的纯文本格式的文件,其文件扩展名为.m。使用M文件可以将一组MATLAB命令组合起来,通过一个简单的指令就可以执行这些命令。第八十五页,共一百一十九页,编辑于2023年,星期四MATLAB提供了meditor编辑器编辑M文件在MATLAB命令行窗口中键入指令edit,则可启动meditor编辑器>>edit第八十六页,共一百一十九页,编辑于2023年,星期四通过“File”菜单中的“New”子菜单下的“M-file”命令来启动meditor编辑器直接单击 MATLAB用户界面工具栏上的新建按钮来启动meditor编辑器第八十七页,共一百一十九页,编辑于2023年,星期四
M文件有两类独立的M文件——脚本(Scripts)可调用M文件——函数(Functions)第八十八页,共一百一十九页,编辑于2023年,星期四M脚本文件包含MATLAB语言代码的文件称为M文件,其扩展名为.m。脚本文件就是由一系列的MATLAB指令和命令组成的纯文本格式的M文件。脚本文件没有输入参数,也没有输出参数。执行脚本文件时,文件中的指令或者命令按照出现在脚本文件中的顺序依次执行。第八十九页,共一百一十九页,编辑于2023年,星期四M脚本文件(续)脚本文件示例%注释行%M文件示例%“flowerpetal”%以下为代码行%计算theta=-pi:0.01:pi;rho(1,:)=2*sin(5*theta).^2;rho(2,:)=cos(10*theta).^3;rho(3,:)=sin(theta).^2;rho(4,:)=5*cos(3.5*theta).^3;fork=1:4%图形输出subplot(2,2,k)polar(theta,rho(k,:))enddisp('程序运行结束!')在脚本文件中,主要由注释行和代码行组成M文件的注释行需要使用%定义符注释定义符仅能影响一行代码M文件的代码行是一些简单的MATLAB指令或命令命令可以完成相应的计算处理数据、绘制图形结果的操作可以在脚本文件中调用其他的函数完成复杂的数学运算第九十页,共一百一十九页,编辑于2023年,星期四M脚本文件(续)在MATLAB命令行中运行该脚本文件:>>script_examp程序运行结束!MATLAB会出现相应的图形窗体第九十一页,共一百一十九页,编辑于2023年,星期四函数文件M语言函数文件能够接受用户的输入参数,进行计算,并将计算结果作为函数的返回值返回给调用者在MATLAB中具有不同类型的函数文件内建函数文件系统M函数文件系统MEX函数文件用户自定义MEX函数文件用户自定义的M函数文件第九十二页,共一百一十九页,编辑于2023年,星期四函数文件(续)MATLAB的内建函数文件MATLAB自定义的函数文件称内置函数文件。调用内置函数的方法: 使用函数名并给出相应的入口、出口参数即可。例如:sin.m函数 调用格式:y=sin(2*x)指令驱动模式例:>>x=0:2*pi/180:2*pi;>>y=sin(2*x);>>plot(x,y)M文件模式假设存储的文件名为nzhswj.m>>n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论