计算机仿真课件-第一章-20151105_第1页
计算机仿真课件-第一章-20151105_第2页
计算机仿真课件-第一章-20151105_第3页
计算机仿真课件-第一章-20151105_第4页
计算机仿真课件-第一章-20151105_第5页
已阅读5页,还剩166页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

授课教师:袁帅

信息学院

自动化教研室计算机仿真讲课内容第1章MATLAB入门与基本运算第2章MATLAB图形与可视化第3章线性系统分析与设计第4章SIMULINK仿真环境第5章MATLAB控制仿真与实例第1章MATLAB入门与基本运算1.1MATLAB环境与文件管理1.2基本数据定义与变量管理1.3变量、数组与函数1.4数据的输入与输出1.5数组与矩阵运算1.6M文件与函数1.7多项式管理1.8控制语句与逻辑管理1.9曲线拟合与插值运算1.10符号运算MATLAB环境与文件管理MATLAB发展1970年代中期,CleveMoler博士开发了:

EISPACK(特征值求解的程序库)

LINPACK(解线性方程的程序库)

1970年代后期,

CleveMoler编写接口程序:MATLAB,

即矩阵(MATrix)与实验室(LABoratory)

前3个字母的组合,是“矩阵实验室”的缩写,

它是一种以矩阵运算为基础的交互式程序语言。

1983年春,CleveMoler和JohnLittle用C语言开发了第二代专业版

1984年,两人成立了Mathworks公司,正式把MATLAB推向市场。1988年,推出MATLAB3.x版本(DOS版)。

1993年,推出MATLAB4.0版本(Win3.x)。

1997年,推出MATLAB5.0版(Windows95)。

1999年,推出MATLAB5.3版本(流行较广)。

2000年,推出MATLAB6.0版本

2006年,推出MATLAB7.2版本

2012年,推出MATLAB7.14…………MATLAB环境与文件管理MATLAB发展MATLAB的特点1、起点高2、人机界面友好3、强大而简易的作图功能4、一流的数值计算功能5、智能化程度高6、强劲的工具箱是一个强大的功能演算性草稿纸

难点:函数较多,仅基本部分就有700多个。MATLAB环境与文件管理MATLAB环境与文件管理环境与文件管理菜单(Menu)当前路径当前目录窗口历史记录窗口工作区窗口命令窗口第1章MATLAB入门与基本运算1.1MATLAB环境与文件管理1.2基本数据定义与变量管理1.3变量、数组与函数1.4数据的输入与输出1.5数组与矩阵运算1.6M文件与函数1.7多项式管理1.8控制语句与逻辑管理1.9曲线拟合与插值运算1.10符号运算基本数据定义与变量管理建立数据:创建变量,数组

创建数据:输入指令x=5;x1=[0.21.11,3];y1=[123;456];

显示数据:指令后去掉‘;’号或直接键入变量名

有规律的创建数据:

等间隔定义数组:x2=1:10(或者为1:1:10)

等距离定义数组:x3=linspace(-1,1,10)

定义对数坐标的数组:x4=logspace(-1,1,10)

基本数据定义与变量管理变量管理

变量查看:

变量查询:

变量删除:who(列出工作区中的内存变量)whos(列出工作区中的内存变量详情)clear(清除工作区中的变量和函数)exist(’变量名’)(查询是否存在一个变量)基本数据定义与变量管理数值显示:Format指令内部只有一种类型为双精度(8个字节,64位),实数为1个双精度数,复数为两个双精度数。但输出显示格式有8种。可用format命令来改变显示格式。例如:

formatshort显示5位数(pi:3.1416)formatlong显示15位数(pi:3.14159265358979)formatbank显示货币格式(pi:3.14)Format指令Matlab命令显示形式说明formatlong3.14159265358979316位十进制formatshorte3.1416e+0005位十进制数加指数formatlonge3.141592653589793e+00016位十进制数加指数formathex400921fb54442d1816位十六进制formatbank3.14两位小数format++正、负或零formatrat355/113分数近似formatshort(默认)3.14159二位整数,四位小数基本数据定义与变量管理在线查询:Help命令;寻求帮助的标题lookfor命令;关键词提供帮助变量、数组与函数变量表示变量名,常量名,函数名和文件名的字符串(1)由字母、数字、下划线等符号组成,第一个字母必须是英文字母。(2)变量和常量最长不要超过19个字符,多余截取。(3)函数和文件名通常不超过8个字符。(4)变量名大小写敏感。变量、数组与函数变量:特殊变量

ans----默认临时变量

pi----πeps----计算机中的最小数

inf----无穷大

NaN----非数或不定数(如:0/0)

i或j----虚数单位变量、数组与函数注释和标点

%:注释语句前面添加的符号

多条命令语句放在同一行,中间用逗号或分号隔开。逗号要求显示结果,分号不要求显示结果;例如:输入x=4.5;y=5,f=1.9变量、数组与函数复数表示real:复数实部imag:复数虚部abs:复数幅值angle:复数相位例:变量、数组与函数数学函数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)。当x<0时,sign(x)=-1;当x=0时,sign(x)=0;当x>0时,sign(x)=1。>小整理:MATLAB常用的三角函数sin(x):正弦函数cos(x):馀弦函数tan(x):正切函数asin(x):反正弦函数acos(x):反馀弦函数atan(x):反正切函数atan2(x,y):四象限的反正切函数sinh(x):超越正弦函数cosh(x):超越馀弦函数tanh(x):超越正切函数asinh(x):反超越正弦函数acosh(x):反超越馀弦函数atanh(x):反超越正切函数数据的输入与输出利用M文件生成数据

在当前子目录Work中:

新建abc.m文件;

键入a=1;b=-2;c=10;

保存文件;

在命令窗口中直接键入abc,运行该程序;

获得结果:a=1b=-2c=10;数据的输入与输出利用M文件生成数据

在当前子目录Work中:

新建abc.m文件;

键入a=1;b=-2;c=10;

保存文件;

在命令窗口中直接键入abc,运行该程序;

获得结果:a=1b=-2c=10;数据的输入与输出save与load指令

使用save与load指令保存与加载已有的数据。

例如:save;以二进制的形式将所有变量存入到matlab.mat文件中;savedata;以二进制的形式将所有变量存入到data.mat中;savedataxyz;以二进制的格式将xyz存入到data.mat中;load;将matlab.mat文件中的所有变量加载到工作空间中;loaddata;将data.mat文件中的所有变量加载到工作空间中;loaddataxyz;将data.mat文件中变量xyz加载到工作空间中数据的输入与输出MATLAB低级文件I/O函数

MATLAB低级文件I/O函数fclose关闭文件Feof测试文件结束ferror查询文件I/O的错误状态fgetl读文件的行,忽略回行符fgets读文件的行,包括回行符fopen打开文件fprintf把格式化数据写到文件或屏幕上fread从文件中读二进制数据frewind返回到文件开始fscanf从文件中读格式化数据fseek设置文件位置指示符ftell获取文件位置指示符fwrite把二进制数据写到文件里数据的输入与输出FOPEN函数:fopen函数打开一个文件并返回这个文件的文件句柄值。它的基本调用形式如下:fid=fopen(filename,permission)说明:其中fid用于存储文件句柄值,如果返回的句柄值大于0,则说明文件打开成功。文件名filename用字符串形式,表示待打开的数据文件。Permission表示打开方式,常见的打开方式如表所示。FOPEN函数打开方式打开方式描述‘r’只读方式打开文件(默认的打开方式),该文件必须已存在‘r+’读写方式打开文件,打开后先读后写,该文件必须已存在‘w’打开后写入数据。若该文件存在则更新;不存在则创建‘w+’读写方式打开文件,先读后写。若该文件存在则更新;不存在则创建‘a’在打开的文件末端添加数据。若文件不存在则创建‘a+’打开文件后,先读入数据再添加数据。文件不存在则创建数据的输入与输出FSCANF函数:fscanf函数可以读取文本文件的内容,并按指定格式存入矩阵。其调用格式为:[A,count]=fscanf(fid,format,size)说明:其中A用来存放读取的数据,COUNT返回所读取的数据元素个数,fid为文件句柄,format用来控制读取的数据格式,由%加上格式符组成,常见的格式符有:d(整型)、f(浮点型)、s(字符串型)、c(字符型)等,在%与格式符之间还可以插入附加格式说明符,如%12f。size为可选项,决定矩阵A中数据的大小,它可以取下列值:N(读取N个元素到一个列向量)、inf(读取整个文件)、[M,N](读数据到M×N的矩阵中,数据按列存放)。数据的输入与输出FPRINTF函数:fprintf函数可以将数据按指定格式写入到文本文件中。其调用格式为:count=fprintf(fid,format,A,...)说明:fid为文件句柄,指定要写入数据的文件,format是用来控制所写数据格式的格式符,与fscanf函数相同,A是用来存放数据的矩阵。低级文件读/写数据的过程设已有Test.txt,内容如右:

a_d_13.00.6-2.00.05372.00707-.02525-1.00.09308.04892.01294运行文件inout.m内容如下:%inputandoutputadatafilef1=fopen(‘test.txt’,’r’)p=fscanf(f1,’%c’)f2=fopen(‘name.txt’,’w’)fprintf(f2,’%s15\n,%9.5f\n,%9.5f\n,%4(9.5f)\n,,%4(9.5f)\n’,p)fclose(‘all’)数组与矩阵运算矩阵表达式,用[]表示(1)基本赋值

1)使用[]2)同一行元素用空格或‘,’隔开

3)不同行用‘;’隔开

例如:a=[123;456]

(2)复数的赋值:例如:z=1+2i或1+2jz=[1+2i3+4i]z=[13]+[24]*i数组与矩阵运算矩阵的变换

(1)抽取:由原矩阵中的部分元素构成新矩阵。如:b=a([2,4],[1,3])

表示第2,4行与第1、3列交叉元素组成新矩阵。(2)抽去:使用空矩阵[](无元素),将矩阵整行/列删除。如:a([2,4],:)=[]

将2、4行删除

a(:,[2])=[]

将第2列删除数组与矩阵运算矩阵的变换

(3)组合:由多个矩阵组成一个新矩阵,但行列应正好。如:a=[123;456];b=[789;101112];c=[ab];d=[a;b];(4)转置:b=a‘

(行变列)A=[123456]>>A'ans=142536B=[1+2i3+4i5-6i7-8i]>>B‘ans=1.0000-2.0000i5.0000+6.0000i3.0000-4.0000i7.0000+8.0000i数组与矩阵运算矩阵信息查询

函数功能Whos显示工作空间中存在的变量及其大小Sizes(A)返回A矩阵的行数与列数Length(A)返回数组A的维数find(A)给出特殊要求(非零或其他条件)的矩阵元素的行、列标记矩阵信息查询函数数组与矩阵运算矩阵信息查询

[m,n]=size(A):返回矩阵的行列数m与n。length(A)=max(size(A)):返回行数或列数的最大值。>>A=[123;456];>>[m,n]=size(A)m=2n=3>>length(A)ans=3>>max(size(A))ans=3>>m=size(A,1)m=2>>n=size(A,2)n=3数组与矩阵运算矩阵信息查询

find()指令:特殊要求的矩阵元素定位>>A=[123;456];>>[m,n]=find(A>3)m=222n=123>>X=[01-2-6-379];>>p=find(abs(X)>3)p=467数组与矩阵运算矩阵的块操作

A(m,n):提取第m行,第n列元素>>A(2,3)ans=6A(m,:):提取第m行元素(冒号表示全部)>>A(2,:)ans=456A(:,n):提取第n列元素>>A(:,3)ans=369A(m1:m2,n1:n2):提取第m1行到第m2行和第n1列到第n2列的所有元素(提取子块)。>>A(1:2,2:3)ans=2356A=123456789数组与矩阵运算矩阵的块操作

A(:):得到一个长列矢量,该矢量的元素按矩阵的列进行排列。>>A(:)ans=147258369矩阵扩展:如果在原矩阵中一个不存在的地址位置上设定一个数(赋值),则该矩阵会自动扩展行列数,并在该位置上添加这个数,而且在其他没有指定的位置补零。(变维结构)>>A(5,5)=10A=12300456007890000000000010数组与矩阵运算矩阵的块操作

删除子块:如果将矩阵的子块赋值为空矩阵[],则相当于消除了相应的矩阵子块。A=12300456007890000000000010>>A(4:5,:)=[]A=123004560078900>>A(:,4:5)=[]A=123456789数组与矩阵运算矩阵的块操作

>>A(1,2)=10A=1103456>>A(1,:)=DA=789456>>A(:,:)=1A=111111>>A=[123;456];D=[789];>>A(1:2,1:2)=[12;34]A=121341>>A=[56;78]A=5678数组与矩阵运算矩阵的块操作

>>A(1,2)=10A=1103456>>A(1,:)=DA=789456>>A(:,:)=1A=111111>>A=[123;456];D=[789];>>A(1:2,1:2)=[12;34]A=121341>>A=[56;78]A=5678数组与矩阵运算矩阵的块操作

>>A=[123;456;789]>>B=A(2:-1:1,1:3)>>C=A(end:-1:1,:)>>D=[AC(:,[13])]B=456123C=789456123A=123456789D=123794564678913数组与矩阵运算矩阵的翻转与旋转操作

flipud(A):矩阵作上下翻转

fliplr(A):矩阵作左右翻转

rot90(A):逆时针旋转90°A=[123456]>>flipud(A)ans=456123>>fliplr(A)ans=321654>>rot90(A)ans=362514数组与矩阵运算矩阵的翻转与旋转操作

diag(A):提取矩阵A的对角元素,返回列向量

tril(A):提取A的下三角矩阵

triu(A):提取A的上三角矩阵

diag(V):以列向量V作对角元素创建对角矩阵>>diag(A)ans=159>>tril(A)ans=100450789>>triu(A)ans=123056009A=123456789V=[2;5;8;7]>>diag(V)ans=2000050000800007数组与矩阵运算矩阵的运算

运算符

+-适用于两同阶矩阵或矩阵与标量之间的运算对应元素的加减例:已知矩阵A和B,且

A=[21,2,4;7,13,19;1,8,17];B=[122524;11139;681];

计算C=A+B,D=A-B和E=A+3。>>C=A+BC=33272818262871618>>D=A-BD=9-23-20-4010-5016>>E=A+3E=245710162241120数组与矩阵运算矩阵的运算

运算符*

适用于前一矩阵的列数和后一矩阵行数相同或者其中为标量的情况。例:已知矩阵A和B,且

A=[21,2,4;7,13,19;1,8,17];B=[122524;11139;681];

试求C=A*B和D=A*3。>>C=A*BC=298583526341496304202265113>>D=A*3D=6361221395732451数组与矩阵运算矩阵的运算

运算符:右除/

左除\

右除表示为:A/B=AB-1(B为方阵且非奇异)

左除表示为:A\B=A-1B(A为方阵且非奇异)例:已知矩阵A和B,且

A=[21,2,4;7,13,19;1,8,17];B=[122524;11139;681];

试计算A\B和A/B。>>A/Bans=-1.83365.6985-3.28010.55350.7891-1.38710.74960.0478-1.4201>>A\Bans=0.50811.11681.14290.3216-0.61860.28570.17170.6960-0.1429[注]矩阵的除法运算实际是求AX=B的解的过程。当A为非奇异矩阵时,结果是最小二乘解,即矩阵除法可以找到使||AX-B||误差绝对值最小的X。数组与矩阵运算矩阵的运算

运算符:.为实现与矩阵相关的标量运算而设计的。与矩阵的常规运算不同,是针对于矩阵中的元素定义的。分类:点乘

.*

点乘方.^

点右除

./

点左除

.\例:已知矩阵A和B,试求A*B,A.*B,A.^3,A./2和A.^B。其中A=[12;34];B=[56;78];>>A*Bans=19224350>>A.*Bans=5122132>>A.^3ans=182764>>A./2ans=0.50001.00001.50002.0000>>A.^Bans=164218765536数组与矩阵运算矩阵的运算

函数inv()矩阵A可逆,则矩阵A的逆矩阵是唯一的。>>X=inv(G)X=52-2-2-110-21>>I=inv(G)*GI=100010001例:求一矩阵G的逆矩阵,并验证所得结果。

G=[120;25-1;410-1];数组与矩阵运算矩阵的运算

G=[120;25-1;410-1]函数eig()设A为n阶矩阵,λ是一个数,如果方程Ax=λx存在非零解向量,则称λ为A的一个特征值,相应的非零向量x称为特征值λ对应的特征向量。>>d=eig(G)d=3.73210.26791.0000>>[V,D]=eig(G)V=-0.2440-0.91070.4472-0.33330.33330.0000-0.9107-0.24400.8944D=3.73210000.26790001.0000数组与矩阵运算矩阵的运算

求特征多项式:poly()。G=[120;25-1;410-1];>>poly(G)ans=1.0000-5.00005.0000-1.0000>>round(poly(G))ans=1-55-1数组与矩阵运算矩阵的运算

求行列式函数

det()若将矩阵看做是行列式,可求相应的行列式值。例:已知矩阵A=[1234;2341;3412;4123]

求其对应的行列式值。>>A=[1234;2341;3412;4123]A=1234234134124123>>det(A)ans=160数组与矩阵运算矩阵的运算

其他常用的矩阵函数函数功能expm(A)计算矩阵的幂级数logm(A)求矩阵的对数orth(A)求正交化矩阵svd(A)奇异值分解trace(A)矩阵的对角元素之和norm(A)矩阵和向量的范数Lu(A)用高斯消元法所得的系数矩阵qr(A)正交三角矩阵分解数组与矩阵运算特殊矩阵

函数功能eye(m,n)产生m*n维单位矩阵zeros(m,n)产生全部元素为0的m*n矩阵ones(m,n)产生全部元素为1的m*n矩阵[]产生空矩阵magic(n)产生n阶方阵,各行各列及对角线元素和相等rand(m,n)元素服从0到1之间均匀分布的随机m*n矩阵diag(a)以向量a作为对角线元素生成对角矩阵M函数与M文件Matlab除了可以进行前面讲过的数学函数、矩阵函数运算之外,还提供了M函数和M文件功能,用户可以利用所有的已知函数编制自己的M函数或M文件,完成更复杂的运算。

一个主程序的例子编写一个双音频程序,显示某个键的波形:M函数与M文件设主程序文件名为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)M函数与M文件2、主程序的组成▓帮助段(带注释符%的行)▓程序段

如果有第一行(function),则主程序为函数文件形式

,变量不保存到工作区中,为局部变量.

如果没有第一行(function),则主程序为命令文件形式,相当于各命令行的集合。变量保存到工作区中.M函数与M文件3、几点说明▓文件名不能为汉字或数字开头▓注释符%后面的文字不执行▓程序的每一行的执行相当于在命令行执行▓一行可以写多条语句,以‘,’或‘;’隔开;一行写不下时,以‘…’续行▓对于命令文件形式,建议在程序段开始用

clear,closeall等命令清除以前的变量▓对于函数文件形式,程序中的所有变量均为局部变量。M函数与M文件M函数

函数是用用来定义子程序的。主程序实际上也是一个函数(由MATLAB调用)。1、函数头的形式:function函数名()(无变量传递)function函数名(var1,var2,…)(无返回值)function[y1,y2,…]=函数名(var1,var2,…)M函数与M文件2、函数的位置▓函数可以是一个单独的文件(文件名和函数名应相同)▓函数也可以放在主程序的后面。M函数M函数与M文件3、举例根据t,f1,f2生成双音频的函数functionfy=mydtones(t,f1,f2)fy=sin(2*pi*f1*t)+sin(2*pi*f2*t);该函数可以是单独文件或在主程序后面。例如:mydt1.mM函数与M文件%程序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);M函数与M文件%程序文件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);M函数与M文件%程序文件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);M函数与M文件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);M函数与M文件%程序文件名为mean.mfunctiony=mean(x)%mean求平均值%对于向量,返回向量x中各元素的平均值%对于矩阵,返回包含各列元素平均值的行向量[m,n]=size(x);ifm==1m=n;end;y=sum(x)/m;>>helpmean

mean求平均值对于向量,返回向量x中各元素的平均值对于矩阵,返回包含各列元素平均值的行向量M函数与M文件

例:编写函数文件求半径为r的圆的面积和周长。函数文件如下:function[s,p]=fcircle(r)%CIRCLEcalculate%r圆半径%s圆面积%p圆周长s=pi*r*r;p=2*pi*r;M函数与M文件函数调用的一般格式是:

[输出实参表]=函数名(输入实参表)

要注意的是,函数调用时各实参出现的顺序、个数,应与函数定义时形参的顺序、个数一致,否则会出错。函数调用时,先将实参传递给相应的形参,从而实现参数传递,然后再执行函数的功能。M函数与M文件例:函数文件examp.m:functionfout=examp(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)M函数与M文件输入输出语句(人机交互)1、屏幕输入格式:x=input(‘提示符’)----等待输入数据

x=input(‘提示符’,‘s’)----等待输入字符串

xm=input('What''syourname?','s');

M函数与M文件输入输出语句(人机交互)2、菜单命令格式:x=menu(‘标题’,‘菜单项1’,菜单项2’,…)返回菜单序号。例如:x=menu(‘Title’,’Plus’,’Minus’)M函数与M文件3、暂停格式:pause------等待敲击键盘

pause(n)-----等待n秒4、交出键盘格式:keyboad---程序执行到该命令时暂停,在屏幕上显示K,这时用户可输入命令,查看中间结果,输入return命令,则程序继续执行。M函数与M文件5、中止执行6、显示格式:display(x)-----在命令行显示x的内容格式:^C---强行停止程序的执行,回到命令行7、打印格式:print---------打印当前绘图print-dbitmap文件名

---------将绘图转为图象文件

-djpegM函数与M文件

例:输入x,y的值,并将它们的值互换后输出。

程序如下:

x=input('Inputxplease.');y=input('Inputyplease.');z=x;x=y;y=z;disp(x);disp(y);多项式运算一、多项式的表示在Matlab中,n次多项式是用一个长度为n+1的向量来表示,缺少的幂次项系数为0。例如:在Matlab中,用其系数的行向量表示该多项式:例:注:系数中的零不能省!多项式运算

多项式加减运算:Matlab没有提供专门进行多项式加减运算的函数,事实上,多项式的加减就是其所对应系数向量的加减运算。例:

对于次数相同的多项式,可以直接对其系数向量进行加减运算;

如果两个多项式次数不同,则应该把低次多项式中系数不足的高次项用0补足,然后进行加减运算。多项式运算例:把多项式a(x)与多项式b(x)相加求解如下:所得结果代表的多项式为:多项式运算二、多项式的乘法多项式运算一、多项式的乘法

多项式乘法运算:k=conv(p,q)多项式的相乘就是两个代表多项式的行向量的卷积例:计算多项式和的乘积>>p=[2,-1,0,3];>>q=[2,1];>>k=conv(p,q);

多项式除法运算:[k,r]=deconv(p,q)其中k返回的是多项式p除以

q的商,r是余式。[k,r]=deconv(p,q)p=conv(q,k)+r<==>多项式运算多项式的导数:polyderk=polyder(p):返回多项式p的一阶导数;k=polyder(p,q):返回多项式p与q乘积的一阶导数;[k,d]=polyder(p,q):返回p/q

的导数,k是分子,d是分母。>>k1=polyder([2,-1,0,3]);>>k2=polyder([2,-1,0,3],[2,1]);>>[k2,d]=polyder([2,-1,0,3],[2,1]);例:已知,,求多项式运算多项式求值:polyval>>p=[2,-1,0,3];>>x=2;polyval(p,x)>>x=[-1,2;-2,1];polyval(p,x)例:已知,分别取x=2和一个2x2矩阵,求p(x)在x处的值

多项式求值函数polyval利用该函数可以求得多项式在某一点的值。y=polyval(p,x):返回多项式p在x点的值其中:x可以是复数,也可以是矩阵;多项式运算多项式求根:roots;根据根多项式求系数:poly;>>p=[2,-1,0,3];>>x=roots(p)例:已知,求p(x)的根。x=roots(p):返回多项式的根,注意:matlab按惯例,多项式是行向量,根是列向量。求解多项式的根,即p(x)=0的解。在matlab中,求解多项式的根有roots函数命令来完成。若已知多项式的全部根,则可用poly函数给出该多项式。p=poly(x)多项式运算部分分式展开函数:residue格式一:[r,p,k]=residue(b,a)Residue函数可以完成有理多项式的部分分式展开,它是一个对系统传递函数特别有用的函数,其调用格式为:功能:把b(s)/a(s)展开成:其中,r代表余数数组,p代表极点数组,k代表常数项。多项式运算例:将有理多项式展开成部分分式。即有理多项式可展开为:部分分式展开函数:residue多项式运算格式二:[b,a]=residue(r,p,k)功能:格式一的逆作用控制语句与逻辑管理任何计算机语言都有三种基本结构,即:►顺序结构:无控制语句►分支结构:if,switch►循环结构:for,while控制语句与逻辑管理1、顺序结构:无控制语句

按照顺序从头至尾地执行程序中的各条语句。顺序结构一般不包含其他任何子语句或控制语句。例如:n=0:100;x=sin(2*pi*0.01*n);plot(x);holdonstem(x,’r’);grid控制语句与逻辑管理►分支结构:if,switchif和switch语句用于根据条件选择执行相应的语句。1、if语句(适合分支少)if语句根据逻辑表达式的值来确定是否执行紧接的语句体。常见的调用格式有:控制语句与逻辑管理格式1:if表达式语句

end格式2:if表达式语句1else

语句2end控制语句与逻辑管理格式3:

if表达式1

语句1elseif表达式2

语句2else

语句3end例如:判断输入数的奇偶性n=input(‘n=’);ifrem(n,2)==0display(‘n是偶数’)elsedisplay(‘n是奇数’)end控制语句与逻辑管理2、switch语句(适合分支多)格式:

switch表达式(标量或表达式)

case值1

语句1case值2

语句2…otherwise

语句nendswitch语句和if语句类似。Switch语句根据变量或表达式的取值不同分别执行不同的命令。控制语句与逻辑管理例如:根据菜单选择显示不同的函数x=menu('波形','正弦','余弦','正切','余切');switchxcase1ezplot('sin')case2ezplot('cos')case3ezplot('tan')case4ezplot('cot')end控制语句与逻辑管理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);y控制语句与逻辑管理for语句更一般的格式为:

for循环变量=矩阵表达式循环体语句

end执行过程是依次将矩阵的各列元素赋给循环变量,然后执行循环体语句,直至各列元素处理完毕。

例:写出下列程序的执行结果。

s=0;a=[12,13,14;15,16,17;18,19,20;21,22,23];fork=as=s+k;enddisp(s');控制语句与逻辑管理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/cntend控制语句与逻辑管理5、break和continue语句用于循环语句(for,while):break:用于跳出循环continue:跳过后面的语句继续循环控制语句与逻辑管理例:输出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控制语句与逻辑管理

MATLAB关系操作符能用来比较两个同样大小的数组,或用来比较一个数组和一个标量。在后一种情况,标量和数组中的每一个元素相比较,结果与数组大小一样。下面给出几个示例:

MATLAB关系操作符包括所有常用的比较。控制语句与逻辑管理»A=1:9,B=9-AA=123456789B=876543210»tf=(A>4)tf=000011111找出A中大于4的元素。0出现在A<=4的地方,1出现在A>4的地方。控制语句与逻辑管理逻辑操作符提供了一种组合或否定关系表达式。MATLAB逻辑操作符包括:逻辑操作符用法的一些例子有:»A=1:9;B=9-A;»tf=A>4tf=000011111控制语句与逻辑管理找出A大于4。»tf=~(A>4)tf=111100000对上面的结果取非,也就是1替换0,0替换1。»tf=(A>2)&(A<6)tf=001110000在A大于2‘与’A小于6处返回1。控制语句与逻辑管理最后,上面的功能易于产生数组来表示不连续信号,或由多段其他信号所组成的信号。基本想法是,把数组中要保持的那些值与1相乘,所有其他值与0相乘。例如,»x=linspace(0,10,100);%createdata»y=sin(x);%computesine»z=(y>=0).*y;%setnegativevaluesofsin(x)tozero»z=z+0.5*(y<0);%wheresin(x)isnegativeadd1/2»z=(x<=8).*z;%setvaluespastx=8tozero»plot(x,z)»xlabel('x'),ylabel('z=f(x)'),title('ADiscontinuousSignal')控制语句与逻辑管理NaNs和空矩阵NaNs和空矩阵([])要求在MATLAB中作特殊处理,特别是用在逻辑或关系表达式里。根据IEEE数学标准,对NaNs的几乎所有运算都得出NaNs。例如,控制语句与逻辑管理NaNs和空矩阵»a=[12naninfnan]%note,inuse,NaNcanbelowercasea=12NaNInfNaN»b=2*ab=24NaNInfNaN»c=sqrt(a)c=1.00001.4142NaNInfNaN»d=(a==nan)d=00000»f=(a~=nan)f=11111控制语句与逻辑管理字符运算

字符和字符串运算是各种高级语言必不可少的部分,Matab作为一种高级的科学计算语言,字符串运算功能同样是很丰富的,利用字符串处理工具箱(Symbolictoolbox)和与Maple的接口,可以实现很多功能。在matlab中所有的字符串常用单引号设定输入或赋值;字符串的每个字符都是矩阵相应的一个元素字符串和字符数组基本上是等价的>>s='matrixlaboratory's=matrixlaboratory>>size(s)ans=117>>s(3)ans=t>>s2=['matlab']s2=matlab控制语句与逻辑管理字符运算字符数组与字符串之间的转换函数名可实现功能函数名可实现功能num2str数字转换为字符串Str2num转换字符串为数字Int2str整数转换为字符串Sprintf将格式数据写为字符串Mat2str矩阵转换为字符串Sscanf在格式控制下读字符串>>a=[1:5];>>b=num2str(a);>>a*2ans=246810>>b*2ans=986464100646410264641046464106>>str2num(b)*2ans=246810控制语句与逻辑管理字符运算字符串操作函数名可实现的功能函数名可实现的功能strcat链结串strrep用其它串代替此串strvcat垂直链结串strtok寻找串中记号strcmp比较串upper转换串为大写strncmp比较串的前N个字符lower转换串为小写findstr在其它串中找此串blanks生成空串strjust验证字符数组deblank移去串内空格strmatch查找可能匹配字符串控制语句与逻辑管理字符运算Eval:执行字符串>>i=2;j=3;>>t='i+j't=i+j>>a=eval(t)a=5>>d='cd';>>eval(d)d:\MATLAB6p1\work曲线拟合与插值运算曲线拟合1曲线拟合问题的提法:已知一组(二维)数据,即平面上的n个点),(iiyx,

ixni,,,2,1…=互不相同,寻求一个函数(曲线))(xfy=,使)(xf在某种准则下与所有数据点最为接近,即曲线拟合得最好,如图:

xy0++++++++确定f(x)使得达到最小最小二乘准则

曲线拟合与插值运算曲线拟合多项式拟合的Matlab指令a=polyfit(xdata,ydata,n)

其中n表示多项式的最高阶数xdata,ydata为要拟合的数据,它是用向量的方式输入。

输出参数a为拟合多项式y=a1xn+…+anx+an+1的系数a=[a1,…,an,an+1]。多项式在x处的值y可用下面程序计算。

y=polyval(a,x)

曲线拟合与插值运算插值运算插值与多项式拟合的不同之处在于,对给定点的多项式拟合不必点点通过,而插值建立的函数是点点通过给定的数据点。MATLAB提供了丰富的插值方法,并配有样条插值工具箱。曲线拟合与插值运算插值运算一维插值多项式的基本语法为:yi=interp1(x,y,xi,method)这里x,y为给定的数据,利用该数据建立一维插值多项式,xi为待计算的插值点,yi为插值点的函数值。method:为建立插值多项式的方法,可取method='nearest':利用最近临方法建立插值多项式method='linear':利用线性方法建立插值多项式method='spline':利用样条函数方法建立插值多项式method='pchip':三阶厄米特方法建立逐段样条插值多项式method='cubic':利用三阶样条函数建立插值多项式曲线拟合与插值运算高维插值我们以二维插值为例,其语法为:ZI=interp2(X,Y,Z,XI,YI,method)其中的参数和一维的类似。【例5.2.7】以peaks函数为例,首先取较少的数据。然后对其求插值函数,并比较各方法的差异。[x,y]=meshgrid(-3:1:3);z=peaks(x,y);surf(x,y,z);title('较少点的表面图')曲线拟合与插值运算[xi,yi]=meshgrid(-3:0.25:3);zi1=interp2(x,y,z,xi,yi,'nearest');subplot(2,2,1),surf(xi,yi,zi1),title('nearest方法')zi2=interp2(x,y,z,xi,yi,'bilinear');subplot(2,2,2),surf(xi,yi,zi2),title('bilinear方法')zi3=interp2(x,y,z,xi,yi,'cubic');subplot(2,2,3),surf(xi,yi,zi3),title('bicubict方法')zi4=interp2(x,y,z,xi,yi);subplot(2,2,4),surf(xi,yi,zi4),title('系统内定方法')符号运算MATLAB工具箱主要有2类:■通用工具箱:(可用于各个领域)

◆符号数学工具箱(Symbolic)与加拿大Maple公司合作,内核使用Maple的符号计算引擎。◆系统仿真工具箱(Simulink)■专用工具箱:(只用于相关领域)(已有30多个工具箱)符号运算MATLAB提供了一种符号数据类型,相应的运算对象称为符号对象。例如,符号常量、符号变量以及有它们参与的数学表达式等。在进行符号运算前首先要建立符号对象,然后就可以进行符号对象的运算了。MathWorks公司以Maple的内核作为符号计算引擎(Engine),依赖Maple已有的函数库,开发了实现符号计算的两个工具箱:基本符号工具箱和扩展符号工具箱。符号运算符号的创建一、符号变量的概念MATLAB中的变量有两类::数值变量:参与运算和运算结果均为数值例如:a=1,a+a=2符号变量:参与运算和运算结果均为符号例如:a=sym(‘b’),a+a=2*b符号运算符号表达式的创建

1、格式1:s=sym(‘符号表达式’)

符号变量s的值为‘符号表达式’例如:s=sym(‘sin(x)+x’)

该函数可以建立一个符号量,符号字符串可以是常量、变量、函数或表达式。符号运算符号表达式的创建

例如,a=sym(‘a’

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论