第二章MATLAB的数值计算功能——Matlab具有出色的数值计算能力,占据世界上数值计算软件的主导地位数值计算功能•矩阵运算•多项式运算•线性方程组•数值统计•线性插值•函数优化•微分方程的数值解主要内容2.5矩阵的运算2.5.1矩阵的数学运算2.5.2矩阵的点(数组)运算2.5.3矩阵的关系和逻辑运算2.1MATALB中的数值2.2变量及其赋值2.3矩阵的表示2.3.1矩阵的输入2.3.2向量的构造2.4矩阵的操作2.6矩阵函数2.6数据处理函数MATLAB既可用传统的十进制表示数值,也可以用科学计数法表示数值,用e代表10的指数形式,用i和j来代表虚数。1.数值的表示1e33+3j§2.1MATLAB中的数值3+3*j10001e-30.001MATLAB数据存储格式只有一种,是IEEE浮点标准的双精度格式(8个字节,64位),其MATLAB表示为double()MATLAB作运算和存储时都用双精度格式,这对绝大多数工程计算是足够的,许多情况下甚至过于“浪费”。运算精度为16位有效数字,数值范围为:10-308~103082.数据存储格式虽然它的数据存储格式只有一种,但MATLAB为了人机交互的友好性,数据输出显示格式可有10种,常用6种。在缺省的情况下,整数的显示格式为整数;而实数在屏幕显示时默认的小数点后4位;对于大于1000的实数,用5位有效数字的科学记数形式显示。3.数据显示格式271.82显示为271.82002718.2显示为2.7182e+003若要改变实数的显示格式,有两种方式可改变显示格式:(1)使用format命令:format―格式”可直接在命令窗口中键入对以上各个数字显示格式,如formatlong(2)使用file菜单NumericformatNumericdisplayFile-Preference-Commandwindow-Textdisplay-3.数据显示格式MATLAB命令含义范例formatshort(默认4位有效小数位数短格式3.1416formatshorte5位科学记数表示短格式科学计数法3.1416e+000formatlong小数点后15位数字表示长格式3.141592653589793formatlonge小数点后15位科学记数表示长格式科学计数法3.141592653589793e+000formatrat分数近似近似有理数表示355/113formatbank两位小数银行格式,元角分表示3.14使用format命令能将计算结果以不同的精确度的数字格式显示,如下表的圆周率π值:MATLAB命令含义范例formathex十六进制表示40921fb54442d18format+显示大矩阵用;正数、负数,零分别用+、-、空格表示+注意1:format只是影响结果的显示,不影响其计算与存储;MATLAB总是以双精度(double,8字节)来执行所有的运算。注意2:当调试程序时,产生的数值变化量很小或者数值变化范围很大的情况下,采用formatlonge选项尤为重要。要恢复系统默认设置,可输入:formatshort说明:§2.2MTLAB中的变量在MATLAB的命令窗口可以直接输入变量名并且立即赋值。变量不需要事先声明它的类型和维数,每个变量的类型根据所赋的值来确定。MATLAB会自动为一个新变量开辟存储空间,并随变量的内容变化而变化。例如对于变量:num_students=25MATLAB将创建一个1×1的矩阵变量存储单元,变量名称为num_students,存储的数值为25。1.变量的赋值MATLAB变量的命名遵守如下规则:(1)变量名由字母、数字和下划线组成,变量名中不允许使用标点符号和空格,而且第一个字符必须为字母。(2)变量名中的英文字母大小写是有区别的(如A1B,a1b,A1b,a1B是四个不同的变量)。(3)变量名的长度上限为31个字符。例如:6x、y’r、0p为非法变量ui_y、y9oi、yu都是合法变量2.变量的命名3.变量的类型MATLAB的基本操作为矩阵运算,并且支持复数,同时也支持字符,MATLAB的基本变量为复数矩阵和字符矩阵。向量是一维的矩阵(亦可称为数组),向量又有行向量和列向量之分;通常所说的字符串在MATLAB中就是字符行向量。标量(一个实数或复数)为一1×1的矩阵;而一个字符则是1×1的字符矩阵。4.系统变量在Matlab工作内存中,驻留了几个由系统本身在启动时定义的变量(用户不能清除),称为系统变量或固有变量,即有特殊含义的内部常数:ans—用于结果的缺省变量名pi—圆周率的近似值3.1415926i,j—虚数单位,或1i,1jinf或Inf—表示正无穷大,如1/0等NaN—非数,它用来表示0×,0/0,/,-等运算的结果。inf和NaN非数变量的设置,是为了避免可能因0×,0/0,/等运算而造成程序执行的中断。在测量数据处理中,可以用来标识“野点(非正常点)”4.系统变量eps—系统的浮点数精度,其定义是1.0到下一个比1.0大的双精度数之间的距离,也是系统运算时所确定的极小值在pc机上=2^(-52)或2.2204e-16realmax-系统所能表示的最大正实数:1.797693134862316e+308realmin-系统所能表示的最小正实数:2.225073858507201e-3085.变量查询和清除函数在workshop工作空间窗口中,存储着输入的变量和创建的所有变量值,它们可以在任何需要的时候被调用。如要察看变量a的值,只需要在命令窗口中输入变量的名称即可:awho:显示当前工作空间中所有变量的一个简单列表whos:列出变量的值、维数、字节数、数据类型等详细信息clear(all):清除工作空间中所有的变量clear变量名:清除指定的变量5.变量查询和清除函数(变量操作)6.变量的文件保存与获取•MATLAB在每次启动时,工作空间中没有用户定义的变量。一旦关闭MATLAB,工作空间所有的变量就会自动清除。•如果一组数据是经过长时间的复杂计算后获得的,那么为避免再次重复计算,常使用save加以保存。•此后,每当需要,都可通过load重新获取这组数据。这种处理模式常在实际中被采用。(1)save文件名——如:savedata将工作空间中所有的变量存到data.mat文件中。(2)save文件名变量名——如:savedataab将工作空间中a和b变量存到data.mat(二进制)文件中,不同的变量之间只能用空格来分隔。(3)savedataab-ascii——将工作空间中a和b变量存到data文件中,-ascii(或-ASCII)选项使数据以ASCII格式处理。生成的(不带扩展名的)ASCII文件可以在任何“文字处理器”中被修改。如果数据较多的变量需要进行修改,那么ASCII格式的数据文件很适用。save:变量保存指令loaddataloaddataab即可恢复保存过的所有变量load:恢复保存过的变量•将以前用save命令保存的变量从磁盘文件data中调入MATLAB工作空间。•用load命令调入的变量,其名称为用save命令保存时的名称,取值也一样。•变量列表中,各个不同的变量之间只能用空格来分隔。•未列出变量时,表示将data文件中的所有变量都调入工作空间。(1)变量保存x=5;y=15;savedata1xy%data1.mat的内容为变量x=5,y=15save和load指令举例loaddata1%将data1文件中存储的变量调入内存x,y%显示x,y的内容(2)从data1.mat向内存装载变量clear%假如重新启动程序或使用clear命令§2.3矩阵的表示矩阵的输入和创建向量的构造例1:实数矩阵A、B2.3.1矩阵的输入与创建输入矩阵最方便的的方式是直接输入矩阵的元素。1)用中括号[]把所有矩阵元素括起来;2)同一行的不同数据元素之间用空格或逗号间隔;3)用分号(;)指定一行结束;4)也可以分成几行进行输入,用回车符代替分号5)矩阵元素可以是任何matlab表达式(系统将自动计算结果),可以是实数,也可以是复数,复数可用特殊函数i,j输入1.矩阵元素的输入A=[1234;5678;9101112;13141516]A=12345678910111213141516例1:矩阵元素的输入B=[1,sqrt(25),9,132,6,10,7*23+sin(pi),7,11,154,abs(-8),12,16]B=15913261014371115481216例2.利用表达式输入矩阵例3:复数矩阵的生成12233x=435670.5839iiiiii方法一:x=[1+2i2-3i3;4-3i56+i;7+0.5i8+3i9]方法二:a=[123;456;789];b=[2-30;-301;0.530];x=a+b*i或x=complex(a,b)2.利用函数产生特殊的矩阵zeros(m,n)~m×n全0阵ones(m,n)~m×n全1阵rand(m,n)~m×n(0,1)区间均匀分布随机阵matlab函数名必须小写eye(m,n)~m×n对角线1矩阵randint(m,n):m×n0,1等概随机整数矩阵randn(m,n)~m×n均值为0,方差为=1的高斯分布(正态分布)随机阵2randperm(n):returnsarandompermutationoftheintegers1:n.---MATLAB内部函数ans=1001data_in=randint(1,10)%产生1×10的0,1随机阵data_in=1111001101%产生长度为2的全1行矩阵ones(1,2)ans=11eye(2,2)%产生2×2的单位阵x=0.6+sqrt(0.1)*randn(1,3)x=-0.4326-1.66560.1253t=-1:0.001:1;f=1x=sin(2*pi*f*t);y1=x+sqrt(0.2)*randn(size(t));y2=x+sqrt(5)*randn(size(t));信号加噪方法:%产生均值为0.6,方差为0.1的高斯分布随机矩阵x=randn(1,3)%产生均值为0,方差为1的1×3的高斯分布随机阵-1-0.8-0.6-0.4-0.200.20.40.60.81-101-1-0.8-0.6-0.4-0.200.20.40.60.81-505-1-0.8-0.6-0.4-0.200.20.40.60.81-10010t=-1:0.001:1;f=1x=sin(2*pi*f*t);y1=x+sqrt(0.2)*randn(size(t));y2=x+sqrt(5)*randn(size(t));subplot(311)plot(t,x)gridsubplot(312)plot(x,y1)gridsubplot(313)plot(x,y2)gridD=magic(3)ans=816357492magic产生魔方矩阵[AB][A;B]3.矩阵的扩充z=[0x1]利用原有矩阵构成新矩阵%由矩阵x的数据元素再加上两个元素组成z=000.50001.00001.50002.00001.0000x=[00.511.52]列上补矩阵用“逗号”或“空格”行上补矩阵用“分号”y=zeros(2,2),z=8*ones(2,2)u=[y;z]u=00008888ans=100100100010010010001001001D=100010001D=eye(3)repmat(D,1,3)%在水平方向“铺放”三个D阵%已知(3×3)单位阵2.3.2向量的构造向量的构造和矩阵的构造类似,如果数据元素之间均用空格(或逗号)隔开,该向量称为行向量;如果数据元素之间均用分号隔开,该向量称为列向量。1.直接