matlab学习笔记

MatLab(Matrix Laboratory),一种以矩阵计算为基础的交互式程序语言,专门针对科学,工程计算以及绘图的需求。函数众多。

常用命令

Esc恢复命令输入的空白状态

上下键:调出上一行下一行命令

exit/quit退出并关闭Matlab

figure/figure(2)

logo显示MatLab的Logo

clc清屏

help sqrt

demo

formatcompact

formatloose

cleari, j

clearall

who或whos,检查工作空间中的变量及其阶数

语句的结尾可用回车符或逗号,此时会立即显示运算结果。如果不希望显示结果,就以分号结尾。此时运算仍然执行,指示不显示。

若赋值时,只剩下右侧的表达式,而没有被赋值的变量,则Matlab会自动给出一个临时变量ans,把运算结果暂存在ans中。

基本语法

Matlab中的变量或常量都代表矩阵,标量应看作1*1阶矩阵。

a=[1 23; 4 5 6; 7 8 9],同一行元素之间以逗号或空格分开,不同的行以分号分开。

变量的元素用圆括号()中的数字(下标)来注明,二维的下标以逗号分开。

如果赋值元素的下标超出了原来矩阵的大小,矩阵的行列会自动扩展

给全行赋值,可用冒号 a(5, :)=[5, 4, 3] //[]用来表示矩阵

b =a([2, 4], [1, 3]) //把a的第2,4行及第1,3列交点上的元素取出,构成一个新矩阵b

a([2,4, 5], :)=[] //抽去a中的第2,4,5行,利用空矩阵[]的概念,空矩阵不同于零矩阵

a(2,4) //a矩阵的a[2][4]元素

复数用i或j来表示 c=3+5i

z =[1, 3;5, 7]+[2, 4;6, 8]*i // ‘*’不可省略

w=z\' //共轭转置

w=conj(z) //共轭

w=conj(z)\' //转置

基本矩阵

zeros(m,n), ones(m, n), rand(m, n), linspace(a, b, n), eye(n) //linspace(a, b, n)在a与b之间均匀地产生n个点值,形成1*n维向量; eye产生单位矩阵

大矩阵可由若干个小矩阵组成,但必须行列数正确,恰好填满全部元素

元素显示不精确时,可用显示单个元素的命令来得到它的精确值,或改用长格式(format long)来显示整个矩阵

[n,m]=size(z) //获得矩阵阶数,若要自己编写矩阵A和B相加减,必须先求nA,mA,nB,mB,并检验是否满足nA=nB,mA=mB。作相乘时,正好相反

x=[1,2, 3]; y=x-1

l=length(X) //一维数组,length不分行和列

inv(z) //求逆矩阵,z必须为n阶方阵

x=inv(D)*B=D\B //把D的逆矩阵左乘B,记作D\, 称之为左除。

x=B*inv(D)=B/D //把D的逆矩阵右乘B,记作/D, 称之为右除。

*, \, /, ^, expm, logm, sqrtm是将矩阵作为一个整体进行运算的

+, -, sqrt, exp, log是对矩阵中的元素分别进行的(按元素群运算)

矩阵结构形式的提取与变换

fliplr矩阵左右翻转fliplr(A),flipud矩阵上下翻转flipud(A),reshape阶数重组, 元素总数不变reshape(A, 2, 6)

rot90矩阵整体反时针旋转90度rot90(A), diag提取或建立对角阵diag(A), tril取矩阵的左下三角部分tril(A),triu取矩阵的右上三角部分triu(A), :将元素按列取出排成一列B=A(:)\'

元素群运算

数组赋值

1) 用两个冒号组成等增量语句,格式:t=[初值:增量:终值],增量为1 时可以省略

2) 用linspace函数,格式:linspace(初值,终值,点数)

元素群运算也就是矩阵中所有元素按单个元素进行运算。为了与矩阵作为整体的运算符号相区别,要在运算符*,/,\,^前加一点符号‘.’,以表示在作元素群运算。参与运算的两个矩阵必须是同阶的。非方阵不能按整体作矩阵乘幂运算的。

Eg :

x=[0:0.1:pi/4]’;

disp(‘ x sin(x) cos(x) tan(x) ’)

disp([x,sin(x),cos(x),tan(x)])

逻辑判断

1 数学及逻辑运算符(~=不等于)

2 逻辑字符检查(all, any, find, isnan, isreal, isstr)

3 位运算

4 集合运算

流程控制语句

1 if语句

1) if(expression) section, end

2) if(expression1) section1, elsesection2, end

3) if(expression1) section1, elseifexpression2 section2, else section3, end

2while语句

while(expression)section, end

3 for 语句

for k=初值:增量:终值 语句组A, end

4 switch语句

switch表达式(标量或字符串)

case 值1

语句组A

case 值2

语句组B

… …

Otherwise

语句组N

end

基本绘图方法

Graph2d,Graph3d,Graphics,specgraph函数库

基本作图函数说明:

Plot绘制连续波形 stem绘制离散波形 subplot一个窗口内绘制多副图

axis定义x,y轴最大最小值 hold保留目前曲线 grid画网格线 xlabel/ylabel为x/y轴加上说明

title为图形加上标题 text在图上加文字说明 gtext用鼠标拖动来确定标注文字的位置

1直角坐标中的两维曲线

1) plot(y)输入一个数组的情况

2) plot(x,y)输入两个数组的情况

如果数组x和y具有相同长度,命令plot(x,y)将绘出以x元素为横坐标,y元素为纵坐标的曲线。

2线形,点型,颜色

Y***m品红c青r红g绿b蓝w白k黑

.,o,x,+,-,*,: 虚线,-.点划,- -长划

Eg: plot(x1, y1, ‘:y’), plot(x2,y2,’+r’)

3多条曲线的绘制

1) plot(t, [y1, y2, …]) 要求所有输出量有同样的长度和同样的自变量向量,不便于用户自行设定线型和颜色

2) hold命令 坐标选择要得当,注意及时解除保持状态hold off

3) 在plot后使用多输入变量

plot(x1, y1,’+g’, x2, y2,’:r’ …)

4) plotyy命令

plotyy(t,y,t2,y2)

屏幕控制

1 图形窗的控制

figure创建图形窗 gcf获取当前图形窗的句柄 clf清除当前图形窗 shg显示图形

refresh刷新图形 close关闭图形窗 close all关闭所有图形窗

2 轴系的控制

axes在任意位置创建坐标系 gca获取当前坐标系的句柄 cla清除当前坐标系 ishold保持当前图形状态为真

3 图形对象

line创建直线 surface创建曲面 patch创建图形填充块 light创建照明 image创建图像

4 图形句柄操作

5工具

6 其他

subplot(n,m,p):将图形窗口分为n*m个子图,在第p个子图处绘制图形

其他二维绘图命令

虚数的绘图

坐标比例和尺寸的设定---axis命令

图形窗口中的直接编辑

M文件及程序调试

M文件分两种:一种是主程序文件(script file),由用户为解决特定的问题而编制的;另一种是子程序,也称为函数文件(function file),它必须由其他文件调用

主程序文件

1) 用clear,close all等语句开始,清除掉工作空间中原有的变量和图形,以避免其它已执行程序残留数据对本程序的影响。前几行通常是注释,说明此程序的用途。注释必须以%开始。在MatLab中输入help filename时,屏幕上会将该文件中以%起头的最前面几行的内容显示出来。

2) 程序主体。注意避免中文的字符,否则会引起死机

3) 文件名不要用汉字。避免出现汉字路径名。

人机交互命令

估值并执行,流程控制语句,程序,函数和变量,变元管理,信息显示,人机交互命令

pause(n)程序执行到此处,暂停n秒,再继续执行。如果没有括号参数,则等待用户输入任意键后才继续执行。

keyboard程序执行到此处暂停,在屏幕上显示字符K,并把程序的输入和执行权交给用户。如果需要系统恢复运行原来的程序,只需输入字符串return。在M文件中设置该命令,有利于进行程序调试,以及临时修改变量内容。

Ctrl+C强行停止程序运行的命令

函数文件

由function起头,后跟的函数名必须与文件名相同

有输入输出变元(变量),可进行变量传递

除非用global声明,程序中的变量均为局部变量,不保存在工作空间中