




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章MATLAB基本程序设计
MATLAB程序设计方式:■草稿纸方式(命令行方式)■基本程序设计(结构程序设计)■图形界面程序设计(面向对象)MATLAB基本程序设计要点:■MATLAB的程序文件名以m作为扩展名■通过Edit命令进入m文件的编辑
■一个完整的应用程序由主程序和函数组成第2章第二讲MATLAB基本程序设计
主要内容(4)■M文件■输入输出语句■程序控制语句■程序的调试2.1M文件一、主程序(脚本)1、一个主程序的例子编写一个双音频程序,显示某个键的波形:(Hz)120913361477697123770456852789941*0#2.1M文件设主程序文件名为mydt.m%产生一个双音频
fs=8000;t=(0:1/fs:0.2);f1=697;f2=1209;%键1对应的两个频率y=sin(2*pi*f1*t)+sin(2*pi*f2*t);plot(t,y);wavplay(y,fs)2.1M文件2、主程序的组成▓帮助段(带注释符%的行)▓程序段
如果有第一行(function),则主程序为函数文件形式
,变量不保存到工作区中,为局部变量.
如果没有第一行(function),则主程序为命令文件形式,相当于各命令行的集合。变量保存到工作区中.2.1M文件3、几点说明▓文件名不能为汉字或数字开头▓注释符%后面的文字不执行▓程序的每一行的执行相当于在命令行执行▓一行可以写多条语句,以‘,’或‘;’隔开;一行写不下时,以‘…’续行▓对于命令文件形式,建议在程序段开始用
clear,closeall等命令清除以前的变量▓对于函数文件形式,程序中的所有变量均为局部变量。2.1M文件二、函数
函数是用用来定义子程序的。主程序实际上也是一个函数(由MATLAB调用)。1、函数头的形式:
function函数名()(无变量传递)function函数名(var1,var2,…)(无返回值)function[y1,y2,…]=函数名(var1,var2,…)2.1M文件2、函数的位置▓函数可以是一个单独的文件(文件名和函数名应相同)▓函数也可以放在主程序的后面。
2.1M文件3、举例根据t,f1,f2生成双音频的函数functionfy=mydtones(t,f1,f2)fy=sin(2*pi*f1*t)+sin(2*pi*f2*t);该函数可以是单独文件或在主程序后面。例如:mydt1.m2.1M文件%程序mydt1.m产生一个双音频clc;clearall;fs=8000;t=(0:1/fs:0.2);y=dtones(t,697,1209);%键1对应的两个频率plot(t,y);wavplay(y,fs);%函数functionfy=dtones(t,f1,f2)fy=sin(2*pi*f1*t)+sin(2*pi*f2*t);2.1M文件%程序文件mydt1.m产生一个双音频clc;clear;closeall;fs=8000;t=(0:1/fs:0.2);y=dtones(t,697,1209);plot(t,y);wavplay(y,fs);%函数文件dtones.mfunctionfy=dtones(t,f1,f2)fy=sin(2*pi*f1*t)+sin(2*pi*f2*t);2.1M文件4、全局变量:如果在主程序和函数中使用同一变量,应定义全局变量。globalval1val2…%程序文件mydt2.m产生一个双音频clc;clear;closeall;globaltfsfs=8000;t=(0:1/fs:0.2);y=dtones1(697,1209);plot(t,y);%函数文件dtones1.mfunctionfy=dtones1(f1,f2)globaltfsfy=sin(2*pi*f1*t)+sin(2*pi*f2*t);wavplay(fy,fs);%程序文件名为mean.mfunctiony=mean(x)%mean求平均值%对于向量,返回向量x中各元素的平均值%对于矩阵,返回包含各列元素平均值的行向量[m,n]=size(x);ifm==1m=n;end;y=sum(x)/m;>>helpmeanmean求平均值对于向量,返回向量x中各元素的平均值对于矩阵,返回包含各列元素平均值的行向量
例:编写函数文件求半径为r的圆的面积和周长。函数文件如下:function[s,p]=fcircle(r)%CIRCLEcalculate%r圆半径%s圆面积%p圆周长s=pi*r*r;p=2*pi*r;函数调用的一般格式是:
[输出实参表]=函数名(输入实参表)
要注意的是,函数调用时各实参出现的顺序、个数,应与函数定义时形参的顺序、个数一致,否则会出错。函数调用时,先将实参传递给相应的形参,从而实现参数传递,然后再执行函数的功能。例:函数文件examp.m:functionfout=charray(a,b,c)ifnargin==1fout=a;elseifnargin==2fout=a+b;elseifnargin==3fout=(a*b*c)/2;end
命令文件mydemo.m:x=[1:3];y=[1;2;3];examp(x)examp(x,y')examp(x,y,3)2.2输入输出语句(人机交互)1、屏幕输入格式:x=input(‘提示符’)----等待输入数据
x=input(‘提示符’,‘s’)----等待输入字符串
xm=input('What''syourname?','s');
2.2输入输出语句(人机交互)2、菜单命令格式:x=menu(‘标题’,‘菜单项1’,菜单项2’,…)返回菜单序号。例如:x=menu(‘Title’,’Plus’,’Minus’)2.2输入输出语句(人机交互)3、暂停格式:pause------等待敲击键盘
pause(n)-----等待n秒4、交出键盘格式:keyboad---程序执行到该命令时暂停,在屏幕上显示K,这时用户可输入命令,查看中间结果,输入return命令,则程序继续执行2.2输入输出语句(人机交互)5、中止执行6、显示格式:display(x)-----在命令行显示x的内容格式:^C---强行停止程序的执行,回到命令行2.2输入输出语句(人机交互)7、打印格式:print---------打印当前绘图print-dbitmap文件名
---------将绘图转为图象文件
-djpeg
例:输入x,y的值,并将它们的值互换后输出。程序如下:
x=input('Inputxplease.');y=input('Inputyplease.');z=x;x=y;y=z;disp(x);disp(y);例:求一元二次方程ax2+bx+c=0的根。程序如下:a=input('a=?');b=input('b=?');c=input('c=?');d=b*b-4*a*c;x=[(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a)];disp(['x1=',num2str(x(1)),',x2=',num2str(x(2))]);例:分别建立命令文件和函数文件,将华氏温度f转换为摄氏温度c。程序1:首先建立命令文件并以文件名f2c.m存盘。clear;%清除工作空间中的变量f=input('InputFahrenheittemperature:');c=5*(f-32)/9然后在MATLAB的命令窗口中输入f2c,将会执行该命令文件,执行情况为:InputFahrenheittemperature:73c=22.7778程序2:首先建立函数文件f2c.m。functionc=f2c(f)c=5*(f-32)/9然后在MATLAB的命令窗口调用该函数文件。clear;y=input('InputFahrenheittemperature:');x=f2c(y)输出情况为:InputFahrenheittemperature:70c=21.1111x=21.11112.3程序控制语句任何计算机语言都有三种基本结构,即:►顺序结构:无控制语句►分支结构:if,switch►循环结构:for,while2.3程序控制语句1、顺序结构:无控制语句
按照顺序从头至尾地执行程序中的各条语句。顺序结构一般不包含其他任何子语句或控制语句。例如:n=0:100;x=sin(2*pi*0.01*n);plot(x);holdonstem(x,’r’);grid2.3程序控制语句►分支结构:if,switchif和switch语句用于根据条件选择执行相应的语句。1、if语句(适合分支少)if语句根据逻辑表达式的值来确定是否执行紧接的语句体。常见的调用格式有:2.3程序控制语句格式1:if表达式语句
end格式2:if表达式语句1else
语句2end2.3程序控制语句格式3:
if表达式1
语句1elseif表达式2
语句2else
语句3end例如:判断输入数的奇偶性n=input(‘n=’);ifrem(n,2)==0display(‘n是偶数’)elsedisplay(‘n是奇数’)end2.3程序控制语句2、switch语句(适合分支多)格式:
switch表达式(标量或表达式)
case值1
语句1case值2
语句2…otherwise
语句nend2.3程序控制语句switch语句和if语句类似。Switch语句根据变量或表达式的取值不同分别执行不同的命令。2.3程序控制语句例如:根据菜单选择显示不同的函数x=menu('波形','正弦','余弦','正切','余切');switchxcase1ezplot('sin')case2ezplot('cos')case3ezplot('tan')case4ezplot('cot')end2.3程序控制语句3、for语句格式:for变量=初值:增量:终值语句
end
例如:求100!
x=1;fork=1:1:100x=x*k;endx例:已知,当n=100时,求y的值。程序如下:
y=0;n=100;fori=1:ny=y+1/(2*i-1);endy
在实际MATLAB编程中,采用循环语句会降低其执行速度,所以前面的程序通常由下面的程序来代替:
n=100;i=1:2:2*n-1;y=sum(1./i);yfor语句更一般的格式为:
for循环变量=矩阵表达式循环体语句
end执行过程是依次将矩阵的各列元素赋给循环变量,然后执行循环体语句,直至各列元素处理完毕。
例:写出下列程序的执行结果。
s=0;a=[12,13,14;15,16,17;18,19,20;21,22,23];
fork=as=s+k;enddisp(s');2.3程序控制语句4、while语句格式:while表达式语句
end例如:计算1,…,1000的和x=1;whilex<=1000x=x+1;end表达式成立(为真)时,一直执行语句,否则跳出循环.例如:求Matlab中的最大实数。
例:从键盘输入若干个数,当输入0时结束输入,求这些数的平均值和它们之和。程序如下:sum=0;cnt=0;val=input('Enteranumber(endin0):');while(val~=0)sum=sum+val;cnt=cnt+1;val=input('Enteranumber(endin0):');endif(cnt>0)summean=sum/cntend2.3程序控制语句5、break和continue语句用于循环语句(for,while):break:用于跳出循环continue:跳过后面的语句继续循环2.3程序控制语句例:输出100到200之间第一个能被7整除的数fori=100:200ifrem(i,7)~=0continueendbreakendi循环的嵌套如果一个循环结构的循环体又包括一个循环结构,就称为循环的嵌套,或称为多重循环结构。
例:若一个数等于它的各个真因子之和,则称该数为完数,如6=1+2+3,所以6是完数。求[1,500]之间的全部完数。
form=1:500s=0;fork=1:m/2ifrem(m,k)==0s=s+k;endendifm==sdisp(m);endend
一般来说,应用程序的错误有两类,一类是语法错误,另一类是运行时的错误。语法错误包括词法或文法的错误,例如函数名的拼写错、表达式书写错等。程序运行时的错误是指程序的运行结果有错误,这类错误也称为程序逻辑错误。2.4程序的调试一、调试注意事项■MATLAB的查错能力较强,一般语法错误,会直接报告。■如果语法没有出错,而得不到正确结果时,一般需要调试。■对于较小的程序只要仔细检查程序即可■对于比较大的程序,建议编写一部分,检查一部分。■使用调试命令2.4程序的调试二、程序的调试
1、利用调试命令例如:设置断点(dbstop)单步执行(dbstep)。调试命令放在通用命令库中。使用不方便。2.4程序的调试二、程序的调试2、利用m文件编辑的调试菜单
Debug:Breakpoint:例如:调试mydt.m
实验三内容回顾MATLAB基本程序设计:1M文件2输入输出语句3程序控制语句4程序的调试第2章第三讲MATLAB图形用户界面设计
图形用户界面(GUI,GraphicUserInterface)是指包含图形对象的用户界面.
图形用户界面是现代程序设计的基本要求。与图形用户界面有关的函数库:GUI工具库(GUITOOLS)
■句柄图形■图形用户界面设计方法■图形界面对话框设计■生成独立的EXE文件主要内容6.1句柄图形一、句柄图形的概念句柄图形(HandleGraphics):一个图形界面由若干个对象(object)组成,每一个对象都有一个唯一的标识,这个标识称为对象的句柄(Handle)。
每一个对象,又可以包含若干个子对象,子对象的上一级称为父对象。二、句柄图形的层次结构6.1句柄图形
利用对象的句柄和层次关系可以修改对象的属性
(如:线的颜色等)。
获取图形句柄的函数有:
■gcf:获取当前图形窗口的句柄
■gca:获取当前坐标轴的句柄
■gco:获取当前图形对象(被鼠标最近点击)的句柄
三、利用句柄获取和设置对象的属性6.1句柄图形三、利用句柄获取和设置对象的属性1、对象的属性(Property)
任何图形对象都有很多属性,例如:对于线对象,有颜色、线形等属性。6.1句柄图形
2、获取对象的属性----get格式:
p=get(h)-----返回对象h的所有属性值
p=get(h,’属性名’)-----返回对象h的某个属性值
例如:h=plot([121])(返回线的句柄)p=get(h);p=get(h,’color’)6.1句柄图形3、设置对象的属性----set格式:set(h,’属性名1’,’属性名值1’,
’属性名2’,’属性名值2’,…)例如:set(h,’color’,[1,0,0],’linewidth’,10)set(gca,’color’,[0,1,0]);
set(gcf,’color’,[0,0,0])6.2图形用户界面设计方法一、设计入门1、图形用户界面设计有两种方式:
■一是基于函数的编程方式(如:利用uimenu()函数创建一个菜单利用uicontrol()函数创建一个控件)
■二是基于GUI方式(推荐的方式)6.2图形用户界面设计方法一、设计入门2、GUI方式的进入(1)进入GUI的命令是:guide6.2图形用户界面设计方法(2)设置应用选项(Applicationoptions)(右键属性)6.2图形用户界面设计方法
3、一个例子:
设计一个图形界面包含4个函数按键和一个坐标轴(Axes),按一个键则显示该函数的波形。
步骤如下:(1)进入guide,放置坐标轴和按钮,并修改按钮的属性(名称string,字体font)。6.2图形用户界面设计方法
3、一个例子:
(2)保存(myfun),图形界面信息保存在以.fig结尾的文件中(myfun.fig);同时生成一个同名的m文件(myfun.m).(3)编写回调函数(事件)(4)运行6.2图形用户界面设计方法二、菜单和控件
MATLAB图形界面包含两类主要对象:菜单和控件(按钮等)
1、菜单创建菜单6.2图形用户界面设计方法
2、控件
所有控件都有自己的属性和回调函数,可根据需要修改。
开关控件复选框控件文本显示控件图文框控件下拉列表框控件按钮控件单选按钮控件文本编辑控件滚动条控件列表框控件坐标轴控件6.2图形用户界面设计方法三、回调函数
在图形界面保存时,自动生成一个m文件,所有对象的回调函数头都放在m文件的后边。只需添入代码即可。
6.2图形用户界面设计方法
编写回调函数需要注意:1、对象的句柄:回调函数的自变量中已有一个handles(所有对象的handle),具体到某个对象的handle可使用:handles.tag
(tag是对象的一个属性,表示对象标识)例如:标识(tag)为axes1的坐标轴的句柄为:handles.axes16.2图形用户界面设计方法2、属性的获取和设置
利用get和set例如:添加一个Edit控件和一个按钮,每按一次按钮,Edit的数加1。按钮的回调函数为:
a=get(handles.edit1,'string');b=str2num(a);b=b+1;c=num2str(b);set(handles.edit1,'string',c);6.2图形用户界面设计方法3、坐标轴的指定
axes(h)(h为坐标轴的句柄)4、使用其它回调函数的变量必须定义为全局变量6.2图形用户界面设计方法四、图形界面设计原则1、简单性(Simplicity):力求简洁大方2、一致性(Consistency):界面风格要一致3、习常性(Familiarity):符合习惯6.2图形用户界面设计方法五、图形界面设计的一般步骤
1、分析要求,明确设计任务2、在草稿纸上给出界面草图,反复审查3、按构思的草图,设计界面4、编写回调程序,逐项调试6.3图形界面对话框设计一、专用对话框1、信息提示格式:msgbox(‘显示内容’,‘标题’)
对话框只有一个ok按钮例如:msgbox(‘保存完毕’,‘提示’)6.3图形界面对话框设计2、问题对话框格式:q=questdlg(‘显示内容’,‘标题’)
对话框有Yes/No/Cancel按钮,
返回点击的按钮(Yes/No/Cancel)例如:q=questdlg(‘是否保存?’,‘提示’)(q=‘Yes’)其它的对话框还有:帮助提示helpdlg等。6.3图形界面对话框设计二、标准对话框1、打开文件对话框格式:fn=uigetfile(‘通配符’,‘标题’)fn为返回的文件名例如:fn=uigetfile('*.wav','OpenFile');6.3图形界面对话框设计2、保存文件对话框格式:fn=uiputfile(‘初始文件名’,‘标题’)fn为返回的文件名
fn=uiputfile(‘test.wav',‘SaveFile');6.3图形界面对话框设计3、设置颜色对话框(uisetcolor)4、设置字体对话框(uisetfont)三、对话框例子打开一个wav文件,显示其波形(mysound.m))6.4生成独立的EXE文件步骤:1、安装C或C++编译器如:VC++,C++Builder2、使用mbuild–setup建立环境3、使用mcc–BsqlcppFilename
创建独立的应用程序4、在没有安装MATLAB的计算机上运行应用程序,还需要携带一些库文件(放在matlab安装目录的extern\lib\win32中mglinstaller.exe)
实验四内容回顾1、句柄图形2、图形用户界面设计方法3、图形界面对话框设计4、生成独立的EXE文件第7章MATLAB符号数学工具箱MATLAB工具箱主要有2类:■通用工具箱:(可用于各个领域)
◆符号数学工具箱(Symbolic)与加拿大Maple公司合作,内核使用Maple的符号计算引擎。
◆系统仿真工具箱(Simulink)■专用工具箱:(只用于相关领域)(已有30多个工具箱)主要内容■符号的创建■符号的基本运算■符号的简化和替换■符号的微积分■符号方程的求解■符号积分变换7.1符号的创建一、符号变量的概念MATLAB中的变量有两类::
■数值变量:参与运算和运算结果均为数值例如:a=1,a+a=2■符号变量:参与运算和运算结果均为符号例如:a=sym(‘b’),a+a=2*b7.1符号的创建二、符号变量的创建
1、格式1:s=sym(‘符号表达式’)
符号变量s的值为‘符号表达式’例如:s=sym(‘sin(x)+x’)7.1符号的创建
2、格式2:symss1s2…
定义多个符号变量。相当于:s1=sym(‘s1’);s2=sym(‘s2’)…
例如:7.1符号的创建注意:■符号表达式对空格敏感,不要在符号间加空格■含有符号变量的表达式一定是一个符号表达式■注意引号的使用7.1符号的创建
三、符号表达式的种类1、符号函数可以是任意函数或多项式例如:7.1符号的创建例如:◆代数方程:eq=sym(‘a*x^2+b*x+c=0’)◆一阶微分方程:eq=sym(‘Dy-y=x’)(Dy=dy/dt或dy/dx)◆二阶微分方程:eq=sym(‘D2y-y=x’)(D2y=d2y/dt2或d2y/dx2)2、符号方程
可以是线性方程、非线性方程、代数方程和常微分方程等。7.1符号的创建3、符号矩阵
单一符号表达式相当于1*1矩阵。符号变量可以是一个符号矩阵。例如:a=sym(‘[x+1,y+2;sin(x),cos(y)]’)生成一个2*2的符号矩阵,a(1,2)=’y+2’7.2符号的基本运算一、符号矩阵四则运算同矩阵的四则运算基本相同,参与运算的是符号。1、加减法:对应行列相加减例如:a=sym(‘[xy;xy]’);b=sym(‘[x^2y^2;x^2y^2]’)a+b=[x+x^2;y+y^2;x+x^2;y+y^2]7.2符号的基本运算2、乘法:元素相乘(.*)和矩阵相乘(*)例如:a.*b=[x^3y^3;x^3y^3]a*b=[x^3+y*x^2x*y^2+y^3;x^3+y*x^2x*y^2+y^3]7.2符号的基本运算3、除法:元素相除(.\./)和矩阵相除(/)例如:7.2符号的基本运算符号的运算也可使用以下函数:
symadd(s1,s2)symsub(s1,s2)symmul(s1,s2)symdiv(s1,s2)sympow(s,p)7.2符号的基本运算二、符号矩阵代数运算包括行列式、矩阵的逆、幂运算等同数值矩阵。三、符号运算的准确解例如:在数值运算中:1/2+1/3=0.83333333
在符号运算中:Sym(‘1/2’)+sym(‘1/3’)=5/6
也可使用强制求解函数:vpa(s)例如:vpa(‘5/6’)=0.833333337.2符号的基本运算四、符号函数计算器
函数计算器:funtool7.3符号的简化和替换一、因式分解格式:factor(s)---对符号表达式s进行因式分解例如:factor(sym(‘x^3+1’))=(x+1)*(x^2-x+1)factor(sym(‘a^2-b^2’))=(a-b)*(a+b)7.3符号的简化和替换二、表达式的展开格式:expand(s)---对符号表达式s进行展开例如:symsx;expand((x+1)^3)=x^3+3*x^2+3*x+1expand(sym(‘sin(x+y)’))=sin(x)*cos(y)+cos(x)*sin(y)7.3符号的简化和替换三、同类项合并格式:collect(S)---对缺省变量进行同类项合并
collect(S,v)---对变量v进行同类项合并例如:7.3符号的简化和替换四、表达式的化简格式:simplify(S)------对符号表达式进行化减例如:7.3符号的简化和替换五、分式通分格式:[N,D]=numden(S)----对S进行通分,
N为分子,D为分母例如:7.3符号的简化和替换六、符号表达式的替换
r=subs(s,old,new)
用new代替符号表达式s中的old。例如1:symsxs=(x+1)r=subs(s,x,x^2)(r=x^2+1)7.3符号的简化和替换例如2:symsxs=(x+1)^2+1/(x+1)+1
r=subs(s,x+1,x)(r=1/x+x^2+1)7.3符号的简化和替换七、符号表达式的求值
1、求准确值用数值符号替换表达式中的变量;例如:symsxs=1/(x+1)sv=subs(s,x,‘2’)
(1/3)7.3符号的简化和替换七、符号表达式的求值
2、求值用数值替换表达式中的变量;
sv=subs(s,x,2)
(0.33333333)7.4符号的微积分一、符号极限格式:limit(s,a)计算符号s趋近a的极限。
limit(s,x,a)计算符号s中x趋近a的极限。
例如:symsxlimit(sin(x)/x,0)
(1)7.4符号的微积分二、符号微分1、格式1:diff(s)
对符号表达式s求缺省变量的微分例如:diff(‘x^2’)=2*x;diff(‘sin(x^2)’)=2*cos(x^2)*x2、格式2:diff(s,v)
对符号表达式的变量v求微分例如:diff(‘x^2+y^3’,’y’)=3*y^27.4符号的微积分二、符号微分3、格式3:diff(s,v,n)
对符号表达式的变量v求n阶微分例如:diff(‘x^2+y^3’,’y’,2)=6*y7.4符号的微积分
三、符号积分1、格式1:int(s)
对符号表达式的缺省变量求积分
例如:int(‘x+1’)=1/2*x^2+xint(‘cos(x)+a^x’)=sin(x)+1/log(a)*a^x2、格式2:int(s,v)
对符号表达式的变量v求积分例如:int(‘x+y’,’y’)=x*y+1/2*y^27.4符号的微积分3、格式3:int(s,v,a,b)
对符号表达式的变量v在(a,b)区间求定积分例如:int(‘x+y’,’y’,0,1)=x+1/2int(‘x+1’,0,1)=3/2计算二重不定积分:int(int('x*exp(-x*y)','x'),'y')=1/y*exp(-x*y)7.5符号方程的求解一、代数方程的求解1、格式1:solve(f)----求单个方程的解例如:symsxsolve(‘a*x^2+b*x+c=0’)
ans=[1/2/a*(-b+(b^2-4*a*c)^(1/2))][1/2/a*(-b-(b^2-4*a*c)^(1/2))]例如:symsx;solve(‘sin(x)=cos(x)’)
(1/4*pi)7.5符号方程的求解2、格式2:solve(f1,f2,...,fn)
------对缺省变量解方程组例如:symsxyz;[x,y,z]=solve(‘x+y+z=1’,’x+2*y-z=3’,’x-y-z=6’)
(x=7/2y=-1z=-3/2)3、格式3:solve(f1,f2,...,fn,’v’)
-----对变量v解方程(组)例如:symsxyz;[x,y]=solve(‘x+y+z=1’,’x+2*y-z=3’,’x,y’)
(x=-3*z-1y=2*z+2)
7.5符号方程的求解二、常微分方程的求解格式:dsolve(f1,f2,...,fn,’C’,’V’,)
对微分方程f1,…,fn(组)的变量V求解,
C为初始条件,V为中间变量(缺省为t),
V和C可以缺省。7.5符号方程的求解例如1:dsolve(‘Dx=-a*x’)
(x=C1*exp(-a*t))(一阶微分方程)例如2:dsolve('Dx=-a*x','x(0)=1','s')x=exp(-a*s)7.5符号方程的求解例如3:(二阶微分方程)dsolve('D2y=-a^2*y','y(0)=1','Dy(pi/a)=0')
(y=cos(a*t))例如4:y=dsolve('D2y+2*Dy+2*y=0','y(0)=1','Dy(0)=0',’x’)
(y=exp(-x)*cos(x)+exp(-x)*sin(x))7.6符号积分变换一、Fourier变换1、Fourier变换格式:fourier(S)
对符号表达式(函数)进行傅立叶变换例如:fourier(sym(‘1’))=2*pi*Dirac(w)7.6符号积分变换一、Fourier变换2、Fourier反变换格式:ifourier(S)
对符号表达式(函数)进行傅立反变换例如:ifourier(sym(‘1/(1+j*w)’),’t’)=exp(-t)*Heaviside(t)(即u(t))7.6符号积分变换二、Laplace变换1、Laplace变换(双边)
格式:laplace(S)
对符号表达式(函数)进行Laplace变换例如:laplace(sym(‘1’))=1/s7.6符号积分变换二、Laplace变换2、Laplace反变换格式:ilaplace(S)对符号表达式(函数)进行Laplace反变换
例如:ilaplace(sym(‘1/(s+1)’))=exp(-t)7.6符号积分变换三、Z变换1、Z变换
格式:ztrans(S)
对符号表达式(函数)进行Z变换
例如:ztrans(sym(‘1’))=z/(z-1)7.6符号积分变换三、Z变换2、Z反变换
格式:iztrans(S)
对符号表达式(函数)进行Z反变换
例如:iztrans(sym(‘z/(z-2)’)=2^n
实验五内容回顾1、符号的创建2、符号的基本运算3、符号的简化和替换4、符号的微积分5、符号方程的求解6、符号积分变换第8章Simulink仿真
本章要点
Simulink系统的基本模块仿真模型的编辑仿真参数的设置Simulink是MATLAB环境下对动态系统进行建模、仿真和分析的一个软件包。该系统的两个主要功能就是Simu(仿真)和Link(连接)。一、Simulink的启动和退出1.Simulink的启动在MATLAB操作桌面下,单击工具栏中的图标或在命令窗口键入命令Simulink,就会弹出一个名为“SimulinkLibraryBrowser”的浏览器窗口。8.1Simulink系统的基本模块2.模型的创建
在创建新模型时,单击SimulinkLibraryBrowser浏览器上方工具栏内的“建立新模型”图标、或者单击MATLAB命令窗口File→New→Model选项,会弹出一个名为Untitled(无标题)的空白窗口,所有控制模块都创建在这个窗口中。
二、Simulink基本模块
在Simulink的模块库浏览器窗口左侧的Simulink选项上单击鼠标右键,单击弹出菜单的Openthe‘Simulink’Labray选项,可以打开Simulink模块库窗口。
1.信号源模块(Sources)
双击Simulink模块库窗口中的Sources模块,即可打开信号源模块。
信号源模块
模块功能模块功能In1创建输入端Ground接地Constant常数Clock当时时间SignalGenerator信号发生器DigitalClock数字时钟Ramp斜波FromFile从文件读数据SineWave正弦波FromWorkspace从工作空间读数据Step阶跃信号RandomNumber随机信号RepeatingSequence重复序列UniformRandomNumber均匀随机信号PulseGenerator脉冲发生器Band-LimitedWhiteNoise带限白噪声ChirpSignal快速正弦扫描2.输出模块(Sinks)模块功能模块功能Scope示波器ToFile输出到文件FloatingScope可选示波器ToWorkspace输出到工作空间XYGraphXY关系图Terminator通用终端Outl创建输出端StopSimulation输出不为0时停止仿真Display实时数值显示3.连续系统模块(Continuous)连续系统模块提供积分、微分等连续系统仿真的常用原件。
连续系统模块的功能
模块功能模块功能Integrator积分Zero-Pole零极点Derivative微分Memory延时输出State-Space状态方程TransportDelay传输延时TransferFcn传递函数VariableTransportDelay可变传输延时4.离散系统模块(Discrete)
离散系统模块提供了滤波器、传递函数等离散系统仿真模块。
离散系统模块的功能模块功能模块功能Zero-OrderHold零阶保持器DiscreteFilter离散滤波器UnitDelay单位延时采样保持DiscreteTransferFcn离散传递函数Discrete-TimeIntegrator离散时间积分DiscreteZero-Pole离散零极点DiscreteState-Space离散状态方程First-OrderHold一阶保持器8.数学运算模块(MathOperations)
数学运算模块提供了基本数学运算函数、三角函数、复数运算函数以及矩阵运算函数。数学运算模块的功能模块功能模块功能Sum求和RoundingFunction取整函数Product积或商CombinatorialLogic逻辑真值表DotProduct点积LogicOperator逻辑算子Gain常数增益BitwiseLogicalOperator位逻辑算子SliderGain可变增益RelationalOperator关系算子MatrixGain矩阵增益ComplextoMagnitude-Angle复数的模和辐角MathFunction数学运算函数Magnitude-AngletoComplex模和辐角合成函数Trigonometricfunction三角函数ComplextoReal-Imag复数的实部和虚部MinMax求最大值Real-ImagtoComplex实部和虚部合成复数Abs求绝对值AlgebraicConstraint强迫输入信号为零Sign符号函数8.2Simulink模块操作
一、模块的编辑处理1.模块的操作(1)添加模块当要把一个模块添加到模型中,先在Simulink模块库中找到它,然后直接将这个模块拖入模型窗口中即可。(2)选取模块当模块已经位于模型窗口中时,只要用鼠标在模块上单击就可以选中该模块,这时模块的四角上出现一些黑色的小方块,这些小方块就是该模块的关键点,拖动这些黑色小方块可以改变模块的大小。2.模块位置和外形的调整(1)调整模块位置(2)调整模块大小(3)调整模块方向(4)调整模块颜色和效果3.模块名的处理(1)改变模块名(2)隐藏模块名(3)改变模块名的位置4.复制和删除模块(1)复制模块(2)删除模块二、模块属性和参数的设置
1.模块参数的设置
Simulink中几乎所有模块的参数(Parameters)都允许用户进行设置,双击要设置的模块就可以打开模块参数设置对话框,不同模块参数设置对话框的项目会不同。2.模块属性的设置
与参数设置对话框不同,所有模块的属性(Properties)设置对话框都是一样的。选定要设置属性的模块,然后单击Edit→BlockProperties…选项;或单击右键在弹出的菜单中选择BlockProperties…选项。该对话框有三个标签:General(通用)、BlockAnnotation(模块注解)和Callbacks(回调函数)。
三、模块间的连线
1.连接两个模块方法是先移动鼠标指向模块的输出端,鼠标的箭头会变成十字形光标,这时按住鼠标左键,拖动鼠标到另一个模块的输入端,当十字形光标出现“重影”时,释放鼠标即完成了连接。2.模块间连线的调整用鼠标单击连线,可以选中该连线。这时会看到线上的一些黑色小方块,这些是连线的关键点。用鼠标按住关键点,拖动即可以改变连线的方向。
3.连线的分支仿真时经常会碰到需要把信号输送到不同的接收端的情况,这时就需要分支结构的连线。可以先连好一条线,然后把鼠标移到支线的起点位置,先按下〈Ctrl〉键,然后按住鼠标,将连线拖到目标模块,松开鼠标和〈Ctrl〉键即可。4.标注连线双击需要标注的连线,可以看到一个文本框,在里面输入标注文字单击回车键确定即可。用鼠标拖动文本框还可以改变标识的位置。另外,在Format→Port/SignalDisplays菜单下还有与连线标注有关的命令:1)SampleTimeColor:将采样时间不同的模块和连线用不同的颜色显示。2)PortDataTypes:在连线上显示传输数据的类型,如double、int32等。5.删除连线如果想要删除某条连线,可单击要删除的连线,此时连线上出现标记点,表示该连线已经被选中,然后单击模型窗口工具栏中的【剪切】按钮或者直接单击键盘上的〈Delete〉键,即可删除该连线。8.3仿真模型的参数设置
选择模型窗口Simulation→ConfigurationParameters…选项,将出现仿真参数配置窗口。仿真参数配置窗口主要分为7个选项卡:Solver(解题器)、DataImport/Export(数据输入/输出),Optimization(优化)、Diagnostics(诊断)、HardwareImplementation(硬件工具)、ModelReferencing(模型引用)和Real-TimeWorkshop(实时工作空间),其中Solver、DataImport/Export和Diagnostics三项经常用到。
一、Solver选项卡
(1)Simulinktime
设置仿真起始时间和停止时间。(2)Solveroptions
仿真解题器的操作。根据类型(Type)的变化分为:Variable-step(变步长算法)和Fixed-step(固定步长算法)。二、DataImport/Export选项卡
DataImport/Export选项卡主要用来设置Simulink与MATLAB工作空间交换数据的有关选项。(1)Loadfromworkspace
从工作空间中载入数据。1)Input:先选中Input核选框,在后面的编辑框内输入数据的变量名。2)Initialstate:表示模块的初始状态。对模块进行初始化时,先选中Initialstate核选框,(2)Savetoworkspace
将输出保存到工作空间。在Savetoworkspace区域中,可以选择的输出选项有:Time(时间),States(状态),Output(输出端口)和Finalstate(最终状态)。(3)Saveoptions保存操作。1)Format:可以选择数组、结构和包含时间的结构三种形式。2)Limitdatapointstolast:用来限定保存到工作空间中的数据量。3)Decimation:从几个数据中抽取一个数据输出。4)Outputoptions:输出操作设置,变步长算法独有。有三种输出方式:Refineoutput(细化输出)、Produceadditionaloutput(产生附加输出)和Producespecifiedoutputonly(仅在指定的时刻产生输出)。三、Diagnostics选项卡
在Diagnostics选项卡中,主要是指定系统对一些事件或仿真过程中可能遇到的情况做出什么反映。反应的类型有以下几种:1)None:不做任何反应,不影响程序运行。2)Warning:显示警告信息,不影响程序的运行。3)Error:显示错误信息,中止运行的程序。
第9章MATLAB在信号与系统中的应用与信号与系统有关的工具箱有:■符号数学工具箱(Symbolic
)■控制系统工具箱(Control
)■信号处理工具箱(Signal)主要内容(9)■信号的时域表示■信号的时域运算与变换■连续系统的时域分析■
离散系统的时域分析
9.1信号的时域表示一、连续信号的表示1、向量表示y=f(t),t=t1:p:t2p为间隔,t1,t2为起始和终止值。p越小越准确例如:9.1信号的时域表示一、连续信号的表示2、符号表示y=sym(‘f(t)’),准确表达例如:9.1信号的时域表示(1)单位阶跃信号:
在符号工具箱中,单位阶跃信号为heaviside(t),
但不能用ezplot绘图,因为ezplot只能绘制在MATLAB和符号工具箱中均存在的函数。
1(t>=0)u(t)=0(t<0)3、常用连续信号举例9.1信号的时域表示
可以在MATLAB中定义一个heaviside(t)函数。
Functiony=heaviside(t)y=(t>=0);然后再利用ezplot绘制,例如:ezplot(‘heaviside(t)’,[-1010])3、常用连续信号举例9.1信号的时域表示(2)单位冲激信号δ(t)=0(t≠0);
用符号工具很难表示,一般是在0附近取一个很小的∆,幅度为1/∆。(3)符号函数可用函数sign(t)ezplot(‘sign(t)’,[-5,5])1(t>0)sgn(t)=-1(t<0)9.1信号的时域表示(4)复指数函数y=exp(a+jw)t
ezplot('real(exp((-0.5+10*j)*t))',[05])ezplot('imag(exp((-0.5+10*j)*t))',[05])9.1信号的时域表示二、离散信号的表示
1、用序列向量表示y=f(n)=[…,f(-1),f(0),f(1),..]需要注意的是:■向量下标是从1开始的,不能为负数,在绘图时必须指定n的范围,且n必须为整数。■绘图时应使用stem绘图命令例如:y=[12321];n=(-2:2),stem(n,y)9.1信号的时域表示二、离散信号的表示2、由连续信号抽样得到对连续信号y=f(t),令t=nTs,y(n)=f(nTs)例如:n=(0:10);y=sin(2*pi*n*0.1);stem(n,y)9.1信号的时域表示
3、常用离散信号(1)单位阶跃信号例如:n=(-5:5);y=heaviside(n);stem(n,y)(2)单位冲激信号例如:y=[00100];n=(-2:2);stem(n,y);1(n>=0)u(n)=0(n<0)1(n=0)δ(n)=0(n≠0)9.2信号的时域运算与变换一、连续信号的时域运算利用符号数学的函数可对连续信号进行运算。1、加减例如:symst;y=sin(2*pi*t)+sin(4*pi*t)ezplot(y)9.2信号的时域运算与变换一、连续信号的时域运算2、相乘例如:symst;y=sin(2*pi*t)*sin(4*pi*t);ezplot(y)y1=sym(‘sin(2*pi*t)*heaviside(t)’);ezplot(y1,[-5,5])9.2信号的时域运算与变换二、连续信号的时域变换
在符号工具箱中有一个函数:subs(S,old,new)
将符号函数S中的old变量替换为new例如:symsab;subs(a+b,a,4)=4+b1、移位例如:y=sym(‘heaviside(t)’);y1=subs(y,t,t-2);ezplot(y1,[-5,5]);9.2信号的时域运算与变换2、反折例如:y1=subs(y,t,-t);ezplot(y1,[-5,5]);3、尺度变换例如:y1=subs(y,t,t/2);ezplot(y1,[-5,5]);9.2信号的时域运算与变换例如:已知y(t)=(1+t/2)*[u(t+2)-u(t-2)]
画出y(t-2),y(-t),y(2t)的波形symsty=sym(‘(1+t/2)*(heaviside(t+2)-heaviside(t-2))’)y1=subs(y,t,t-2);ezplot(y1,[-5,5])y2=subs(y,t,-t);ezplot(y2,[-5,5])y3=subs(y,t,2*t);ezplot(y3,[-2,2])9.2信号的时域运算与变换三、离散信号的时域运算和变换
离散信号运算和变换只能用向量表示,而不能用符号表示。
参与运算的序列长度应相同,否则应补0。例如:f1=[-2–1012],(n1=-2–1012)f2=[1,1,1](n2=-101)f1+f2=[-20122]对于序列长度不同或下标不同,需编程解决。9.3连续系统的时域分析一、卷积积分f1(t)和f2(t)卷积为可用符号工具箱中的积分函数:int(S)例如:symstaotf1=sym('Heaviside(t)-Heaviside(t-1)');f2=t*exp(-t);f=int(subs(f1,t,tao)*subs(f2,t,t-tao),tao,-inf,inf);卷积积分也可用离散卷积的方法求的,离散间隔越小越接近。9.3连续系统的时域分析二、连续系统的响应设连续系统的微分方程为:利用控制工具箱(Control)中的有关函数可以分析连续系统的响应用向量来描述系数:9.3连续系统的时域分析1、冲激响应当输入为冲激信号时产生的零状态响应称为系统的冲激响应。求连续系统冲激响应的函数为:impulse()9.3连续系统的时域分析1、冲激响应(1)格式1:impulse(b,a)
以默认方式绘出向量a,b定义的连续系统的冲激响应的时域波形。例如:连续系统的微分方程为:
y’’(t)+5y’(t)+6y(t)=3f’(t)+2f(t)a=[156];b=[32];impulse(b,a)9.3连续系统的时域分析
(2)格式2:impulse(b,a,t)
绘出连续系统在0-t时间范围内的冲激响应的时域波形例如:impulse(b,a,10)(3)格式3:impulse(b,a,t1:p:t2)
绘出连续系统在t1-t2时间的冲激响应的时域波形例如:impulse(b,a,1:0.1:10)9.3连续系统的时域分析
(4)格式4:y=impulse(b,a,t1:p:t2)返回在t1-t2时间内的冲激响应的数值,不绘图。9.3连续系统的时域分析2、阶跃响应求系统冲激响应的函数为:step()格式和用法同impulse完全相同。9.3连续系统的时域分析3、系统响应求连续系统响应的函数为:lsim()
(1)格式1:lsim(b,a,x,t)b,a是描述系统的微分方程的系数。x,t是输入信号的行向量。绘出系统响应。例如:a=[121];b=[12];t=0:0.1:10;x=sin(2*pi*t);lsim(b,a,x,t)9.3连续系统的时域分析3、系统响应(2)格式2:y=lsim(b,a,x,t)返回响应
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 专题3.1 导数的概念及其意义、导数的运算(原卷版)-2024年高考数学一轮复习精讲精练宝典(新高考专用)
- 2020-2021深圳华南中英文学校小学三年级数学下期末一模试卷及答案
- 《跨境电子商务基础》高职全套教学课件
- 内墙脚手架施工方案
- 历史与社会人教版九年级第三单元第二课第一框《欧洲战争策源地的形成》教学设计
- 江西省景德镇市2025届中考考前最后一卷生物试卷含解析
- 安徽省宣城市培训校2025届中考生物模拟预测题含解析
- 农场员工合同范例
- 供电施工合同范例
- 企业产权房出租合同范例
- 2024年四川泸州古蔺县选调事业单位工作人员26人历年管理单位遴选500模拟题附带答案详解
- 2024年支气管哮喘临床诊疗指南:课件精讲
- 模具费支付合同模板
- 餐饮部总监述职报告
- 辽宁省沈阳市第七中学2024-2025学年九年级上学期期中英语试题
- 小学金融普及
- 2024电力建设工程绿色建造评价规范
- 安宁疗护课件
- 中小学-珍爱生命拒绝毒品-课件
- 价值观考核评定表
- 振动筛施工技术方案
评论
0/150
提交评论