Matlab讲座.docx
- 文档编号:29814346
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:22
- 大小:160.34KB
Matlab讲座.docx
《Matlab讲座.docx》由会员分享,可在线阅读,更多相关《Matlab讲座.docx(22页珍藏版)》请在冰豆网上搜索。
Matlab讲座
第一部分Matlab基础篇
主要内容
1.Matlab/Simulink仿真环境
2.Matlab界面
3.Matlab语言的数据结构-矩阵代数运算/逻辑运算/比较运算
4.常用初等数学函数
5.流控制结构
6.M文件与M函数
7.绘图
8.提高效率的技巧
一、Matlab/Simulink仿真环境
MATLAB®(matrixlaboratory):
Mathworks公司开发的集命令翻译、科学计算、可视化、编程于一身的高性能交互式科学计算语言。
目前使用最广泛的科学计算/仿真软件是Matlab,在全世界2000所以上的大学中讲授,是倍受工程人员喜爱的软件。
在大学中,它是数学、工程和科学的初级和高级课程的标准的教学工具。
在工业领域,MATLAB是研究、开发和分析的首选工具。
MATLAB是MATLAB产品家族的基础,提供了基本的数学算法,例如矩阵运算、数值分析算法,MATLAB集成了2D和3D图形功能,并且提供了一种交互式的高级编程语言——M语言,利用M语言可以通过编写脚本或者函数文件实现用户自己的算法。
MATLAB专业工具箱函数。
这些工具箱应用的算法是开放的可扩展的,用户不仅可以查看其中的算法,还可以针对一些算法进行修改,甚至允许开发自己的算法扩充工具箱的功能。
目前MATLAB产品的工具箱有四十多个,分别涵盖了数据获取、科学计算、控制系统设计与分析、数字信号处理、数字图像处理、金融财务分析以及生物遗传工程等专业领域。
MATLABCompiler是一种编译工具,它能够将那些利用MATLAB提供的编程语言——M语言编写的函数文件编译生成为函数库、可执行文件COM组件等等。
这样就可以扩展MATLAB功能,使MATLAB能够同其他高级编程语言例如C/C++语言进行混合应用,取长补短,以提高程序的运行效率,丰富程序开发的手段。
Simulink是基于MATLAB的框图设计环境,可以用来对各种动态系统进行建模、分析和仿真,它的建模范围广泛,可以针对任何能够用数学来描述的系统进行建模,例如航空航天动力学系统、卫星控制制导系统、通讯系统、船舶及汽车等等,其中了包括连续、离散、条件执行、事件驱动、单速率、多速率和混杂系统等等。
Simulink提供了利用鼠标拖放的方法建立系统框图模型的图形界面,而且Simulink还提供了丰富的功能块以及不同的专业模块集合,利用Simulink几乎可以做到不书写一行代码完成整个动态系统的建模工作。
Stateflow是一个交互式的设计工具,它基于有限状态机的理论,可以用来对复杂的事件驱动系统进行建模和仿真。
Stateflow与Simulink和MATLAB紧密集成,可以将Stateflow创建的复杂控制逻辑有效地结合到Simulink的模型中。
在MATLAB产品族中,自动化的代码生成工具主要有Real-TimeWorkshop(RTW)和StateflowCoder,这两种代码生成工具可以直接将Simulink的模型框图和Stateflow的状态图转换成高效优化的程序代码。
利用TW生成的代码简洁、可靠、易读。
目前RTW支持生成标准的C语言代码,并且具备了生成其他语言代码的能力。
整个代码的生成、编译以及相应的目标下载过程都是自动完成的,用户需要做得仅仅使用鼠标点击几个按钮即可。
MathWorks公司针对不同的实时或非实时操作系统平台,开发了相应的目标选项,配合不同的软硬件系统,可以完成快速控制原型RapidControlPrototype)开发、硬件在回路的实时仿真(Hardware-in-Loop)、产品代码生成等工作。
另外,MATLAB开放性的可扩充体系允许用户开发自定义的系统目标,利用Real-TimeWorkshopEmbeddedCoder能够直接将Simulink的模型转变成效率优化的产品级代码。
代码不仅可以是浮点的,还可以是定点的。
MATLAB开放的产品体系使MATLAB成为了诸多领域的开发首选软件,并且,MATLAB还具有300余家第三方合作伙伴,分布在科学计算、机械动力、化工、计算机通讯、汽车、金融等领域。
接口方式包括了联合建模、数据共享、开发流程衔接等等。
二、Matlab界面
1.Commandwindow
2.Workspace
3.CommandHistory
三、Matlab语言的数据结构
常量、变量
变量名字母+(字母、数字、下划线)
–区分大小写
保留变量名(可重新赋值):
ans,pi,i,j,Inf,NaN,eps(2.2x10-16),lasterr,lastwarn,realmax/realmin,Nargin/Nargout
数据类型---默认双精度
转换到整型:
int8()int16()int32()int64()unit8()unit16()unit32()unit64()
转换到浮点数:
single()double()
赋值
>>变量=表达式[;]–加;不显示结果。
>>表达式赋给ans。
函数调用
赋值变量=f(x)-----y=sin(x),z=log(x)
[USV]=svd(x)------------X=U*S*V'
矩阵表达
基本单元
矩阵
直接定义
空格/逗号-行元素分隔
分号-换行
例:
A=[123;456;789]
A=[A;[101112]]----行向量、列向量
冒号表达
A=s1:
s2:
s3
X=0:
.1:
.5等价于
x=[0.1.2.3.4.5]
多维数组
直接定义
A1、A2、A3为mxn矩阵
A(:
:
1)=A1
A(:
:
2)=A2
A(:
:
3)=A3
单元结构
student={1,’aaa’,92}
>>student
(2)
‘aaa’
数据结构体
一种由被称为域的数据容器组成的阵列。
结构体的域可以包含任何类型的数据-字符串、数字、矩阵。
student.number=1
student.name=’aaa’;
student.test=92;
student
(2).number=2
student
(2).name=’bbb’;
student
(2).test=85;
矩阵代数运算
+
加
A+B
-
减
A-B
*
乘
A*B
\
左除
A\B=A-1B
/
右除
B/A=BA-1
^
乘方
A^x
.*
点乘
A.*B
.^
点幂
A.^x
’
共轭转置
A’
逻辑运算
&
与
A&B----and()
|
或
A|Bor()
~
非
~Anot()
xor
异或
xor(A,B)
例A=[10]B=[01]C=A&B---[00]
D=A&~B----[10]
比较运算
>
大于
If(i>100)then----.
<
小于
==
等于
<=
小于等于
>=
大于等于
~=
不等于
四、MATLAB常用命令和函数
查询命令
命令
意义
help
查询已知命令
lookfor
用来寻找未知的命令
who
列出所有定义过的变量名称
whos
列出所有定义过的变量名称、规模、存储空间
MATLAB常用基础数学函数
函数
意义
abs(x)
纯量的绝对值或复数的模
angle(z)
复数z的相角(Phaseangle)
sqrt(x)
开平方
real(z)
复数z的实部
imag(z)
复数z的虚部
conj(z)
复数z的共轭复数
round(x)
四舍五入至最近整数
fix(x)
无论正负,舍去小数至最近整数
函数
意义
floor(x)
地板函数,即舍去正小数至最近整数
ceil(x)
天花板函数,即加入正小数至最近整数
rat(x)
将实数x化为分数表示
rats(x)
将实数x化为多项分数展开
sign(x)
符号函数(Signumfunction)。
常用三角函数(对矩阵中每个元素运算)
sin(x)
正弦函数
cos(x)
馀弦函数
tan(x)
正切函数
asin(x)
反正弦函数
acos(x)
反馀弦函数
atan(x)
反正切函数
sinh(x)
超越正弦函数
cosh(x)
超越馀弦函数
tanh(x)
超越正切函数
asinh(x)
反超越正弦函数
acosh(x)
反超越馀弦函数
向量函数(对于矩阵,对每一列进行运算)
函数
意义
min(x)
向量x的元素的最小值
max(x)
向量x的元素的最大值
mean(x)
向量x的元素的平均值
std(x)
向量x的元素的标准差
diff(x)
向量x的相邻元素的差
sort(x)
对向量x的元素进行排序[
length(x)
向量x的元素个数
norm(x)
向量x的欧氏(Euclidean)长度
sum(x)
向量x的元素总和[121518]
特殊矩阵
eye(n)
生成n阶单位方阵
ones(n)
生成n阶全1方阵
zeros(n)
生成n阶全0方阵
magic(n)
生成n阶魔方阵
超越函数
log(x)
Loge(x)
Log10(x)
Log10(x)
Log2(x)
Log2(x)
Exp(x)
ex
五、流控制结构
循环与条件
For结构
for变量=向量---i=[134],i=s1:
s2:
s3
循环体
end
例:
sum=0
fori=1:
100
sum=sum+1;
end
sum
While结构
while逻辑变量---(i<100)
循环体
end
例:
sum=0;i=1;
while(i<=100)
sum=sum+1;i=i+1;
end
sum
条件转移结构
If条件式1
条件块1
elseif条件式2
条件块2
…
…
else
条件块n+1
end
例:
ForI=1:
10
IfI<3
A(i)=0;
ElseifI<6
A(i)=1;
Else
A(i)=-1
End
end
开关结构
switch开关表达式
Case表达式1
语段1
Case{表达式2,表达式3}
……
otherwise
语段n
end
expr=scalar/string
method='Bilinear';
switchmethod
case{'linear','bilinear'}disp('Methodislinear')
case'cubic’
disp('Methodiscubic')
otherwisedisp('Unknownmethod.')
end
六、Matlab脚本文件和M函数文件
M语言的函数
Function[返回变量列表]=函数名(输入变量列表)
%注释
输入、返回变量格式的检测
函数体语句
functiony=mysum(x,n)
%mysum(x,n)calculatesthesumof
iii=0:
n;jjj=1./x.^iii;
y=sum(jjj)
七、Matlab绘图与技巧
数据准备x=0:
pi/50:
2*pi;y=sin(x);
基本语句Plot(x1,y1,‘-b*’,x2,y2,……)
标注
x=0:
.2:
12;
plot(x,sin(x),x,cos(x));
title('标注示例')
xlabel('时间')
ylabel('响应')
legend('Sine','Cosine');
Polar(theta,rho)
Loglog(x,y)
Semilog(x,y)
Subplot(m,n,k),plot()
例:
Subplot(211),plot(x1,y1)
Subplot(212),plot(x2,y2)
隐函数绘图
Ezplot(‘函数表达式’,[绘图区间])
----Easytousefunctionplotter
Ezplot(‘x^2+3*y^2-5’,[-pi/4,pi,-1,3])
Axis([-4,4,-4,4])
三维绘图三维曲线(弹道曲线)
x=f1(t),y=f2(t),z=f3(t)
Plot3(x1,y1,z1,‘s1’,x2,y2,z2,‘s2’,……)
t=0:
pi/50:
2*pi;x=sin(t);y=cos(t);z=t;
h=plot3(x,y,z)
网线图mesh(x,y,z)
曲面图Surf(x,y,z,c)
Mesh(x,y,z,c)
x1m,y1n,z1mxn
[x,y]=meshgrid(-3:
0.1:
3,-2:
0.1:
2)
z=x.^2+y.^2;
mesh(x,y,z);surf(x,y,z)
八、提高执行效率
测定执行时间
tic
x=0;
fori=1:
1000
x=x+sin(i);
end
toc
elapsed_time=0.1100
加快执行速度
避免使用循环
i=1:
10000;mysum=sum(1./2.^i+1./3.^i)
循环变量设置
外循环次数少,内循环次数多
预先定维
H=zeros(10000,5)
内在函数优先
选择合适的算法
使用Mex技术
第二部分Matlab提高篇
主要内容:
1.线性代数
2.微积分
3.插值与拟合
4.数理统计
5.优化
6.微分方程数值解法
7.控制系统工具箱
8.符号数学
线性代数
AX=B
X=A-1B------X=A\B
矩阵的特征参数
A=[12;34]
秩
Rank(a)=2
行列式
Det(a)-determinant=-2
特征多项式的系数向量(降幂次)
特征根
C=Ploy(a)=det(sI-a)=1–5-2
Roots(c)=[5.3723,-0.3723]
范数
Norm(A)=5.4650
微积分问题
函数表达
1、Functiony=myfun(x)
y=exp(x)
Area=quad(‘myfun’,0,+1)=1.7183
2、myfun1=inline('exp(x)')
quad(myfun1,0,1)=1.7183
3、quad('exp(x)',0,1)
数值差分
Diff([12;34])=[22]
数值积分
[y,n]=quad(F,a,b,tol),tol=1e-3
多重积分
Y=dblquad(F,x_m,x_M,y_m,y_M,tol)
插值与拟合
插值
Yi=Interp1(x,y,xi,方法)方法=’linear’,‘cubic’,‘spline’
x=-3:
3;
y=[-1;-1;-1;0;1;1;1];
xi=-3:
.5:
3;
yi=interp1(x,y,xi,'spline')
plot(x,y,'o',xi,yi,'*')
拟合-多项式
P=Ployfit(x,y,n),n次多项式拟合,最小二乘意义
x=-3:
3;
y=[-1-1-10111];
p=polyfit(x,y,3)
t=-3:
.1:
3;
yy=polyval(p,t);
plot(x,y,'o',t,yy)
p=[-0.05560.00000.8175-0.0000]
Polyval:
多项式求值
Y=P
(1)*X^N+P
(2)*X^(N-1)+...+P(N)*X+P(N+1)
拟合-样条
spline(x,y)—返回三次样条的分段多项式
x=-3:
3;y=[-1-1-10111];
cs=spline(x,y);
xx=-3:
.1:
3;
plot(x,y,'o',xx,ppval(cs,xx),'-');
ppval分段多项式求值。
数理统计
均匀分布
rand(n,m),[01]区间
X=Randn(100000,1);
Mean(x)=0.0033
Std(x)=1.0040
正态分布均值=0,方差=1
randn(n,m)
均值
mean(x)
标准差
std(x)
优化
最小二乘法解非线性方程
F---一个非线性方程-描述一个曲面,
X0=初始值,求F(x)=0的解。
x=fsolve(F,x0,OPT),
包含多个版本的算法,需要使用optimset来区分。
functionF=myfun(x)
F=sin(x);
x=fsolve(@myfun,[-.234],optimset('Display','iter'))
03.143.14
fun=inline('sin(3*x)');
x=fsolve(fun,[14],optimset('Display','off'));
常微分方程的数值解法
常微分方程求解函数
Ode45
非刚性
Runge-Kutta
Ode23
非刚性
Runge-Kutta
Ode113
非刚性
Adams
ode15s
刚性和DAE
变阶次方法
ode23s
刚性
低阶次方法
Ode23t
中度刚性和DAE
梯形法
Ode23b
刚性
梯形-BDF2
DAE-微分代数方程
调用方法:
[t,x]=ode45(函数名,tspan,x0,选项,附加常数)
例:
建立一个函数并保存在文件中
functionxdot=lorenzeq(t,x)
xdot=[-8/3*x
(1)+x2*x3;
-10*x2+10*x3;
-x1*x2+28*x2-x3];
编制主程序
t_final=100;
x0=[0;0;1e-10];
[t,x]=ode45(@lorenzeq,[0,t_final],x0);
plot(t,x)
控制系统工具箱-线性系统
模型输入
传递函数
G=tf(num,den)
采样传递函数
G=tf(num,den,ts)
S=ZPK('s')
H(s)=.1*(s+1)/(s+2)
零极点输入
G=zpk(z,p,k)
采样传递函数
G=zpk(z,p,k,ts)
Z=ZPK('z',TS)
z=zpk('z',0.1);
H=(z+.1)/(z^2+.6*z+.09)
状态方程
G=ss(a,b,c,d)
模型转换
连续-离散
sysd=c2d(sysd,ts,method)
离散-连续
sysc=d2c(sysd,method)
任意-零极点
SYS=ZPK(SYS)
转换成TF
tf(sys)
转换成SS
ss(g)
模型的运算
串联
G=G1*G2
并联
G=G1+G2
反馈
G=feedback(G1,G2)
时域响应
阶跃响应
step(g)
冲击响应
impulse(g)
t=0:
0.01:
5;u=sin(t);lsim(sys,u,t)
lsim
initial(sys,x0,tfinal)
initial
频率特性和根轨迹
波特图
bode
幅值和相位裕度
margin
奈魁斯特图
nyquist
根轨迹
rlocus
尼科尔斯图
nichols
例题:
已知单位反馈系统的开环传递函数为
(K=10,T=2),求
a.系统的闭环传递函数。
b.系统的单位阶跃响应。
c.绘制系统的波特图。
d.绘制系统关于K的根轨迹。
g=zpk([],[0-.5-1],5)
gc=feedback(g,1)
step(gc,15)
figure
bode(g)
figure
rlocus(gc)
figure
nyquist(g,{.5,1000})
符号数学工具箱(SymbolicMathToolBox)
准备
Simsx,t,…
微积分
Limit()
LIMIT(F,x,a)求F当x->a的极限
省略x->0
>>symsx;limit(sin(x)/x)
1
int()
>>symsx;int(1/(1+x^2))
atan(x)
Taylor()
>>symsx;taylor(exp(-x))
1-x+1/2*x^2-1/6*x^3+1/24*x^4-1/120*x^5
线性代数
Inv()
>>symst;a=[t2*t;2*t,t]
>>inv(a)
[-1/3/t,2/3/t]
[2/3/t,-1/3/t]
Det()
>>det(a)
-3*t^2
解方程
Solve()
>>solve('p*sin(x)=r')
ans=asin(r/p)
dsolve
>>dsolve('Dx=-a*x')
ans=exp(-a*t)*C1
>>x=dsolve('Dx=-a*x','x(0)=1')
x=exp(-a*t)
Fourier
Fouriertransform
返回w的函数
symst;
fourier(sin(t))
ans=i*pi*(-Dirac(w-1)+Dirac(w+1))
Ifourier
InverseFouriertransform
Ilaplace
InverseLaplacetransform
>>Symss;ilaplace(1/(s-1))
exp(t)
Iztrans
Inversez-transform
>>Symsz;iztrans(z/(z-2))
2^n
Laplace
Laplacetransform
>>Symst;Laplace(t+sin(t))
1/s^2+1/(s^2+1)
Ztrans
z-transform
>>Symsz;ztrans(2^n)
z/(z-2)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Matlab 讲座