matlab
更新时间:2024-03-29 16:45:01 阅读量: 综合文库 文档下载
1
MATLAB软件简介
1984年,MathWorks公司把内核采用C语言编写的MATLAB正式推向市场,MATLAB的名称由Matrix(矩阵)和 Laboratory(实验室)两词的前三个字母组合而成。MATLAB集数值分析、矩阵运算、符号运算及图形处理等强大功能于一体,且包含一系列规模庞大、覆盖不同领域的工具箱(Toolbox),再加上它简单易学、实用方便,从问世之初,就深受广大科技工作者的欢迎,现已成为许多学科领域中计算机辅助设计与分析、算法研究和应用开发的基本工具和首选平台。
在发达国家的理工科院校,MATLAB已经成为一门必修课程,国内的许多高校也陆续开设有关MATLAB的课程。我们在这里简单介绍一下MATLAB的一些基本功能,为学生深入学习MATLAB奠定基础,并最终希望学生能从繁重的编程劳动中脱离出来,把主要精力放在建立数学模型的环节上。
10.1 基本操作
MATLAB软件安装好之后,双击系统桌面的MATLAB图标,或在开始菜单的程序选项中选择MATLAB快捷方式,即开始启动MATLAB。初次启动MATLAB后,将进入MATLAB默认设置的桌面平台。桌面平台包括主窗口、命令窗口、历史窗口、当前目录窗口和工作间管理窗口等窗口,我们这里主要介绍命令窗口和主窗口的一些较为简单的功能。
MATLAB命令窗口如图10.1所示,其中“>>”为运算提示符,表示MATLAB正处在准备状态,等待操作者在此提示符右侧输入运算命令。
1
2
图10.1
假如我们想计算[(1?2)?3?4)]?23,只需在提示符“>>”后输入“((1+2)*3-4)/2^3”,然后按Enter键(为书写方便,本章中的所有命令语句均用提示符“>>”开头,之后的按Enter键的动作用“?”来表示),命令窗口马上就会出现算式的结果0.625(如图10.2),并出现新的提示符等待新的运算命令的输入。
图10.2
该命令行涉及加、减、乘、除及幂次运算符,MATLAB运算的执行次序遵循的优先规则为:从左到右执行;幂运算具有最高的优先级,乘法和除法具有相同的次优先级,加法和减法有相同的最低优先级;使用括号可以改变前述优先次序,并由最内层括号向外执行。
由于此例中没有指定计算结果赋值给哪个变量,MATLAB用“ans”来临时存储计算结果。“ans”是MATLAB用于存储结果的缺省变量名,属于特殊变量。常用的特殊变量如表10.1所示。
特殊变量 取值 2
特殊变量 取值 3 ans pi NaN 用于结果的缺省变量名 i,j 圆周率 不定值,如00 eps Inf 虚数单位-1 浮点运算的相对精度 无穷大,如10 Realmin 最小的正实数 Realmax 最大的正实数 表10.1
与其它程序设计语言不同,MATLAB并不要求对所要使用的变量进行事先声明,也不需要指定变量的类型,它会根据所赋予变量的值或对变量所进行的操作来确定变量的类型。若在赋值过程中变量已经存在,MATLAB将用新值来代替旧值,并以新的变量类型来代替旧的变量类型。
例如我们把前面的计算结果赋值给变量x,利用此变量产生构造一个新变量y,然后将变量x赋新值,执行命令和结果如下所示: >> x=((1+2)*3-4)/2^3? x =
0.6250
>> y=3*x+5 %y?3?x?1? y =
6.8750 >> x=3? x = 3
上述给y赋值的语句后有一百分号“%”,“%”后的所有文字为本命令的注释语句,并不影响该命令的执行,只是为阅读本命令行提供方便。
3
4
MATLAB可以把多条命令放在同一行,各命令之间用逗号“,”或分号“;”隔开,逗号告诉MATLAB系统显示本命令的结果,分号告诉系统取消结果的显示(只是不显示,该命令行仍正常执行)。
>> r=1;l=2*pi*r,s=pi*r^2 % 显示半径为1的圆的周长l和面积s ? l = 6.2832 s = 3.1416
此时若想显示半径的值,再输入半径的变量名,回车即可。 >> r? r = 1
若命令非常长,一行显示不下,可以通过“...”连接两行的语句。 >> r=1;s=pi... *r^2? s = 3.1416
MATLAB对变量的命名必须遵守其命名规则:(1)变量名区分大小写(2)变量名长度最多不超过31个字符,若超过,第31个字符后的字符将会被忽略(3)变量名必须以字母开头,之后可以是任意字母、数字或下划线,但不能使用标点。
如果忘记你所命名的变量名,可以使用who命令来查询。若想知道变量的
4
5
类型,需要使用whos命令来查询。但这两个命令并不给出所有变量的值,它们只是给出变量名或变量类型等信息。若希望得到变量的值,必须输入该变量的变量名,回车查询。
>> who?
Your variables are:
ans l r s x y >> whos?
Name Size Bytes Class ans 1x1 8 double array l 1x1 8 double array r 1x1 8 double array s 1x1 8 double array x 1x1 8 double array y 1x1 8 double array Grand total is 6 elements using 48 bytes >> s? s = 3.1416
若想清除MATLAB当前工作空间中所有定义过的变量,使用clear命令;若只想清除其中某几个变量,只需在命令clear后写入变量的名称即可,如想清除变量x、y,在“>>”后键入“clear x y”即可。
在MATLAB命令窗口中,可以使用光标键“↑”、“↓”来调用前面已经输入过
5
6
的命令。按一次“↑”在提示符“>>”后调出上一次的命令,之后再按“?”,则再执行前一次的命令。重复按“↑”则向前连续滚动以前的命令,重复按 “↓”则向后连续滚动以前的命令。
MATLAB有非常完善的在线帮助系统,使用者可以方便地查询到需要的各种信息,理解、掌握和熟练运用此帮助系统在学习MATLAB的过程中是非常重要的。最简单的方法是按下MATLAB主窗口中的按钮或使用主窗口中的Help下拉菜单,进入MATLAB的帮助窗口,在其中查询需要的信息。更为快速的方法是在MATLAB命令窗口使用help命令寻求帮助。例如,你想知道天花板函数函数ceil的用法,在help后加上此函数的名称按回车即可。
>> help ceil?
CEIL Round towards plus infinity.
CEIL(X) rounds the elements of X to the nearest integers towards infinity.
See also FLOOR, ROUND, FIX.
这里给出了ceil函数的含义及具体用法,它是一个正无穷大方向的舍入函数。
>> ceil(4.12) ? ans = 5
看懂这些帮助的内容并不需要非常高的英文水平,初学者的主要困难主要是其中有许多不认识的数学术语,这时可以拿本MATLAB参考手册与其对照,了解所涉及到的数学术语的汉语表示。多次使用help命令查询不同的函数或命令之后,就可以基本掌握常用的英文数学词汇,之后使用help命令就比较
6
7
方便了。
若想了解不知道确切名称的函数的用法,仅使用help命令是无法满足需要的,因为使用此命令必须知道函数名称的完整拼写。此时,可以首先使用lookfor命令来查询根据用户提供的关键字搜索到的相关函数,然后再使用help命令与其配合使用,了解查询到的确切函数的具体用法。
常用的数学函数如表10.2所示。 函数 sin(x) cos(x) tan(x) abs(x) real(x)) angle(x) exp(x) log(x) log10(x) round(x) floor(x) rat(x) rem(x,y) 功能 正弦函数 余弦函数 正切函数 绝对值或复数的模 复数的实部 复数的相角 e的指数函数 自然对数函数 以10为底的对数函数 四舍五入函数 沿负无穷大方向舍入 函数 asin(x) acos(x) atan(x) sqrt(x) imag(x) conj(x) pow2(x) log2(x) sign(x) fix(x) ceil(x) 功能 反正弦函数 反余弦函数 反正切函数 开平方 复数的虚部 复数的共轭 2的指数函数 以2为底的对数函数 符号函数 沿原点方向舍入 沿正无穷大方向舍入 将实数x化为分数 将实数x展开为多项分数 rats(x) x除以y的余数 mod(x,y) 求模数(带符号的余数) gcd(x,y) 整数x、y的最大公因子 lcm(x,y) 整数x、y的最小公倍数 表10.2
7
8
10.2 向量、矩阵及其运算
MATLAB之所以成名,是由于它具备了比其它软件更全面、更强大的矩阵运算功能,因此掌握其矩阵运算功能成为学习MATLAB最基本的要求。MATLAB所有的数值功能都是以矩阵为基本单元进行的,所有的标量(整数、实数和复数)可以看作是1×1矩阵,行向量和列向量可分别看作为1×n和n×1矩阵。
我们先对向量的运算作一简单介绍。要对向量进行运算,首先要生成向量,生成向量最直接的方法就是在命令窗口中直接输入各分量。所有的分量用空格、逗号或分号分隔,按次序写在中括号“[ ]”中,用空格和逗号分隔生成生成行向量,用分号分隔生成列向量。
>> x=[1 2],y=[3,4],z=[5;6] ? %生成两个行向量,一个列向量。 x =
1 2 y =
3 4 z = 5 6
生成行向量还可以使用冒号表达式或linspace函数。冒号表达式的格式为n:s:m,它产生从实数n开始,步长为s,直到实数m的系列值的行向量。若
8
9
s缺省,n:m同n:1:m等价,表示步长为1的行向量。表达式中的n作为行向量的第一个分量,而m的作用只是控制向量的最后一个分量,并不一定是最后一个分量。
>> a=2:5? %生成从2开始,步长为1的行向量,最后一个分量不超过5。
a =
2 3 4 5
>> b=1:2:12? %生成从1开始,步长为2的行向量,最后一个分量不超过12。
b =
1 3 5 7 9 11
>>c=0.5:-0.2:-0.6?%生成从0.5开始,步长为-0.2的行向量,最后一个分量不超过-0.6。
c =
0.5000 0.3000 0.1000 -0.1000 -0.3000 -0.5000 linspace函数的格式有两种:linspace(x1,x2)和linspace(x1,x2,n),前者生成以x1为首分量,x2为末分量的100维线性等分行向量,后者生成以x1为首分量,x2为末分量的n维线性等分行向量。
>> d=linspace(3.2,5,7) ? %生成3.2为首分量,5为末分量的7维线性等分行向量。
d =
3.2000 3.5000 3.8000 4.1000 4.4000 4.7000
9
10
5.0000
生成列向量可以使用转置算子“’”将利用冒号表达式或linspace函数生成的行向量转变为列向量。
>> e=linspace(1,3,3);f=e'? %生成列向量f。 f = 1 2 3
向量与标量之间的加减乘除等简单数学运算就是对向量的每个分量施加运算。
>> g=1:7;g1=g+1,g2=g*2-1,g3=sin(g) ? g1 =
2 3 4 5 6 7 8 g2 =
1 3 5 7 9 11 13 g3 =
0.8415 0.9093 0.1411 -0.7568 -0.9589 -0.2794 0.6570
向量与标量之间的幂次运算要使用算子“.^”,它仍然是对各个分量施加运算,直接使用算子“^”将出错。 >> g4=g.^2,g5=2.^g? g4 =
10
11
1 4 9 16 25 36 49 g5 =
2 4 8 16 32 64 128
若只想对向量中的单个分量或某几个分量进行操作,可以通过向量的名称及分量所在位置进行访问。
>> h=1:7;h1=h(2),h2=h(3:5)/2? %将h的第二个分量赋值给h1,将第三、四、五个分量各自除以2之后生成新3维行向量h2。 h1 = 2 h2 =
1.5000 2.0000 2.5000
格式相同的向量之间可以进行加减乘除及幂次等运算,而乘除和幂次运算使用的算子也要再加个点号,分别为:“.*”、“./或.\\”、“.^”。
>> k1=1:4;k2=5:8;k3=k1-k2,k4=k1.*k2,k5=k1./k2,k6=k1.\\k2,k7=k2.^k1? k3 =
-4 -4 -4 -4 k4 =
5 12 21 32 k5 =
0.2000 0.3333 0.4286 0.5000 k6 =
5.0000 3.0000 2.3333 2.0000
11
12
k7 =
5 36 343 4096
格式相同的向量之间的点积运算和叉积运算可分别由函数dot和函数cross来实现,而向量的混合积可通过这两个函数组合来实现。 >> m1=1:3;m2=3:5;m3=dot(m1,m2),m4=cross(m1,m2) ? m3 = 26 m4 =
-2 4 -2
>> m5=dot(cross(m1,m2),m4) ? %计算上述三个向量m1、m2、m4的混合积。 m5 = 24
行向量和列向量均为特殊矩阵,一般的矩阵具有多个行和多个列。生成矩阵的方法和生成向量的方法类似,在中括号[]中按次序输入矩阵的各元素,同行的元素之间用逗号或空格分隔,行与行之间用分号或回车符分隔。 >> n=[1 2 3 4;5 6 7 8? %此回车符的作用是分隔行。
9:12] ? %生成3×4的矩阵,其中第三行由冒号表达式生成。 n =
1 2 3 4 5 6 7 8 9 10 11 12
12
13
对于常用的特殊矩阵,只需输入矩阵的行数和列数,调用相应的函数即可生成。如生成单位阵可使用eye函数,其格式为:eye(N)或eye(M,N),分别生成N×N和M×N的矩阵。
>> n1=eye(3),n2=eye(2,4),n3=eye(3,2) ? %生成3×3、2×4和3×2的单位阵。 n1 =
1 0 0 0 1 0 0 0 1 n2 =
1 0 0 0 0 1 0 0 n3 =
1 0 0 1 0 0
MATLAB还有生成全0阵的函数zeros,生成全1阵的函数ones,生成随机阵的函数rand、randn等专用函数,给我们带来很大的便利,具体的使用方法请使用help命令查询。
>> n4=ones(3,3),n5=zeros(2,4) ? %生成3×3的全1阵和2×4的全0阵。 n4 =
13
14
1 1 1 1 1 1 1 1 1 n5 =
0 0 0 0 0 0 0 0
>> n6=rand(1,6) ? %生成服从[0,1]区间均匀分布的6个随机数组成的1×6随机阵。 n6 =
0.4565 0.0185 0.8214 0.4447 0.6154 0.7919 >> n7=randn(3,5) ? %生成由服从标准正态分布的15个随机数组成的3×5矩阵。 n7 =
-0.3999 0.7119 1.1908 -0.1567 -1.0565 0.6900 1.2902 -1.2025 -1.6041 1.4151 0.8156 0.6686 -0.0198 0.2573 -0.8051
直接输入法是生成矩阵最简单的方法,但有时候生成的矩阵可能并不是我们真正需要的矩阵,如它的某些元素的数值错误、行数列数不符合要求、我们只需要它的特定的某几列或某几行等,这是我们就要对所生成的矩阵进行修改、抽取、拼接等操作。
若某些元素数值错误,我们可以直接修改所在位置的元素的数值。 >> p=[1 2 3 4;1 1 1 1] ? %生成2×4矩阵。
14
15
p =
1 2 3 4 1 1 1 1
>> p(2,1)=5? %将第2行第1列的元素改为5。 p =
1 2 3 4 5 1 1 1
>> p(2,2:4)=6:8? %将第2行第2、3、4列的元素分别改为6、7、8。 p =
1 2 3 4 5 6 7 8
对矩阵的抽取、拼接等操作主要用工具“:”来实现,我们通过对前面修改之后的2×4矩阵p操作来简单地介绍一下“:”的用法。
>> p1=p(2,:) ? %取第2行的所有元素构成新矩阵p1。 p1 =
5 6 7 8
>> p2=p(:,2) ? %取第2列的所有元素构成新矩阵p2。 p2 = 2 6
>> p3=p(:,2:4) ? %取每行的第2、3、4列的所有元素构成新矩阵p3。 p3 =
15
16
2 3 4 6 7 8
>> p4=p(1:2,1:2:3) ? %取第1、2行的第1、3列的所有元素构成新矩阵p4。 p4 =
1 3 5 7
MATLAB还有专门的抽取对角线元素函数diag,抽取下三角部分的函数tril和上三角部分的函数triu。具体用法请使用help命令查询。 若想删除其中的某些行或某些列,可以将这些行或列赋值为“[]”。 >> p(:,1:2)=[] ? %删除p矩阵的第1列和第2列。 p =
3 4 7 8
>> p(1,:)=[] ? %删除新的p矩阵的第1行。 p =
7
8
将几个矩阵拼接时要注意,左右拼接的矩阵行数要相同,上下拼接的矩阵列数要相同,否则系统会提示出错。
>> q=[2 3;4 5];q1=[q,zeros(2,3)] ? %矩阵q添加三列零向量,生成2×5的q1矩阵。
q1 =
16
17
2 3 0 0 0 4 5 0 0 0
>> q2=[q1;ones(1,5)] ? %矩阵q1添加一全为1的行向量,生成2×5的q2矩阵。
q2 =
2 3 0 0 0 4 5 0 0 0 1 1 1 1 1
>> q3=[q,zeros(2,3);ones(1,5)] ? %添加行与添加列可以同时进行。 q3 =
2 3 0 0 0 4 5 0 0 0 1 1 1 1 1
同向量类似,矩阵与标量之间的加减乘除等简单数学运算就是对矩阵的每个元素施加运算,使用算子“+”、“-”、“*”、“/”。但作除法时,若将矩阵直接作为除数会出错。
>> r=[1 2 3;4 5 6]; ?
>>r1=1+r,r2=r-2,r3=r*3,r4=r/4? %向量与标量进行加减乘除运算。
r1 =
2 3 4 5 6 7
17
18
r2 =
-1 0 1 2 3 4 r3 =
3 6 9 12 15 18 r4 =
0.2500 0.5000 0.7500 1.0000 1.2500 1.5000
矩阵与矩阵之间的运算,必须符合矩阵运算的要求。如加减法使用算子“+”和“-”,要求两矩阵必须有相同的行数和列数。
>> r5=r1+r2? %矩阵相加。 r5 =
1 3 5 7 9 11
两矩阵相乘,使用算子“*”,且前一矩阵的列数必须和后一矩阵的行数相同。 >> r6=r5*ones(3,4),r7=ones(1,2)*r5? %r5为2×3矩阵。 r6 =
9 9 9 9 27 27 27 27 r7 =
8 12 16
18
19
矩阵的除法有两种形式:左除“\\”和右除“/”。若A为可逆阵,B为列向量,则方程AX=B的解为A左除B,即X=A\\B;方程XA=B的解为A右除B,即
?2x1?x2?3x3?1X=B/A。如线性方程组??4x1?2x2?5x3?4的解可以使用左除得到。
?2x?2x?613?>> A=[2,-1,3;4,2,5;2,0,2];B=[1;4;6]; ?
>>A\\B? %A为系数矩阵,B为列向量,A\\B为解。
ans = 9 -1 -6
矩阵的幂次运算使用算子“^”,指数运算使用expm,expm1,expm2,expm3等命令,对数运算使用logm命令,开方运算使用sqrtm命令。具体用法请使用帮助查询。
>> C=[2,-1,3;4,2,5;2,0,2]; ?
>>C1=C^3? % 3×3矩阵C的3次乘积。
C1 =
10 -14 12 116 -26 142 28 -12 34
对于矩阵的转置,MATLAB也有专用的算子“’”。
19
20
>> D=[2,-1,3,5;4,2,5,6;2,0,2,7]; ?
>>D1=D'? % 将3×4矩阵D进行转置运算。
D1 =
2 4 2 -1 2 0 3 5 2 5 6 7
线性代数中,逆矩阵的求取是比较繁琐的事情之一,而在MATLAB中,只需要一个简单的函数inv就可求出逆矩阵。
>> E=[1 1 -1;2 1 0;1 -1 0]; ?
>>E1=inv(E) ? % 求方阵E的逆矩阵。 E1 =
0 0.3333 0.3333 0 0.3333 -0.6667 -1.0000 0.6667 -0.3333
其它常用矩阵函数有det、eig、poly、rank、trace、size等。函数det用于求矩阵的行列式,eig用于求矩阵的特征值和特征向量,poly用于求矩阵的特征多项式,rank用于求矩阵的秩,trace用于求矩阵的迹(主对角线元素之和),size得到矩阵的行数和列数。
>> E2=det(E),E3=size(E),E4=trace(E) ? % 分别求方阵E的行列式、尺寸、迹。
20
21
E2 = 3 E3 =
3 3 % E为3×3矩阵。 E4 =
2 % 对角线元素之和为2。 >> E5=rank(E) ? %求方阵E的秩。 E5 =
3 % 由于E可逆,故秩为3,对于其它矩阵此函数也能求出其秩。
>> E6=poly(E),[E7,E8]=eig(E)? % 分别求方阵E的特征多项式、特征向量、特征值。
E6 =
1.0000 -2.0000 0.0000 -3.0000 % 得到特征多项式的系数。
E7 = %E7为由3个与各特征值相对应的特征列向量组成的矩阵。
-0.5942 0.0685 + 0.3999i 0.0685 - 0.3999i -0.8000 0.2551 - 0.4237i 0.2551 + 0.4237i
0.0828 0.7687 0.7687 %E7为特征向量矩阵。
E8 = %E8为特征值矩阵,对角线元素为特征值,此例中有1个
21
22
实数特征值,2个虚数特征值。
2.4856 0 0 0 -0.2428 + 1.0715i 0 0 0 -0.2428 - 1.0715i 对于格式相同的矩阵,我们有时并不希望得到数学中严格定义的矩阵间的运算结果,而经常望得到由两矩阵对应位置的元素之间实施某种运算后的所有结果构成新的矩阵,此时我们可以使用“.*”、“./”、“.\\”等算子,来实现对应元素的乘除等运算。初学MATLAB,一定要注意算子带“.”和不带“.”的区别。
>> F=[1 2 3;4 5 6];G=[1 3 5;2 4 6]; ?
>>H1=F+G,H2=F.*G,H3=F./G? % 因为有“+”、“-”可以实现对应元素的
加减运算,故新版本的MATLAB中没有“.+”、“.-”算子。
H1 =
2 5 8 6 9 12 H2 =
1 6 15 8 20 36 H3 =
1.0000 0.6667 0.6000 2.0000 1.2500 1.0000
若相实现对应元素的幂次运算,可以使用算子“.^”。
22
23
>> F.^G? ans =
1 8 243 16 625 46656
矩阵与标量之间的幂次运算,也要注意算子的选择性。算子不同,结果有很大的差别。
>> K=[1 1 -1;2 1 0;1 -1 0]; ?
>> K1=K^3,K2=K.^3? % K1为矩阵K的3次相乘的结果,K2为
由矩阵K的每个元素的3次幂组成的矩阵。
K1 =
7 6 -2 8 9 -4 -2 0 1 K2 =
1 1 -1 8 1 0 1 -1 0
MATLAB还有大量如最大值max,最小值min,平均值 mean,中位数median,排序sort,总和值sum,连乘值prod,累积总和值cumsum,累积连乘值cumprod等非常实用的关于向量及矩阵的函数,在这里我们就不一一介绍了,需要时请参看MATLAB参考手册。
23
24
10.3 MATLAB程序设计
利用MATLAB的命令窗口,可以完成较为简单的运算,但遇到较为复杂的问题时,仅靠命令窗口来解决可能会非常繁琐,这时我们就要考虑使用MATLAB的程序设计。MATLAB提供了一个完善的程序设计语言环境,使我们能方便地编写复杂的程序,完成各种复杂的计算。MATLAB语言在形式上与C语言相似,但它的编程效率比C语言高得多,因为用MATLAB语言编程,不需要事先定义变量,不需要考虑数据类型,系统会自动把所有的数据,包括标量、向量、字符、字符串等统一处理成矩阵,矩阵的大小是根据需要动态变化。在本节中我们主要介绍MATLAB类似于其它高级语言的关系运算、逻辑运算、程序的控制结构,以及MATLAB特有的M-文件。
关系运算是指对两个量之间的大小比较,MATLAB提供了6个关系运算符,如表10.3所示。
> 大于 < 小于 >= 大于或等于 <= 小于或等于 = = 等于 ~= 表10.3
若关系运算比较两个数值,则当关系成立时,结果为1(表示真),否则为0(表示假)。进行关系运算的两个量也可以是具有相同格式的矩阵(事实上,若比较的是两个数,这两个数可以看作为两个1×1矩阵),此时两矩阵的所有对应位置的元素作关系运算,最终的结果是由各对应元素进行关系运算后
24
不等于 25
的结果“0”和“1”组成的矩阵,格式与比较矩阵相同。
>> a1=5>8? a1 = 0
>> a2=[1 2 3;4 5 6];a3=[6 5 4;3 2 1]; ? >> a4=a2<=a3? %两矩阵进行关系运算。 a4 =
1 1 1 0 0 0
>> a5=a2>=3? %矩阵与标量间的关系运算是指
矩阵的每个元素与该标量进行关系运算。
a5 =
0 0 1 1 1 1
MATLAB提供了3各逻辑运算符,如下表10.4所示:
& 逻辑与 | 逻辑或 表10.4
逻辑运算将每个非零元素当作1(真)来处理。同关系运算一样,它也可以作用于格式相同的矩阵,运算结果为由“0”和“1”组成的矩阵。
25
~ 逻辑非
26
>> b1=3&0,b2=3|0,b3=~(2>=3) ? %数值的逻辑运算。 b1 = 0 b2 = 1 b3 = 1
>> b4=[-2 -1 0;1 2 3];b5=[1 3 5;-1 -3 -5]; ?
>> b6=(b4>-2)&(b5<=3),b7=~(b5>=b4|b4<0) ? %矩阵间的逻辑运算。
b6 =
0 1 0 1 1 1 b7 =
0 0 0 1 1 1
除上述的关系运算符和逻辑运算符之外,MATLAB还提供了大量的关系和逻辑函数,最常见的有函数any(A)、all(A)以及异或运算函数xor(A,B)。若矩阵A的某列中有非零元素, 则any(A) 的关于此列的值为1,否则为0。若矩阵A的某列中所有元素非零,all(A) 的关于此列的值值为1,否则为0。
>> c=[1 2 3;0 1 0]; ? >> c1=any(c),c2=all(c) ?
26
27
c1 =
1 1 1 c2 =
0 1 0
%矩阵c中只有第二列中所有元素非零。
%矩阵c的每一列中都有非零元素。
MATLAB程序的控制结构有顺序结构、循环结构和选择结构三种。顺序结构较为简单,即根据语句的书写顺序,从上到下按行执行,执行完所有语句后结束程序运行。我们这里主要介绍循环结构的控制流语句for、while和选择结构的控制流语句if、switch,这四个语句均以end结束。
for循环语句的一般格式为: for 循环变量=冒号表达式
循环体
end
其中的循环体可以是一条语句或命令,也可以是由逗号、分号隔开的若干语句或命令。冒号表达式用来控制循环的次数,对于由冒号表达式确定的每一个循环变量的值,循环体中的所有语句都被重复执行。 我们利用for循环来计算自然数1~5的阶乘。
>> d=zeros(1,5); ? %开辟存放各阶乘的地址, MATLAB可
动态调节矩阵的格式,故只使用后面的语句结果也是将各阶乘存放到矩阵d中,但预先开辟空间可节约运行时间。
>> e=1; ? %对乘积因子变量e赋初值。 >> for i=1:5? %循环变量i从1一直到5,步
27
28
长为1。
d(i)=e*i; ? %此for循环的循环体包含两个
语句,此句作用是求i的阶乘并存放在d(i)处且结果不显示(不显示可节约运行时间)。
e=d(i); ? %改变e的值且结果不显示。 end? %结束for循环。 >> disp(d) ? %显示各阶乘。 1 2 6 24 120
前述for语句一般格式中的“冒号表达式”部分也可以是任意的向量或矩阵的变量名,此时,循环变量依次取向量的值或按矩阵的列依次取值。 >> f1=[1 3 5];f2=[1 3 5;4 6 8]; i=1;j=1; ? >> for g=f1?
f3(i)=g;i=i+1; ? %取出f1的各
分量的值。
end? >> for h=f2?
f4(j)=h(2)*h(1);j=j+1; ? %求各列
元素的乘积。
end? >> disp(f3) ? 1 3 5
28
29
>> disp(f4) ? 4 18 40
for循环可以嵌套使用,如以下程序可以生成3×5Hilbert矩阵。 >> k=zeros(3,5); ? >> for i=1:3?
for j=1:5?
k(i,j)=1/(i+j-1); ? end?
end?
>> format rat? %改变显示格式。 >> k? k =
1 1/2 1/3 1/4 1/5 1/2 1/3 1/4 1/5 1/6
1/3 1/4 1/5 1/6 1/7
>> format? %恢复显示格式。 for循环主要用于循环次数固定的情形,而很多实际计算中循环次数往往并
不能预先确定,此时我们可以使用while循环语句。
while循环语句的一般格式为: while 条件
循环体
end
29
30
“条件”即执行循环的条件,用来控制循环的次数,它可以是关系表达式或逻辑表达式。当条件成立(即为1)时,循环体被执行,直到条件不成立(即为0)时,结束循环。
我们利用while循环来寻找阶乘小于100万的最大的自然数。 >> m=1; ?
>> while prod(1:m)<1000000? %prod为向量的连乘函数。
m=m+1; ?
end?
>> m=m-1? %结束循环的条件为阶乘大于100万,故最终的结果需减1。 m = 9
选择结构的if语句的格式主要有以下三种: 格式1:if 条件
语句组
end
当条件成立时,执行语句组,否则执行end的后续语句。 格式2:if 条件 语句组1 else
30
语句组2
31
end
当条件成立时,执行语句组1,否则执行语句组2。执行完成之后,执行end的后续语句。
格式3:if 条件1 语句组1 elseif 条件2 语句组2 …… elseif 条件n 语句组n else
语句组n+1 end
当条件1成立时,执行语句组1,执行完成后,执行end的后续语句;当条件1不成立时,判断条件2,若其成立,执行语句组2,执行完成后,执行end的后续语句;依次类推,若所有条件均不成立,则执行语句组n+1,执行完成后,执行end的后续语句。 我们可以利用上述3种格式的if
?1,x?0语句自定义符号函数y???0,x?0。若用格式
??1,x?0?1,需分别调用3次;若用格式2,则需使用嵌套;下面是用格式3书写的程序。
>> if x>0?
31
32
y=1; ?
elseif x<0?
y=-1; ?
else?
y=0; ?
end?
无论是for循环还是while循环,break语句可以强行退出循环,立即执行
此循环end的后续语句。一般我们用if语句与break语句组合使用来中断循环。
我们用while循环来统计由MATLAB产生的100个随机数中介于0.5到1
的随机数个数,并使用break语句来中断循环。事实上本例由简单的循环语句即可实现,下列程序仅为说明break语句的用法。
>>p=rand(1,100);i=1;s=0; ? %生成随机数,循环变量、计
数器赋初值。
>>while 1? %该条件总为真,如无中断语句break,循环将无休止地运行。 if p(i)>=0.5? s=s+1; ? end? i=i+1; ?
if i>100? %设置循环中断条件。
break? %该条件总为真,如无中断语句break,循环将无
32
33
休止地运行。 end? end? >> s? s =
54 %换新的100个随机数得到的统计个数可能不同。 选择结构的switch语句根据表达式的值来选择执行相应的语句组。switch的格式为:
switch 表达式 case 值1 语句组1 case 值2 语句组2 …… case 值n 语句组n otherwise
语句组n+1 end
当表达式的值为值1时,执行语句组1,执行完成后,执行end的后续语句;当表达式的值为值2时,执行语句组2,执行完成后,执行end的后续语句;依次类推,若以上均不满足,执行语句组n+1,执行完成后,执行end的后
33
34
续语句。
到目前为止,我们仍然一直在命令窗口逐行输入数据和命令来实现计算等
功能。这种方法对于较为简单的问题还可以接受,一旦问题较为复杂,这种方法就显得相当麻烦,这时MATLAB提供的以m为扩展名的M文件的作用就突显出来了。M 文件有两种类型:文本M文件和函数M文件。
建立M文件可以在MATLAB的主窗口的File下拉式菜单中选择New,再
选择M-file,此时MATLAB将打开一个文本编辑窗口,在此窗口中输入一系列的命令和数据。编辑结束后,在此窗口的File下拉式菜单中选择Save,将弹出保存对话框,选择文件的保存位置并键入文件名称(需遵循变量的命名规则)和“.m”,单击保存按钮即完成M文件的建立。已经建立好的M文件可以随时打开、编辑、修改,方法同Windows操作系统。
文本M文件就是命令行的简单叠加,调用文本M文件时,MATLAB会自
动按顺序执行文件中的命令行。以下是我们自己编写的命名为Fibo.m的一个文本M文件,它的功能是产生前n个Fibonnaci数。 f=[1 1];i=1; if n= =1 f(2)=[ ];
elseif n==2 %如果n为2,不执行任何语句 else
while i 34 f(i+2)=f(i)+f(i+1); i=i+1; 35 end end f 这里要注意的是,文本M文件中所定义和使用的变量均为全局变量,如本例中的f、i及n,它们不仅在本程序的运行过程中有效,程序运行完成之后仍然有效。我们在编辑程序时,要尽量避免使用全局变量。 运行文本M文件,只需在MATLAB的命令窗口中直接键入该文本M文件的文件名即可。 >> n=10;Fibo? %产生前10个Fibonnaci数;文件中未指定n的大小,需事先指定。 f = 1 1 2 3 5 8 13 21 34 55 函数M文件是另一类M文件。MATLAB所提供的绝大多数功能函数都是由函数M文件实现的,可见函数M文件的重要性。我们可以根据需要建立自己的函数M文件,它能够像系统中的功能函数一样方便地调用,从而极大地扩展了MATLAB地功能。 函数M文件的第一行有特殊的格式,必须以function开头。函数M文件的一般格式为: function [输出参数表]=函数名(形式参数) 语句组 end 这里的输出参数表可以是一个变量,也可以是多个变量,他们表示要计算的量。 35 36 如果是一个参数,双括号可以去掉;如果是多个变量,两两之间用逗号隔开。这里的函数名必须与该文件的文件名一致,这样才能保证成功调用。形式参数是一组形式变量,本身没有任何意义,只有在调用时赋予它们实际值才有意义。 我们编写一个命名为Fibon.m的函数M文件,它的功能是产生前n个Fibonnaci数,并计算这n个数之和。 function [f,s]=fibon(n) %返回两个量f、s,n为形式参数。 f=[1 1];i=1; if n==1 f(2)=[ ]; elseif n==2 %如果n为2,不执行任何语句。 else while i 函数M文件的调用格式为:[输出参数表]=函数名(实际参数)。若我们想知道前10个Fibonnaci数及这10个之和,只需在MATLAB的命令窗口中键入: >> [fib,fibs]=Fibon(10) ? %返回值分别赋予fib和fibs fib = 1 1 2 3 5 8 13 21 34 55 36 37 fibs = 143 与文本M文件不同的是,函数M文件中定义和使用的变量为局部变量,如本例中的f、s、n、i,它们仅在本程序的运行过程中有效,程序运行完成之后就不再存在。 自定义的M文件,不管是文本M文件还是函数M文件,均应该存放在MATLAB当前目录下或MATLAB搜索路径下,以使系统能够找到该M文件并执行。当然,你也可以使用cd命令确定和改变当前目录,用path命令确定MATLAB的搜索路径。 10.4 MATLAB图形处理 不管是数值计算还是符号计算,无论计算多么完美、结果多么准确,人们还是很难从直接从一大堆原始的数据中发现它们的含义,而数据图形化能使视觉感官直接感受到数据的许多内在本质,发现数据的内在联系,可把数据的内在特征表现得淋漓尽致。MATLAB具有强大的图形处理能力,本节中我们简单地介绍MATLAB关于二维图形、三维图形的一些常用命令。 二维图形的绘制是MATLAB图形处理的基础。绘制二维图形最常用的函数是plot函数,plot函数最常用的格式为:plot(X,Y,),其中X和Y是长度相同的向量,它将绘出以X为横坐标,以Y为纵坐标的散点图或折线图。 >> x=linspace(0,2*pi,30);y=sin(x); ? %产生30个数据点。 >> plot(x,y) ? %打开图形窗口,在此窗口绘制数据点, 37 38 并用线段连接相邻数据点,MATLAB会自动给出两坐标轴的坐标,最终在图形窗口出现图10.3。 10.80.680.40.20-0.2-0.44-0.6-0.8-1327651090123456711.522.533.544.555.56 图10.3 图10.4 如果没有指定X坐标,命令plot(Y)同命令plot(1:length(Y),Y)等价,其中length函数的功能是求向量Y的长度。例如在命令窗口中输入y=[5,6,8,4,2,10];plot(y)语句,得到的图形见图10.4。 若想在同一个坐标系内画出不同的曲线,只需将各曲线的散点横纵坐标向量依次填入plot后的括号中,用“,”分隔。一般格式为:plot(X1,Y1,X2,Y2,X3,Y3,…, Xn,Yn)。例如我们希望在同一坐标系内画出区间(0,2?)的正弦函数和余弦函数的图形(见图10.5),可使用以下命令: >> x=linspace(0,2*pi,30);y1=sin(x);y2=cos(x); ? >> plot(x,y1,x,y2) ? 38 39 10.80.60.40.20-0.2-0.4-0.6-0.8-110.80.60.40.20-0.2-0.4-0.6-0.8-10123456701234567 图10.5 图10.6 我们也可以使用hold命令来实现上述功能。MATLAB只有一个图形窗口,缺省状态下,画一个新的图形将会自动清除图形窗口中已有的图形,然后在此窗口中绘制新的图形。使用hold on命令之后,绘制新图形时将不会清除已有图形;使用hold off命令将恢复缺省状态。图10.5也可由下列语句实现: >> x=linspace(0,2*pi,30);y1=sin(x);y2=cos(x); ? >> plot(x,y1);hold on; ? %先画正弦函数图形。 >> plot(x,y2);hold off; ? %再画余弦函数图形。 MATLAB提供了一系列对曲线的线型、颜色及标记的控制符,如表10.5所 示。 控制符 线性或标记 控制符 颜色 控制符 标记 - : -. ―― h v 39 实线 点线 点划线 虚线 六角星 倒三角 g m b c w r 绿色 品红色 蓝色 青色 白色 红色 . o x + * s 点 圆圈 叉号 加号 星号 正方形 40 ^ > < 正三角 左三角 右三角 k y 黑色 黄色 d p 菱形 五角星 表10.5 这些符号的不同组合可以为图形设置不同的线型、颜色及标记。调用时可以使用一个或多个控制符。若为多个,各控制符直接相连,不需任何分隔符。将组合之后的控制符放置在单引号内即可对图形进行控制,具体格式为:plot(X1,Y1,’控制组合1’,X2,Y2,’控制组合2’, …, Xn,Yn,’控制组合n’)。如前述的正弦函数的图形我们希望使用“点线、蓝色、圆圈”来描绘,余弦函数用“虚线、黑色、五角星”来描绘(图形见图10.6),可以使用如下命令: >> x=linspace(0,2*pi,30);y1=sin(x);y2=cos(x); ? >> plot(x,y1,':bo',x,y2,'--kp') ? %':bo'控制正弦曲线,'--kp'控制余弦曲线。 我们还可以使用grid、title、xlabel、ylabel等命令在图形上添加网格、标题、X轴注解、Y轴注解等。在图形的任何已知位置添加一字符串可以使用text命令,更为方便的是由鼠标的落点来确定所添加字符串的位置的gtext命令。我们还可以使用legend命令在图中创建一个图例框,此图例框可以任意拖动,它将显示你为图中每条曲线所提供的任何解释性的字符串。如由以下命令产生的图形见图10.7。 >> x=linspace(0,2*pi,30);y1=sin(x);y2=cos(x); ? >> plot(x,y1,x,y2); ? >> grid on; ? %显示网格;使用grid off命令取消网格 40 41 显示。 >> title('Sine and Cosine Curves'); ? %添加图形标题。 >> xlabel('Independent Variable X'); ? %添加X轴注解。 >> ylabel('Dependent Variable Y1 and Y2'); ? %添加Y轴注解。 >> text(2.7,0.5,'y=sinx'); ? %在坐标(2.7,0.5)处添加字符串'y=sinx'。 >> gtext('y=cosx'); ? %使用此命令后,将切换到图形窗口,十字标线 跟随鼠标移动,等待鼠标落点或按键,确定字符串'y=cosx'的放置位置。 >>legend('y=sinx','y=cosx') ? %创建图例框;使用legend off命令取消 图例框。 前面所画的所有图形的横纵坐标的比例是由MATLAB自动确定的,若对这些比例不满意,可以使用axis命令来进行控制,常用的命令有: 命令 功能 axis([xmin,xmax,ymin,ymax]) 给出x轴、y轴的最大值、最小值 axis xy axis ij axis square axis equal 41 笛卡儿坐标系 矩阵坐标系 显示的图框呈方形 x、y轴具有相同的单位长度 42 表10.6 此外,MATLAB还有axis auto、axis manual、axis normal、axis on、axis off等一系列命令,具体的功能请参考在线帮助系统。使用以下命令得到的图形见图10.8。 >> x=linspace(0,2*pi,30);y=sin(x); ? >> plot(x,y); ? >> axis([-1,8,-1.5,1.5]); ? %x轴、y轴的范围分别为[-1,8]、[-1.5,1.5]。 Sine and Cosine Curves10.80.61y=sinx0.40.20-0.2-0.4-0.6-0.8-1-1.5-1-0.5y=sinxy=cosxy=cosx0.51.5Dependent Variable Y1 and Y20-101234Independent Variable X567012345678 图10.7 图10.8 MATLAB提供了一系列特殊坐标系的二维图形函数,如semilogx、similogy、loglog等,具体调用格式与plot函数完全类似,只是利用semilogx画出的图形的x坐标为对数坐标、similogy的y坐标为对数坐标、loglog为双对数坐标。对于极坐标系,MATLAB也提供了polar函数。使用以下命令得到的图形见图10.9和图10.10。 >> x=linspace(0,2*pi,30);y=2*sin(x); ? >> semilogx(x,y,'kp-') ? %在x轴为对数坐标的坐标系中绘制y=2sinx的图形。 >> theta=linspace(0,pi,100);r=2*sin(theta); ? 42 43 >> polar(theta,r,'k-') ? %在极坐标系中绘制r=2sin?的图形。 21.510.50-0.5-1-1.5240300270210330180120 1.5150 1 0.53090 2600-2100 图10.9 图10.10 MATLAB还提供了许多很实用的绘制特殊二维图形的函数,主要有下列函数: 函数名 bar barth area comet errorbar ezplot 功能 条形图 水平条形图 填充绘图 彗星图 误差带图 简单绘制函数图 函数名 fplot hist rose pie scatter stem stairs quiver compass 功能 绘制精确函数图 累计图 极坐标累计图 柄状图 散射图 离散序列柄状图 阶梯图 向量场图 罗盘图 ezpolar 简单绘制极坐标图 feather fill 矢量图 多边形填充 表10.7 本节中我们只介绍某几个命令的简单用法,更详细的用法请使用在线帮助系统查询。绘制图10.11的命令如下: 43 44 >> fplot('[4*(sin(x-2))^2,tan(x)]',[-8,8,-5,5])? %在直角坐标 系中绘制函数y?4sin2(x?2)和y?tanx的图形,x的取值范围为[-8,8],纵坐标的显示范围为[-5,5]。此函数只需给出指定的函数表达式和自变量的取值范围,系统会自动在给定的取值范围内取点绘图。对于变化剧烈的函数,使用fpolt绘图效果较好。 绘制图10.12的命令如下: >> x=linspace(0,2*pi,20);y=sin(x); ? >> bar(x,y) ? %绘制条形图。 543210-1-2-3-4-5-810.80.60.40.20-0.2-0.4-0.6-0.8-1-1 -6-4-20246801234567 图10.11 图10.12 绘制图10.13的命令如下: >> x=randn(5000,1); ? %生成5000个标准正态 随机数。 >> hist(x,20) ? %绘制累计图,20为条形的个数。 44 45 8007000.5600500400300200-11000-4-1.5-0.510 -3-2-101234051015202530 图10.13 图10.14 绘制图10.14的命令如下: >> x=linspace(0,2*pi,20);y=sin(x); ? >> z=x+y*i;feather(z) ? %生成复数矩阵z,并将其中元 素的相角和模长显示成沿横轴等间隔辐射的向量。 以上利用MATLAB绘制的所有二维图形,均在图形窗口中显示,而图形窗口中只有一个坐标系。但有时候,为了便于比较,我们希望图形窗口中同时出现几个坐标系,在每个坐标系内显示不同的图形。MATLAB提供了subplot函数可以实现这样的功能。调用格式为:subplot(m,n,p)。此命令本身并不绘制图形,它只是将图形窗口分割成m行n列共m×n个子窗口,子窗口按行从左到右,由上至下进行编号,并把p指定的子窗口设置为当前窗口。绘制图10.15的命令如下: >> x=linspace(0,2*pi,30); ? >> y1=sin(2*x);y2=cos(x);y3=x.^2-3*x-5; ? >> subplot(2,2,1); ? %将图形窗口分割成2× 2个窗口,并把第1个 45 46 窗口设置为当前窗口。 >> plot(x,y1);title('y1=sin(2*x)'); ? %此行命令只对当前窗口有效。 >> subplot(2,2,2); ? %把第2个窗口设置为当前窗口。 >> plot(x,y2);title('y2=cos(x)'); ? 口有效。 >> subplot(2,2,3); ? 当前窗口。 >> plot(x,y3);title('y3=x^2-3*x-5'); ? 口有效。 >> subplot(2,2,4); ? 当前窗口。 >> fplot('1./x',[-5,5,-20,20]);title('y=1/x'); 窗口有效。 46 %此行命令只对当前窗 %把第3个窗口设置为 %此行命令只对当前窗 %把第4个窗口设置为? %此行命令只对当前 47 图10.15 plot3命令将绘制二维图形的函数plot的特性扩展到三维空间。除了数据多了一维之外,它的调用格式与plot相同,具体的调用格式为:plot3(X1,Y1,Z1,’控制组合1’,X2,Y2,Z2,’控制组合2’, …, Xn,Yn,Zn,’控制组合n’),这里的Xi、Yi、Zi为格式相同的向量或矩阵,控制组合的形式和plot函数相同。plot3常用于绘制单变量的三维曲线。如我们希望绘制函数x?tsint,x?tcost,z?t的图形(见图10.16),可以使用如下命令: >> t=linspace(0,20*pi,1000); ? >> plot3(t.*sin(t),t.*cos(t),t); ? %三参数为格式相同的向量,注意这里的“.*”。 >> xlabel('tsint');ylabel('tcost');zlabel('t'); ? %二维图形的命令仍然适用。 47 48 801600.540020t0100500-50tcost-100-100-50tsint500100-0.5604020010020305040 图10.16 图10.17 MATLAB中绘制带网格的曲面图使用mesh函数。此函数利用X-Y平面的矩形网格点对应的Z轴坐标值,在三维直角坐标系内将各点一一画出,然后用直线将相邻的点连接起来形成网状曲面。MATLAB中生成平面矩形网格点的函数为meshgrid,它的功能是利用给定的两个向量生成二维网格点。Meshgrid的调用格式见下例: >> x=1:3;y=4:6; ? >> [xx,yy]=meshgrid(x,y) ? %由向量x和y生成3×3个平面矩形网 格点,矩阵xx、yy分别存放所有网格点的x轴、y轴坐标。 xx = 1 2 3 1 2 3 1 2 3 yy = 4 4 4 5 5 5 48 49 6 6 6 mesh函数的调用格式非常简单,如我们希望绘制z?sin(格图(见图10.17),可以使用如下命令: >> x=linspace(-10,10,50);y=linspace(-10,10,50); ? >> [xx,yy]=meshgrid(x,y); ? %生成平面网格点。 >> r=sqrt(xx.^2+yy.^2)+eps;z=sin(r)./r; ? %生成z坐标矩阵,加eps防止出现0/0。 >> mesh(z) ? %生成网格图。 此外,MATLAB还提供了meshc、meshz等网格图函数,它们的调用格式和mesh相同。使用meshc除了画出网格图之外,同时还在X-Y平面画出等高线图;使用meshz画出网格图,并将边界面屏蔽,请自行调试观测图形。利用命令plot3(xx,yy,z)(注:此时的三个参数xx、yy、z为格式相同的矩阵)也可将前述的二元函数的图形(见图10.18),试比较它与网格图的不同之处。常用的三维图形函数还有表面着色函数surf,调用格式同mesh,它在画出的网格图的表面对不同的网格自动或按照指定的格式进行着色。如使用surf(z)命令得到的图形见图10.19。常用的着色函数还有surfc等。 x2?y2)/x2?y2的网110.50.500-0.51050-5-10-10-55010-0.5604020010020305040 图10.18 图10.19 49 50 MATLAB也提供了许多很实用的绘制特殊三维图形的函数,主要有下列函数: 函数名 功能 函数名 功能 等高线图 三维柄状图 三维散射图 contour3 三维空间等高线图 contour bar3 comet3 trisurf trimesh sphere 三维条形图 三维彗星图 三角形表面图 三角形网格图 球面图 pie3 scatter3 stem3 三维离散序列图 waterfall cylinder 瀑布图 柱面图 表10.8 我们只对其中的部分做示例说明,具体的用法请使用在线帮助系统查询。前述三维立体等高线图10.20的命令为:contour3(xx,yy,z);等高线(在X-Y平面的投影)图10.21的命令为:contour(xx,yy,z)。 1081640.5200-2-0.51050-5-5-10-105010-4-6-8-10-10 -8-6-4-20246810 图10.20 图10.21 10.5 优化工具箱 50
正在阅读:
matlab03-29
“十三五”重点项目-糯米面项目商业计划书12-14
C++ 编写 黑白棋 源代码 适合初学者12-14
电子商务实验报告BTB刘婉君05-31
安全员C证考试重点资料09-01
低碳生活作文1000字03-12
给实习单位的感谢信02-08
物料管理模块的主要功能01-22
公司治理 14财管2班第三组06-06
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷