Matlab learning 3 (1).ppt
Matlab软件与基础数学实验,西安交通大学理学院 易 媛,数据类型, ,常数和变量 数组和矩阵 字符串和多维数组 结构和单元数组,1.1、内部常数,例: 计算有理数, 2000/21ans = 95.2381,例: 计算表达式的值,并显示计算结果。 在MATLAB命令窗口输入命令: x=1+2i; y=3-sqrt(17); z=(cos(abs(x+y))-sin(78*pi/180))/(x+abs(y)) 其中pi和i都是MATLAB预先定义的变量,分别代表代表圆周率π和虚数单位。 输出结果是: z = -0.3488 + 0.3286i,1.2、变量,变量=表达式;通过等于符号将表达式的值赋予变量。当键入回车键时,该语句被执行。语句执行之后,窗口自动显示出语句执行的结果。如果希望结果不被显示,则只要在语句之后加上一个分号(;)即可。此时尽管结果没有显示,但它依然被赋值并在MATLAB工作空间中分配了内存。,变量命名规则变量名的第一个字符必须是一个英文字母,最多可包括31个字符;x1, x2, x3,alpha, · · · · · · · · · 变量名可由英文字母、数字和下划线混合组成;变量名不得包含空格和标点,但可以有下连字符变量名和函数名对字母的大小写敏感; X,x, Z, z 是不同变量,创建变量 在命令窗口中直接输入变量名称创建 A=9 A=9 isvarname 8th_column //确认变量名的合法性 ans=0,在MATLAB工作空间中,还驻留几个由系统本身定义的变量。例如,用pi表示圆周率π的近似值,用i,j表示虚数单位。预定义变量有特定的含义,在使用时,应尽量避免对这些变量重新赋值。,预定义变量,1.3、数据类型,MATLAB用format命令来控制输出格式,,计算机浮点数记法,5.11×108 5.11e+8 0.0000015=1.5×10-6 1.5e-6, 24560000= 2.456×107 2.456e+7,2.1、数组,只需要用空格或逗号间隔数组元素,再用方括号括起来。如:X=[0 2 3 6 7 8],创建数组向量的三种常用方法: 1.增量法(利用冒号生成向量) x = i : j 如果 ik, 生成以i为初值, k为终值,-j为步长的有限等差数列;,如:A=10:15A=10 11 12 13 14 15,2. 利用linspace(a,b)生成等差向量,x= linspace(2,8)将生成100个数,以2开始,以8结束。 y=linspace(2,8,10)将生成10个数,以2开始,以8结束。 3. 利用logspace(a,b)生成等比向量,例: 用dot()、cross()进行向量点积运算 a=1:4;b=3:6;c=dot(a,b) c=50 a=1:3;b=2:4;cross(a,b) ans = -1 2 -1,2.2、矩阵,2.2.1 创建矩阵的常用方法:,1.直接输入法; 2.函数法; 3.矩阵编辑器;4.数据文件法 直接输入法三条规则: 矩阵元素必须在方括号[ ]之内; 同一行相邻元素间用逗号或空格分隔; 矩阵的行与行之间必须用分号分隔. 例: 三阶Hilbert矩阵A=[1 1/2 1/3;1/2 1/3 1/4; 1/3 1/4 1/5],A =1.0000 0.5000 0.33330.5000 0.3333 0.25000.3333 0.2500 0.2000,函数法构造特殊矩阵,C=[ ] — 产生空阵 r =rand ——产生0~1间均匀分布的随机矩阵 randn —— 产生均值为0,方差为1的标准正态分布随机矩阵 R=rand(3,4)——产生3×4阶随机矩阵 E=eye(3) —— 产生3阶单位矩阵 B=zeros(3,4) ——产生3×4阶全“0”矩阵 D=ones(3,4) ——产生3×4阶全“1”的矩阵 X=magic(3)——产生3阶幻方 Y=vander(4)——产生4阶范德蒙矩阵,》eye(2,3) ans=1 0 0 0 1 0 》zeros(2,3) ans=0 0 00 0 0 》ones(2,3) ans=1 1 11 1 1 》V=[5 7 2]; A=diag(V) A=5 0 00 7 00 0 2,》eye(2) ans=1 0 0 1 》zeros(2) ans=0 0 0 0 》ones(2) ans=1 11 1,如果已知A为方阵,则V=diag(A)可以提取A的对角元素构成向量V。,1、转置:对于实矩阵用(’)符号或(.’)求转置结果是一样的;然而对于含复数的矩阵,则(’)将同时对复数进行共轭处理,而 (.’)则只是将其排列形式进行转置。,》a=[1 2 3;4 5 6] a =1 42 53 6,》a=[1 2 3;4 5 6]. a =1 42 53 6,》b=[1+2i 2-7i] b =1.0000 - 2.0000i2.0000 + 7.0000i 》b=[1+2i 2-7i]. b =1.0000 + 2.0000i2.0000 - 7.0000i,矩阵的运算,1.矩阵元素 通过下标引用矩阵的元素,例如 A(3,2)=200 采用矩阵元素的序号来引用矩阵元素。 矩阵元素的序号就是相应元素在内存中的排列顺序。 在MATLAB中,矩阵元素按列存储,先第一列,再第二列,依次类推。 例如 A=[1,2,3;4,5,6]; A(3) ans = 2 显然,序号(Index)与下标(Subscript )是一一对应的, 以m×n矩阵A为例,矩阵元素A(i,j)的序号为(j-1)*m+i。 其相互转换关系也可利用sub2ind和ind2sub函数求得。,矩阵拆分 (1) 利用冒号表达式获得子矩阵 ① A(:,j)表示取A矩阵的第j列全部元素; A(i,:)表示A矩阵第i行的全部元素; A(i,j)表示取A矩阵第i行、第j列的元素。 ② 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表示某一维的末尾元素下标。,(2) 利用空矩阵删除矩阵的元素 在MATLAB中,定义[]为空矩阵。给变量X赋空矩阵的语句为X=[]。注意,X=[]与clear X不同,clear是将X从工作空间中删除,而空矩阵则存在于工作空间中,只是维数为0。,2、四则运算与幂运算,+ ;- ;* ;\和/ ;^;.* ;.\ ;./;.^ 如:a=[1 2;3 4];b=[ 3 5; 5 9] 》c=a+b d=a-b 》c= d=4 7 -2 -38 13 -2 -5 》a*b=[13 23; 29 51] 》a/b=[-0.50 0.50;3.50 –1.50] 》a\b=[-1 -1;2 3] 》a^3=[37 54; 81 118] 》a.*b=[3 10;15 36] 》a./b=[0.33 0.40;0.60 0.44] 》a.\b=[3.00 2.50;1.67 2.25] 》a.^3= [1 8; 27 64],只有维数相同的矩阵才能进行加减运算。 注意只有当两个矩阵中前一个矩阵的列数和后一个矩阵的行数相同时,才可以进行乘法运算。a\b运算等效于求a*x=b的解;而a/b等效于求x*b=a的解。只有方阵才可以求幂。 点运算是两个维数相同矩阵对应元素之间的运算,在有的教材中也定义为数组运算。,求逆:inv(A); 求行列式:det(A) 要求矩阵必须为方阵,3、逆矩阵与行列式计算,》a=[1 2 3; 4 5 6; 2 3 5]; 》b=inv(a) b =-2.3333 0.3333 1.00002.6667 0.3333 -2.0000-0.6667 -0.3333 1.0000 》det(a) ans =-3,在MATLAB中exp、sqrt等命令也可以作用到矩阵上,但这种运算是定义在矩阵的单个元素上的,即分别对矩阵的每一个元素进行计算。超越数学函数可以在函数后加上m而成为矩阵的超越函数,例如:expm,sqrtm。矩阵的超越函数要求运算矩阵为方阵。,4、了解矩阵超越函数,聚合矩阵,通过连接一个或多个矩阵来形成新的矩阵 C=[A B]//水平方向上聚合 C=[A;B]//垂直方向上聚合,例 A=ones(2,5)*6;B=rand(3,5);C=[A;B]C=6.0000 6.0000 6.0000 6.0000 6.00006.0000 6.0000 6.0000 6.0000 6.00000.6154 0.7382 0.9355 0.8936 0.81320.7919 0.1763 0.9169 0.0579 0.00990.9218 0.4057 0.4103 0.3529 0.1389,聚合具有相同高度的矩阵,聚合具有不同高度的矩阵,获取矩阵的元素,A(row,column),A=[2 6 9;4 2 8;3 5 1] A= 2 6 94 2 83 5 1 A(3,2) ans= 5 A(6) //等同A(3,2) ans= 5 Sum(A(1:3,3)) //求第三列元素之和,矩阵的子矩阵可以通过向量、标量或冒号的标识来引用和赋值 1.子矩阵的序号向量标识: A(u, v) A=magic(3); B1=A(1,:), B12=A(1:2,:), B13=A([1,3],[1,3])B1 = 8 1 6B12 = 8 1 63 5 7B13 = 8 64 2,3.1、字符串,创建字符串-使用单引号创建,Country=‘China’; name=[‘Li Yi’;’Hu Xu’]//创建二维字符串数组 name=Li YiHu Xu name=[‘Liu Ying’;’Hu Xu ’]//字符串长度要相同 name=char(‘Liu Ying’,’Hu Xu’)//使用char函数创建,Str2double函数将字符串单元数组转换为双精度值,c={’37.294e-1’;’-58.375’;’13.796’}; d=str2double(c) d=3.7294-58.375013.7960,Int2str:整型转换为字符串型 num2str:实数转换为字符串型 mat2str:矩阵转换为字符串型,比较字符串,str1=‘hello’; str2=‘help’; strcmp(str1,str2) C=0 //false str1==str2 ans=1 1 1 0 0 //确定两个字符串中的相同字符,strncmp: 可选择字符串的前n+1个字符进行比较,聚合字符串,num_chars=28; s=[‘There are ‘int2str(num_chars)’characters here’]; s=sprintf(‘There are %d characters here\n’,num_chars);,country=‘China’; province=‘SiChuan’; strcat(country,’,’,province) ans=China,SiChuan,例: 分别建立3×3、3×2和与矩阵A同样大小的零矩阵。 (1) 建立一个3×3零矩阵。 zeros(3) (2) 建立一个3×2零矩阵。 zeros(3,2) (3) 设A为2×3矩阵,则可以用zeros(size(A))建立一个与矩阵A同样大小零矩阵。 A=[1 2 3;4 5 6]; %产生一个2×3阶矩阵A zeros(size(A)) %产生一个与矩阵A同样大小的零矩阵,例: 建立随机矩阵: (1) 在区间[20,50]内均匀分布的5阶随机矩阵。 (2) 均值为0.6、方差为0.1的5阶正态分布随机矩阵。 命令如下: x=20+(50-20)*rand(5) y=0.6+sqrt(0.1)*randn(5) 此外,常用的函数还有reshape(A,m,n),它在矩阵总元素保持不变的前提下,将矩阵A重新排成m×n的二维矩阵。,例: 将101~125等25个数填入一个5行5列的表格中,使其每行每列及对角线的和均为565。 M=100+magic(5),范得蒙矩阵 范得蒙(Vandermonde)矩阵最后一列全为1,倒数第二列为一个指定的向量,其他各列是其后列与倒数第二列的点乘积。可以用一个指定向量生成一个范得蒙矩阵。在MATLAB中,函数vander(V)生成以向量V为基础向量的范得蒙矩阵。例如,A=vander([1;2;3;5])即可得到上述范得蒙矩阵。,伴随矩阵 MATLAB生成伴随矩阵的函数是compan(p),其中p是一个多项式的系数向量,高次幂系数排在前,低次幂排在后。例如,为了求多项式的x3-7x+6的伴随矩阵,可使用命令: p=[1,0,-7,6]; compan(p),帕斯卡矩阵 二次项(x+y)n展开后的系数随n的增大组成一个三角形表,称为杨辉三角形。由杨辉三角形表组成的矩阵称为帕斯卡(Pascal)矩阵。函数pascal(n)生成一个n阶帕斯卡矩阵。,例: 求(x+y)5的展开式。,在MATLAB命令窗口,输入命令:pascal(6)矩阵次对角线上的元素1,5,10,10,5,1即为展开式 的系数。,(1) 提取矩阵的对角线元素 设A为m×n矩阵,diag(A)函数用于提取矩阵A主对角线元素,产生一个具有min(m,n)个元素的列向量。diag(A)函数还有一种形式diag(A,k),其功能是提取第k条对角线的元素。,(2) 构造对角矩阵 设V为具有m个元素的向量,diag(V)将产生一个 m×m对角矩阵,其主对角线元素即为向量V的 元素。diag(V)函数也有另一种形式diag(V,k), 其功能是产生一个n×n(n=m+)对角阵,其第k条 对角线的元素即为向量V的元素。,A=[17,0,1,0,15;23,5,7,14,16;4,0,13,0,22;10,12,19,21,3;.11,18,25,2,19]; D=diag(1:5); D*A %用D左乘A,对A的每行乘以一个指定常数,例: 建立5×5矩阵A,然后将A的第一行元素乘以1, 第二行乘以2,…,第五行乘以5。,(3) 上三角矩阵求矩阵A的上三角阵的MATLAB函数是triu(A)。 triu(A)函数也有另一种形式triu(A,k),其功能是求矩阵A的第k条对角线以上的元素。例如,提取矩阵A的第2条对角线以上的元素,形成新的矩阵B。,(4) 下三角矩阵 在MATLAB中,提取矩阵A的下三角矩阵的函数是tril(A)和tril(A,k),其用法与提取上三角矩阵的函数triu(A)和triu(A,k)完全相同。,