• / 88
  • 下载费用:20 金币  

MATLAB精彩资料数学建模教学教育资料.doc

关 键 词:
MATLAB 精彩 资料 数学 建模 教学 教育
资源描述:
\\第 1 节 Matlab 基本知识 一、 Matlab 的主要功能Matlab是一种功能非常强大的工程语言,诞生于20世纪70年代,1984年正式推向市场。2002年8月,Matlab6.5开始发布。是进行科学研究和产品开发必不可少的工具。l 数值和符号计算矩阵(数组)的四则运算(Matrix+Laboratory)、数值差分、导数、积分、求解微分方程、微分方程的优化等l 数字图像、数字信号处理l 工程和科学绘图l 控制系统设计l 财务工程l 建模、仿真功能二、 Matlab 的界面1.命令窗口(Command Window):Matlab各种操作命令都是由命令窗口开始,用户可以在命令窗口中输入Matlab命令,实现其相应的功能。此命令窗口主要包括文本的编辑区域和菜单栏(如:四则运算;“;”禁止显示变量的值;↑↓遍历以前的命令)。在命令窗口空白区域单击鼠标右键,打开快捷菜单,各项命令功能如下:Evaluate Selection :打开所选文本对应的表达式的值。Open Selection :打开文本所对应的MatLab文件。Cut :剪切编辑命令。Paste :粘贴编辑命令。2. M-文件编辑/调试(Editor/Debugger)窗口Matlab Editor/Debugger窗口是一个集编辑与调试两种功能于一体的工具环境。M-文件(函数文件)l 什么是M-文件:它是一种和Dos环境中的批处理文件相似的脚本文件,对于简单问题,直接输入命令即可,但对于复杂的问题和需要反复使用的则需做成M-文件(Script File)。l 创建M-文件的方法:Matlab命令窗的File/New/M-file。在Matlab命令窗口运行edit。l M-文件的扩展名: *.ml 执行M-文件:F5l M文件的调试 选择Debug菜单,其各项命令功能如下: Step :逐步执行程序。Step in :进入子程序中逐步执行调试程序。Step out :跳出子程序中逐步执行调试程序。run:执行M-文件。Go Until Cursor :执行到光标所在处。Exit Debug Mode :跳出调试状态。l 函数文件的创建要求:文件名与函数名必须相同,如sin(x)必有sin.m函数文件存在。要求实参和形参位置一一对应。形参在工作空间中不会存在。可以编写递归函数,可以嵌套其他函数。可以用return命令返回,也可以执行到终点返回3.工作空间(Workspace)窗口:显示目前保存在内存中的Matlab的数学结构、字节数、变量名以及类型窗口。保存变量:File菜单\Save Workspace as 命令行:save 文件名装入变量:File菜单\Import Data 命令行:Load 文件名4.现在目录窗口(Current Directory) 5.命令历史窗口(Command History ):提供先前使用过的函数,可以复制或者再次执行这些命令。Matlab帮助系统 Matlab在命令窗口提供了可以获得帮助的命令,用户可以很方便的获得帮助信息。例如:在窗口中输入“help fft”就可以获得函数“fft”的信息。常用的帮助信息有help ,demo ,doc ,who ,whos ,what ,which ,lookfor ,helpbrowser ,helpdesk ,exit ,web 等。三 、关于变量变量命名规则:l 变量名是不包含空格的单个词l 变量名区分大小写l 变量名必须以字母开头的字母、数字、下划线的组合,最多19个字符。l Matlab提供的标准函数名均以小写字母开头特殊变量名:l ans 缺省变量名l pi 圆周率l i,j 虚数单位l eps 无穷小l inf ,Inf 无穷大 l realmax 最大正实数l realmin 最小正实数清除变量的值l clear l clear 变量名1 变量名2显示驻留内存的变量名l whol whos第 2 节 Matlab编程一、 矩阵(数组)的输入1、直接输入直接按行方式输入每个元素:同一行中的元素用逗号(,)或者用空格符来分隔,且空格个数不限;不同的行用分号(;)分隔。所有元素处于一方括号([ ])内;多维矩阵用多重方括弧。可建立复数矩阵如: Null_M = [ ] %生成一个空矩阵可建立复数矩阵R=[1,2,3;4,5,6]I=[7,8,9;10,11,12]Z=R+I*j2. 由M文件方式建立,今后使用键入M文件名即可建立相应矩阵2、利用函数输入 “:”表达式,产生等差行向量 start:step:end 或start:end(step=1)如:t=1:20产生等距输入: linspace(a,b,n) 将〔a,b〕区间分成n-1个等距小区间产生随机排列: randperm(n) 产生1~n之间整数的随机排列3、特殊矩阵输入zeros(n) 生成n×n全零阵, zeros(a,b) 元素全为0的a×b维矩阵, 以下各函数同理具有该类型。zeros(size(A)) 生成与矩阵A相同大小的全零阵, ones(a,b) 元素全为1的a×b维矩阵eye(a,b) 对角线上的元素为1的a×b维矩阵rand(a,b) 产生a×b维均匀分布的随机矩阵,其元素在(0,1)内rand 无变量输入时只产生一个随机数randn(a,b)产生a×b维正态分布的随机矩阵4.矩阵的转置和逆矩阵n X的转置:X’ ( 图像顺时针旋转90°,并水平镜像)如:a=imread('D:\2-1.bmp');b=a';subplot(1,2,1),subimage(a),subplot(1,2,2),subimage(b)n X的逆矩阵 inv(X)二、 矩阵元素的访问及其大小的确定访问第n个元素: X(n)(n>=1)访问多个元素: X ([n1,n2,n3……]) 或 X(1:10)确定元素的个数: numel(X)确定矩阵的大小: [m,n,l]=size(X)三、 矩阵的算数运算l 数与矩阵的运算:m等价于m.m+A : m与A中各元素相加m-A : m与A中各元素相减m×A : m与A中各元素相乘m. /A : m除以A中各元素 (没有m/A)m \ A : A中各元素除以ml 矩阵与矩阵的运算A+B: A、B对应元素相加A-B: A、B对应元素相减A×B: A、B矩阵按线性代数中矩阵乘法运算进行相乘(注意维数匹配)A.*B: A、B对应元素相乘(注意维数相同)A / B: A除以B矩阵 (aA×B-1)(注意维数匹配)A./B: A除以B中各元素A \ B: B除以A矩阵 (aA-1×B)(注意维数匹配)A.\B: B除以A中各元素A^m: 相当于矩阵A×矩阵A×矩阵A…….(m为小数即是矩阵的开方运算)(注意维数匹配)A.^m:矩阵A中各元素的m次方A.^B:矩阵A中各元素的进行B中对应元素次方(注意维数相同)四、 关系运算<、<=、>、>=、= =、~ = 六种关系运算符。关系成立结果为1,否则为0。五、 逻辑运算设矩阵A和B都是m×n矩阵或其中之一为标量,在MATLAB中定义了如下的逻辑运算:&、|、~、xor(真为1,假为0)(1)矩阵的与运算格式 A&B或and(A, B)说明 A与B对应元素进行与运算,若两个数均非0,则结果元素的值为1,否则为0。(2)或运算格式 A|B或or(A, B) 说明 A与B对应元素进行或运算,若两个数均为0,则结果元素的值为0,否则为1。(3)非运算格式 ~A或not (A)说明 若A的元素为0,则结果元素为1,否则为0。(4)异或运算格式 xor (A,B)说明 A与B对应元素进行异或运算,若相应的两个数中一个为0,一个非0,则结果为0,否则为1。六、 集合运算1.两个集合的交集 intersect2.检测集合中的元素 ismember3.两集合的差 setdiff4.两个集合交集的非(异或)函数 setxor5.两集合的并集 union6.取集合的单值元素 unique七、 MatLab的控制流由各种语句构成语句后面加“;”号,不显示运算结果%开头表示是注释语句赋值语句变量=表达式表达式 (相当于将值付给ans变量)演示(三)for循环结构【例】一个简单的for循环示例。for i=1:10; %i依次取1,2,…10,.x(i)=i; %对每个i值,重复执行由该指令构成的循环体,end; x %要求显示运行后数组x的值。 x = 1 2 3 4 5 6 7 8 9 10 while循环结构【例】Fibonacci数组的元素满足Fibonacci 规则: ,;且。现要求计算出该数组中第一个大于10000的元素。a(1)=1;a(2)=1;i=2;while a(i)<=10000 a(i+1)=a(i-1)+a(i); %当现有的元素仍小于10000时,求解下一个元素。 i=i+1;end;i,a(i), i = 21 ans = 10946 if-else-end分支结构【例1】一个简单的分支结构。cost=10;number=12;if number>8 sums=number*0.95*cost;end,sums sums = 114.0000 【例2】用for循环指令来寻求Fibonacc数组中第一个大于10000的元素。n=100;a=ones(1,n);for i=3:n a(i)=a(i-1)+a(i-2); if a(i)>=10000 a(i), break; %跳出所在的一级循环。 end;end,i ans = 10946i =21 switch-case结构【例】学生的成绩管理,演示switch结构的应用。clear; %划分区域:满分(100),优秀(90-99),良好(80-89),及格(60-79),不及格(<60)。for i=1:10;a{i}=89+i;b{i}=79+i;c{i}=69+i;d{i}=59+i;end;c=[d,c];Name={'Jack','Marry','Peter','Rose','Tom'};%元胞数组Mark={72,83,56,94,100};Rank=cell(1,5);%创建一个含5个元素的构架数组S,它有三个域。S=struct('Name',Name,'Marks',Mark,'Rank',Rank);%根据学生的分数,求出相应的等级。for i=1:5 switch S(i).Marks case 100 %得分为100时 S(i).Rank='满分';%列为'满分'等级 case a %得分在90和99之间 S(i).Rank=' 优秀'; %列为'优秀'等级 case b %得分在80和89之间 S(i).Rank=' 良好'; %列为'良好'等级 case c %得分在60和79之间 S(i).Rank=' 及格'; %列为'及格'等级 otherwise %得分低于60 S(i).Rank='不及格'; %列为'不及格'等级 endend%将学生姓名,得分,登记等信息打印出来。disp(['学生姓名 ',' 得分 ',' 等级']);disp(' ')for i=1:5; disp([S(i).Name,blanks(6),num2str(S(i).Marks),blanks(6),S(i).Rank]);end; 学生姓名 得分 等级 Jack 72 及格Marry 83 良好Peter 56 不及格 Rose 94 优秀 Tom 100 满分 try-catch结构【例】try-catch结构应用实例。clear,N=4;A=magic(3);%设置3行3列矩阵A。try A_N=A(N,:),%取A的第N行元素catch A_end=A(end,:),%如果取A(N,:)出错,则改取A的最后一行。endlasterr%显示出错原因 A_end = 4 9 2ans = Index exceeds matrix dimensions. 第二章 符号数学工具(Symbolic Math Toolbox)第 1 节 符号表达式l 符号表达式是代表数字、函数、算子和变量的MATLAB字符串,或字符串数组。不要求变量有预先确定的值,符号方程式是含有等号的符号表达式。如表2.1所列。表2.1符号表达式在MATLAB中的表示 ' 1/(2*x^n) ' y= ' 1/sqrt(2*x) ' ' cos(x^2)-sin(2*x) ' M=sym( ' [a,b;c,d] ' )f=int( ' x^3/sqrt(1-x) ' , ' a ' , ' b ' )注意:加单引号’’表示是一个符号表达式而不是数字表达式。l 符号函数:让用户操作上述符号表达式的方法和函数,比如:>> diff( 'cos(x)' ) % differentiate cos(x) with respect to xans=-sin(x)>> M=sym( '[a,b;c,d] ') % create a symbolic matrix MM=[a,b][c,d]注意:1.建立符号数组时,最好用上函数sym2.许多符号函数可以自动将字符转变为符号表达式。例如diff cos(x) 也可以,>> diff x^2+3*x+5 % the argument is equivalent to ' x^2+3*x+5 ' l 符号变量是符号表达式中的变量,如:’x+3*y+z’中的x,y,z。l 独立变量是当符号表达式中含有多于一个的变量时,只有一个变量是独立变量。缺省的独立变量是x,如果没有x,则选择最靠近x的作为独立变量。如表达式 ' 1/(5+cos(x)) ' 中是 ' x ' ;在 ' 3*y+z ' 中是 ' y ' ;在 ' a+sin(t) ' 是 ' t ' ,而表达式 ' sin(pi/4)-cos(3/5) ' 是一个符号常数无符号变量。可利用函数symvar询问MATLAB在符号表达式中哪一个变量它认为是独立变量(系统找不到一个独立变量,便假定无独立变量并返回x)。>> symvar( ' a*x+y*) % find the default symbolic variableans=x>> symvar( ' a*t+s/(u+3) ' ) % u is the closest to ' x ' ans=u>> symvar( ' sin(omega) ' ) % ' omega ' is not a singlee character。ans=x>> symvar( ' 3*i+4*j ' ) % i and j are equel to sqrt(-1)ans=x指定独立变量:>> diff( ' x^n ' ) % differentiate with respect to the default variable ' x ' ans=x^n*n/x>> diff( ' x^n ' , ' n ' ) % differentiate x^n with respect to ' n ' ans=x^n*log(x)>> diff( ' sin(omega) ' ) % differentiate using the default variables (x)ans=0>> diff( ' sin(omega) ' , ' omega ' ) % specify the independent variableans=cos(omega)第 2 节 符号表达式运算(目的:更方便的构造符号表达式)标准代数运算:symadd、symsub、symlnul、symdiv:分别为加、减、乘、除两个表达式sympow:将一个表达式上升为另一个表达式的幂次例如:给定两个函数>> f= ' 2*x^2+3*x-5 ' % define the symbolic expressionf=2*x^2+3*x-5>> g= ' x^2-x+7 ' g=x^2-x+7>> symadd(f,g) % find an expression for f+g ans=3*x^2+2*x+2>> symsub(f,g) % find an expression for f-gans=x^2+4*x-12>> symmul(f,g) % find an expression for f*gans=(2*x^2+3*x-5)*(x^2-x+7)>> symdiv(f,g) % find an expression for f/gans=(2*x^2+3*x-5)/(x^2-x+7)>> sympow(f,'3*x') % find an expression for ans = (2*x^2+3*x-5)^(3*x)联接运算:symop:取由逗号隔开的、多至16个参量。各个参量可为符号表达式、数值或算子(' + '、' - '、'*'、' / '、' ^ '、' ( '或' ) '),然后symop可将参量联接起来,返回最后所得的表达式.>> f= ' cos(x) ' % create an expressionf=cos(x)>> g= ' sin(2*x) ' % create another expressiong=sin(2*x)>> symop(f,'/ ',g,'+',3) % combine themans=cos(x)/sin(2*x)+3高级运算:compose:把f(x)和g(x)复合成f(g(x));finverse: 求函数的逆函数;symsum:求表达式的序列和。l compose给定表达式>> syms x y u v f = 1/(1 + x^2); g = sin(y); h = 1/(1+u^2); k= sin(v);% create the four expression>> compose(f,g) % find an expression for f(g(x))ans=1/(1+sin(y)^2)>> compose(g,f) % find an expression for g(f(x))ans=sin(1/(1+x^2))用于含有不同独立变量的函数表达式:>> compose(h,k,'u','v') % given h(u),k(v),find(k(v)) compose(h,k) % 结果一样ans=1/(1+sin(v)^2)l finverse表达式譬如f(x)的函数逆g(x),满足g(f(x))=x。例如,的函数逆是ln(x),因为ln()=x。sin(x)的函数逆是arcsin(x),函数的函数逆是arcsin。函数finverse返回表达式的函数逆。如果解不是唯一就给出警告。>> syms x a b c d z>> finverse(1/x) % the inverse of 1/x is 1/x since ' 1/(1/x)=x ' ans=1/x>> finverse(x^2 ) % g(x^2)=x has more than one solutionWarning: finverse(x^2) is not uniqueans=x^(1/2)>> finverse(a*x+b ) % find the solution to ' g(f(x))=x ' ans=-(b-x)/a>> finverse( a*b+c*d-a*z ,' a ' ) % find the solution to ' g(f(a))=a ' ans=-(c*d-a)/(b-z)l symsum求表达式的序列和有四种形式:symsum(f)返回;symsum(f,' s ' )返回,symsun(f,a,b)返回;symsun(f, ' s ' ,a,b)返回。1. ,它应返回: 。>> syms n x %一定要定义符号变量,即使是x>> symsum(x^2)ans=1/3*x^3-1/2* x^2+1/6*x2. ,它应返回。>> symsum((2*n-1)^2,1,n)ans=11/3*n+8/3-4*(n+1)^2+4/3*(n+1)^33.,返回应是。>> syms n>> symsum( 1/(2*n-1)^2,1,inf)ans=1/8*pi^2变量替换:subs 将某个符号变量用另一个符号变量来表示。格式:subs(f,old,new)如:>> f= ' a*x^2+b*x+c ' % create a function f(x)f=a*x^2+b*x+c>> subs(f,'x','s') % substitute ' s ' for ' x ' in the expression f ans=a*s^2+b*s+c>> subs(f,'a','alpha') % substitute ' alpha ' for ' a ' in f ans=alpha*x^2+b*x+c求符号表达式的函数值为了得到数字,需要使用函数eval 来转换字符串。>> syms x>> f=symsum(x^2)>> x=2>> eval(f)第 3 节 微积分(Calculus)函数微分和积分广泛地用在许多工程学科,这部分的主要函数有:diff():Differentiate.(微分)Int():Integrate(积分)Jacobian():Jacobian matrix(雅可比行列式)Limit():Limit of an expression.(极限)Symsum():Summation of series(序列和)Taylor():Taylor series expansion(泰勒级数)微分和差分:diff>> f= ' a*x^3+x^2-b*x-c ' % define a symbolic expressionf=a*x^3+x^2-b*x-c>> diff(f) % differentiate with respect to the default variable xans=3*a*x^2+2*x-b>> diff(f,'a ') % differentiate with respect to aans=x^3>> diff(f,2) % differentiate twice with respect to xans=6*a*x+2>> diff(f,' a ',2) % differentiate twice with respect to aans=0>> m=[(1: 8).^2)] % create a vectorM=1 4 9 16 25 36 49 64 >> diff(M) % find the differences between elementsans=3 5 7 9 11 13 15 如果diff的表达式或可变参量是数值,MATLAB就非常巧妙地计算其数值差分;如果参量是符号字符串或变量,MATLAB就对其表达式进行微分。积分int:格式:int(f),其中f是一符号表达式,它力图求出另一符号表达式F使diff(F)=f。注意:积分或逆求导不一定是以封闭形式存在,或存在但软件也许找不到,或者软件可明显地求解,但超过内存或时间限制。当MATLAB不能找到逆导数时,它将返回未经计算的命令。>> int( ' log(x)/exp(x^2) ' ) % attempt to integrateans=log(x)/exp(x^2)积分函数的多种形式:int(f):相对于缺省的独立变量x求逆导数int(f,' s '):相对于符号变量s积分int(f,a,b)和int(f,' s ',a,b):a,b是数值,求解符号表达式从a到b的定积分int(f,' m ' ,' n ')和形式int(f,' s ',' m ',' n '):其中m,n是符号变量,求解符号表达式从m到n的定积分。>> f=' sin(s+2*x) ' % crate a symbolic functionf=sin(s+2*x)>> int(f) % integrate with respect to xans=-1/2*cos(s+2*x)>> int(f,' s ') % integrate with respect to sans=-cos(s+2*x)>> int(f,pi/2,pi) % integrate with respect to x from /2 to ans=-cos(s)>> int(f,' s ',pi/2,pi) % integrate with respect to s from /2 to ans=2*cos(x)^2-1-2*sin(x)*cos(x) >> int(f,' m ',' n ') % integrate with respect to x from m to nans=-1/2*cos(s+2*n)+1/2*cos(s+2*m)diff 和 int 均可以对符号数组的每一个元素进行运算。>> F=sym( '[a*x,b*x^2;c*x^3,d*s] ' ) % create a symbolic array F = [ a*x, b*x^2][ c*x^3, d*s]>> int(F) % ubtegrate the array elements with respect to xans=[1/2*a*x^2,1/3*b*x^3][1/4*c*x^4, d*s*x]第 4 节 数字信号处理常用Matlab函数简介一、 典型离散信号表示方法1.单位冲击序列δ(n)δ(n)可以用zero函数来实现:x=zeros(1,N);x(1)=1;2.单位阶跃序列u(n) 可以用ones函数来实现 X=ones(1,N);3.正弦序列 n=0:N-1;x=A*sin(2*pi*f*n*Ts);4.指数序列 N=1:N; X=a.*^n;5.复指数序列n=0:N-1;x=exp(j*w*n);6.随机序列 Rand(1,N) :产生[0,1]上的均匀分布的随机序列; Rand(1,N) :产生均值为0,方差为1的高斯随机序列,即白噪声序列。二、 滤波器分析与实现 滤波器分析与实现常用函数abs求绝对值angle求相角conv求卷积conv2求二维卷积deconv翻卷积f1 filt重叠相加法fft滤波器实现filter直接滤波器实现filter2二位数字滤波器filtfilt零相位数字滤波器filticFilter初始条件选择freqs模拟滤波器频率响应freqspace画出频率响应曲线freqz数字滤波器频率响应freqzplot画出频率响应曲线gGrpdelay平均滤波延迟latcfilt格型滤波实现impz数字滤波器中的单位冲击响应medfilt1一维中值滤波sosfilt二次分式滤波器实现zplane离散系统零、极点图upfirdn上抽样unwrap去除相位1. absy=abs(x) 计算x的绝对值,当x为复数时,其算其模值。当x为字符串时,计算各个字符的ASCII码。2. angle φ= angle(h) 计算复矢量或者复矩阵的相角(以弧度为单位),相角介于-л~л之间。3.convc=conv(a,b) 对序列a,b进行卷积运算。4.filtery=filter(b,a,x)  计算输入信号x的滤波器输出,向量a,b分别是所采用的滤波器的分子系数向量和滤波器的分母向量。[y,zf]=filter(b,a,x,zi)  参数zi指定滤波器的初始条件,其大小为zi=max(length(a),length(b))-1y=filter(b,a,x,zi,dim) dim指定滤波器的维数。'zi'=[]或0表示空集。5. impz [h,t]=impz(b,a)  返回参数h是冲击相应的数值;返回t是冲击相应的抽样时间间隔。 [h,t]=impz(b,a,N) N用来制定冲激信号长度。如果N是一个整数向量,只返回N元素所对应时刻的抽样数值的冲击结果。N为[],表示不制定冲激信号的长度,其长度与滤波器结构保持一致。 [h,t]=impz(b,a,N,fs)  Fs用来指定冲击信号的抽样频率,默认值是1。三、 信号变换                      常用变换函数cztChirp z变换dct离散余弦变换dftmtx离散傅里叶变换fft一维快速傅里叶变换fft2二维快速傅里叶变换fftshift重新排列fft输出HilbertHilbert变换idct离散余弦反变换ifft一维快速傅里叶反变换ifft2二维快速傅里叶反变换1. fftY=fft(X)若X是向量,则采用傅里叶变换求解X离散傅里叶变换;若X是矩阵,则计算该矩阵每一列的离散傅里叶变换。Y=fft(X,N)N是进行离散傅里叶变换的X的数据长度,可以通过对X进行补或截取来实现。Y=fft(X,[],dim)在参数dim指定的维上进行傅里叶变换。X是矩阵时,dim用来指变换的实施方向:dim=1,表明变换按列进行;dim=2,表明变换按行进行。第 5 节 方程求解一、 求解单个变量的代数方程:利用 solve函数1.没有=号的表达式,用solve将其置成等于0。>> solve( ' a*x^2+b*x+c ' ) % solve for the roots of the quadratic equtionans=[1/2/a*(-b+(b^2-4*a*c)^1/2)][1/2/a*(-b-(b^2-4*a*c)^1/2)]注:方程有2个解。2.对其他非缺省变量求解,在 solve 中指定出该变量。>> solve( ' a*x^2+b*x+c ' , ' b ' ) % solve for bans=-(a*x^2+c)/x3.对带有等号的方程求解。>> f=solve( ' cos(x)=sin(x) ' ) % solve for xf=1/4*pi>> t=solve( ' tan(2*x)=sin(x) ' )t =[ 0][ pi][ atan(1/2*(-2*3^(1/2))^(1/2),1/2+1/2*3^(1/2))][ atan(-1/2*(-2*3^(1/2))^(1/2),1/2+1/2*3^(1/2))][ atan(1/2*2^(1/2)*3^(1/4)/(1/2-1/2*3^(1/2)))+pi][ -atan(1/2*2^(1/2)*3^(1/4)/(1/2-1/2*3^(1/2)))-pi]二、 单个常微分方程求解:利用 dsovle函数dsovle 函数的句法:用字母D来表示求微分,D2,D3等等表示二阶、三阶微分,并以此来设定方程。任何D后所跟的字母为因变量。方程=0用符号表达式D2y=0来表示。独立变量可以指定或由symvar规则选定为缺省。例1,求一阶方程dy/dx=1+y2的解,其通解为:>> dsolve( ' Dy=1+y^2 ' ) % find the general solutionans=tan(t+C1) %C1是积分常数给定初值y(0)=1的方程的解:>> dsolve('Dy=1+y^2 ',' y(0)=1 ') % add an initial conditiony=tan(t+1/4*pi)指定独立变量:>> dsolve(' Dy=1+y^2 ',' y(0)=1 ',' v ') % find solution to dy/dvans=tan(v+1/4*pi)例2:求二阶微分方程的解,方程有两个初始条件: =cos(2x)-y (0)=0 y(0)=1>> y=dsolve('D2y=cos(2*x)-y ',' Dy(0)=0 ',' y(0)=1 ','x')y=(1/6*cos(3*x)-1/2*cos(x))*cos(x)+(1/2*sin(x)+1/6*sin(3*x))*sin(x)+4/3*cos(x) >> y=simple(y) % y looks like it can be simplifiedy=-1/3*cos(2*x)+4/3*cos(x)例3:求解下列形式的微分方程--y=0通解为: >> y=dsolve( 'D2y-2*Dy-3*y=0 ','x')y =C1*exp(-x)+C2*exp(3*x)加上初始条件:y(0)=0和y(1)=1可得到:>> y=dsolve( 'D2y-2*Dy-3*y=0 ','y(0)=0','y(1)=1','x')y=1/(exp(-1)-exp(3))*exp(-x)-1/(exp(-1)-exp(3))*exp(3*x)>> y=simple(y) % this looks like a candidate for simplificationy=(exp(-x)-exp(3*x))/(exp(-1)-exp(3))>> pretty(y) % pretty it up exp(-x)-exp(3 x)- --------------------- exp(3) -exp(-1)小结下列各表综合了符号数学工具箱的特性: 符号表达式的运算eval符号到数值的转换Pretty显示悦目的符号输出Subs替代子表达式Sym建立符号矩阵或表达式Symadd符号加法Symdiv符号除法Symmul符号乘法Symop符号运算Sympow符号表达式的幂运算Symrat有理近似Symsub符号减法Symvar求符号变量符号表达式的简化Collect合并同类项Expand展开Factor因式Simple求解最简形式Simplify简化symsum 和级数符号多项式Charpoly特征多项式Horner嵌套多项式表示Numden分子或分母的提取poly2sym多项式向量到符号的转换sym2poly符号到多项式向量的转换符号微积分Diff微分Int积分Jordan约当标准形Taylor泰勒级数展开符号可变精度算术Digits设置可变精度Vpa可变精度计算求解符号方程Compose函数的复合Dsolve微分方程的求解Finverse函数逆Linsolve齐次线性方程组的求解Solve代数方程的求解符号线性代数Charploy特征多项式Determ矩阵行列式的值Eigensys特征值和特征向量Inverse矩阵逆Jordan约当标准形Linsolve齐次线性方程组的解Transpose矩阵的转置离散信号的表示法第三章 函数绘图数据图形能使视觉感官直接感受到数据的许多内在本质,发现数据的内在联系。MATLAB可以表达出数据的二维,三维,甚至四维的图形。第 1 节 二维图形一、 基本平面图形绘制命令:plot功能 线性二维图。格式 plot(X,’s’) X为实向量的时候,以该向量元素的下标为横坐标,元素值为纵坐标,绘出一条连续曲线。 plot(X,Y) X,Y为同维向量时,绘制以X、Y元素为横、纵坐标的曲线。 X为向量,Y为一维或多维矩阵时,绘出多条不同颜色的曲线。X为这些曲线共同的横坐标。plot(Y):Y的维数为m,则plot(Y)等价于plot(x,Y),其中x=1:mplot(X1,Y1,X2,Y2,…),其中Xi与Yi成对出现plot(X1,Y1,LineSpec1,X2,Y2,LineSpec2…) 将按顺序分别画出由三参数定义Xi,Yi,LineSpeci的线条。其中参数LineSpeci指明了线条的类型,标记符号,和画线用的颜色。可混合使用三参数和二参数的形式:plot(X1,Y1,LineSpec1,X2,Y2,X3,Y3,LineSpec3)plot(…,'PropertyName',PropertyValue,…) 对图形对象中指定的属性进行设置。h = plot(…) 返回line图形对象句柄的一列向量,一线条对应一句柄值。允许用户对线条定义的属性1.线型定义符---:-.线型实线(缺省值)划线点线点划线2.线条宽度 ’LineWidth’指定线条的宽度,取值为整数(单位为像素点)3.颜色定义符R(red)G(green)b(blue)c(cyan)颜色红色绿色兰色青色定义符M(magenta)y(yellow)k(black)w(white)颜色品红黄色黑色白色4.标记类型定义符+O(字母)*.x标记类型加号小圆圈星号实点交叉号定义符d^v><标记类型棱形向上三角形向下三角形向右三角形向左三角形定义符shP标记类型正方形正六角星正五角星5.标记大小:'MarkerSize’指定标记符号的大小尺寸,取值为整数(单位为像素)6.标记面填充颜色'MarkerFaceColor'指定用于填充标记符面的颜色。取值见上表。7.标记周边颜色 'MarkerEdgeColor'指定标记符颜色或者是标记符(小圆圈、正方形、棱形、正五角星、正六角星和四个方向的三角形)周边线条的颜色。取值见上表。坐标轴的设置创建图形时,用户可以制定坐标的范围、数据间隔及坐标名称。用命令axis可以控制坐标轴的刻度及形式。axis[Xmin ,Xmax,Ymin,Ymax]直角坐标图形的纵横比在默认的情况下与窗口纵横比相同,用axis可以控制图形纵横比的格式如下:axis aquare :将两个轴的长度设置为相等;axis equal :将坐标轴的标记检举设置为相等;axis equal tight :将图形以紧缩的方式显示。例:t=(pi*(0:1000)/1000);y1=sin(t);y2=sin(10*t);y12=sin(t).*sin(10*t);plot(t,y1);axis([0,pi,-1,-1])图形标志图形标志包括图名、坐标轴名、图形注释和图例,常用格式如下:Title(s) :书写图名;Xlable(s) :横坐标轴名;Ylable(s) :纵坐标轴名;Legend(s1,s2,…) :绘制曲线所用线型、色彩或数据点形图例;Text(xt,yt,s) :在图面(xt , yt)坐标处书写字符注释。多子图Matlab允许用户在同一图形框内布置几幅独立的子图。subplot(m,n,k) %使m*n幅子图中的第k幅成为当前图。图形中有m*n幅图,k是子图的编号。子图的序号原则是:左上方为第一幅,向右、下依次排号。subplot产生的子图相互独立,所有绘图指令均可以在子图中应用。参数LineSpec的说明:参数LineSepc可以定义线条的三个属性:线型、标记符号和颜色。对线条的上述属性的定义用字符串来定义,如:plot(x,y,'-.or'),表示画点划线(-.),在数据点(x,y)处画出小圆圈(o),线和标记都用红色画出。注:字符串中的字母、符号可任意组合。若仅仅指定了标记符,而没有指定非线型,则plot只在数据点画出标记符,如:plot(x,y,’d’)。例1 >>t = 0:pi/20:2*pi; plot(t,t.*cos(t),'-.r*') hold on plot(exp(t/100).*sin(t-pi/2),'--mo') plot(sin(t-pi),':bs') >>hold off例2 >> t=1:0.1:10plot(t,sin(2*t),'-mo','LineWidth',2,... 'MarkerEdgeColor','k',... 'MarkerFaceColor',[0.49,1,0.63],... 'MarkerSize',5)二、 一元函数y=f(x)的绘图命令 fplot fplot采用自适应步长控制来画出函数function的示意图,在函数的变化激烈的区间,采用小的步长,否则采用大的步长。总之,使计算量与时间最小,图形尽可能精确。注意:必须是函数,可以是一个m-文件函数或者是一个包含符号变量的函数,如:’sin(x)*exp(2*x)’,’[sin(x),cos(x)]’。格式:fplot('function',limits) 在指定的范围limits内画出一元函数图形。其中limits是一个指定x-轴范围的向量[xmin xmax]或者是x轴和y轴的范围的向量[xmin xmax ymin ymax]。 fplot('function',limits,LineSpec) 用指定的线型LineSpec画出函数function。 fplot('function',limits,tol) 用相对误差值为tol画出函数function。相对误差的缺省值为2e-3。 fplot('function',limits,tol,LineSpec) 用指定的相对误差值tol和指定的线型LineSpec画出函数function的图形。 fplot('function',limits,n) 当n>=1,则至少画出n+1个点(即至少把范围limits分成n个小区间),最大步长不超过(xmax-xmin)/n。 fplot(‘function’,lims,…) 允许可选参数tol,n和LineSpec以任意组合方式输入。 [X,Y] = fplot('function',limits,…) 返回横坐标与纵坐标的值给变量X和Y,此时fplot不画出图形。若想画出,可用命令plot(X,Y)。 […] = plot('function',limits,tol,n,LineSpec,P1,P2,…) 允许用户直接给函数function输入参数P1,P2等,其中函数functiond的定义形式为 y = function(x,P1,P2,…) 若想用缺省的tol,n或LineSpec值,只需将空矩阵([ ])传递给函数即可。>>fplot('tanh',[-2 2])>>subplot(2,2,1);fplot('humps',[0 1])subplot(2,2,2);fplot('abs(exp(-j*x*(0:9))*ones(10,1))',[0 2*pi])subplot(2,1,2);fplot('[tan(x),sin(x),cos(x)]',2*pi*[-1 1 -1 1]) 三、 快速函数作图: ezplot(Easy to use function plotter)例如>> y=' 16*x^2+64*x+96 ' % expression to ploty=16*x^2+64*x+96>> ezplot(y)图3.1 符号函数16*x^2+64*x+96 (-2≤x≤2)图3.2 符号函数16*x^2+64*x+96 0≤x≤6图3.1,ezplot绘制了定义域为-2≤x≤2的给定符号函数,如果感兴趣的时间是从0到6。需要指定范围,即>> ezplot(y,[0 6]) % plot y for 0≤x≤6函数 ezplot格式:ezplot(f):f(x) over the default domain: -2pi < x < 2pi f(x,y) = 0 over the default domain –2pi < x < 2pi, -2pi < y < 2piezplot(f,[min,max]):f(x) over min < x < max.f(x,y) = 0 over min < x < max and min < y < maxezplot(f,[xmin,xmax,ymin,ymax]):f(x,y) = 0 over xmin < x < xmax and ymin < y < ymax.ezplot(x,y):x = x(t) and y = y(t) over the default domain 0 < t < 2ezplot(x,y,[tmin,tmax]):x = x(t) and y = y(t) over tmin < t < tmax绘制多条曲线:采用 hold on 或者 Y 为 二维向量定义myfun函数 function Y = myfun(x)Y(:,1) = 200*sin(x(:))./x(:);Y(:,2) = x(:).^2;ezplot('myfun',[-20 20]);注:ezplot 等价于 fplot 加上 title 和 xlabel、ylable>> fplot('myfun',[-20 20])title('myfun') , xlabel('x'), ylabel('y')四、 读取二维灰度图像I=imread('E:\图像\131.bmp')第 2 节 三维图形一、 三维曲线、面填色命令命令1 comet3功能 三维空间中的彗星图。彗星图为一个三维的动画图像,彗星头(一个小圆圈)沿着数据指定的轨道前进,彗星体为跟在彗星头后面的一段痕迹,彗星轨道为整个函数所画的实曲线。注意一点的是,该彗星轨迹的显示模式EraseMode为none,所以用户不能打印出彗星轨迹(只能得到一个小圆圈),且若用户调整窗口大小,则彗星会消失。用法 comet3(z) 用向量z中的数据显示一个三维彗星图7-24 comet3(x,y,z) 显示一个彗星通过数据x,y,z确定的三维曲线。 comet3(x,y,z,p) 指定彗星体的长度为:p*length(y)。例7-24>>t = -20*pi:pi/50:20*pi;>>comet3((cos(2*t).^2).*sin(t),(sin(2*t).^2).*cos(t),t);图形的结果为图7-24。命令2 fill3功能 用指定的颜色填充三维多边形。阴影类型为平面型和Gouraud型。用法 fill3(X,Y,Z,C) 填充由参数x,y和z确定多边形。若x,y或z为矩阵,fill3生成n个多边形,其中n为矩阵的列数。在必要的时候,fill3会自动连接最后一个节点和第一个节点。以便能形成封闭的多边形。参数c指定颜色,这儿c为引用当前色图的下标向量或矩阵。若c为行向量,则c的维数必须等于x的列数和y的列数,若c为列向量,则c的维数必须等于矩阵x的行数和y 的行数。 fill3(X,Y,Z,ColorSpec) 用指定的颜色ColorSpec填充由x,y和z确定的多边形。 fill3(X1,Y1,Z1,C1,X2,Y2,Z2,C2,…) 对多边形的不同区域用不同的颜色进行填充。 fill3(…,'PropertyName',PropertyValue) 允许用户对特定的patch属性进行设置。 h = fill3(…) 返回patch图形对象的句柄向量,每一块(patch)对应一个句柄。运算规则:1.若X,Y,Z为同型的矩阵,fill3生成X,Y,Z中相同位置的元素确定的顶点,每一列生成一个多边形。2.若只有X,Y或Z为矩阵,则fill3由列向量参数生成可用的同型矩阵。3.若用户对填充的颜色指定为ColorSpec,则fill3生成阴影类型为flat-shaded的多边形,且设置块(patch)的属性FaceColor为RGB颜色形式的矩阵。4.若用户用矩阵C指定颜色,命令fill3通过坐标轴属性Clim来调整C中的元素,在引用当前色图之前,用于指定颜色坐标轴的参数比例。5.若参数C为一行向量,命令fill3生成带平面阴影(flat-shaded)的多边形,同时设置补片对象的面颜色(FaceColor)属性为flat。向量c中的每一元素成为每一补片对象的颜色数据(CData)属性的值。6.若参数C为一矩阵,命令fill3生成带内插颜色的多边形,同时设置多边形补片对象的FaceColor属性为interp。命令fill3采用对多边形顶点色图的下标指定的颜色采用线性内插算法,同时多边形的颜色采用对顶点颜色用内插算法得到的颜色。矩阵C的每一列元素变成对应补片对象的Cdata属性值。7.若参数C为一列向量,命令fill3先复制C的元素,使之成为所需维数的矩阵,再按上面的方法6进行计算。例7-25>>X = 10*rand(4);Y=10*rand(4);Z=10*rand(4);>>C = rand(4);>>fill3(X,Y,Z,C)图7-25图形结果可能为图7-25。二、 7.2.2 三维图形等高线命令1 contour功能 曲面的等高线图用法 contour(z) 把矩阵z中的值作为一个二维函数的值,等高曲线是一个平面的曲线,平面的高度v是Matlab自动取的; contour(x,y,z) (x,y)是平面z=0上点的坐标矩阵,z为相应点的高度值矩阵。效果同上; contour(z,n) 画出n条等高线; contour(x,y,z,n) 画出n条等高线; contour(z,v) 在指定的高度v上画出等高线; contour(x,y,z,v) 同上;图7-26 [c,h] = contour(…) 返回如同contourc命令描述的等高矩阵c和线句柄或块句柄列向量h,这些可作为clabel命令的输入参量,每条线对应一个句柄,句柄中的userdata属性包含每条等高线的高度值; contour(…,’linespec’) 因为等高线是以当前的色图中的颜色画的,且是作为块对象处理的,即等高线是一般的线条,我们可象画普通线条一样,可以指定等高线的颜色或者线形。例7-26 >>contour(peaks(40))图形结果为图7-26。命令2 clabel功能 在二维等高线图中添加高度标签。在下列形式中,若有h出现,则会对标签进行恰当的旋转,否则标签会竖直放置,且在恰当的位置显示个一个“+”号。用法 clabel(C,h) 把标签旋转到恰当的角度,再插入到等高线中。只有等高线之间有足够的空间时才加入,当然这决定于等高线的尺度。 clabel(C,h,v) 在指定的高度v上显示标签h,当然要对标签做恰当的处理。 clabel(C,h,'manual') 手动设置标签。用户用鼠标左键或空格键在最接近指定的位置上放置标签,用键盘上的回车键结束该操作。当然会对标签做恰当的处理。 clabel(C) 在从命令contour生成的等高线结构c的位置上添加标签。此时标签的放置的位置是随机的。图7-27 clabel(C,v) 在给定的位置v上显示标签 clabel(C,'manual') 允许用户通过鼠标来给等高线贴标签例7-27>>[x,y] = meshgrid(-2:.2:2); >>z = x.*y.*exp(-x.^2-y.^2);>>[C,h] = contour(x,y,z);>>clabel(C,h);图形结果为图7-27。命令3 contourc功能 低级等高线图形计算命令。该命令计算等高线矩阵c,该矩阵可用于命令contour,contour3和contourf等。矩阵z中的数值确定平面上的等高线高度值,等高线的计算结果用由矩阵z维数决定的间隔的宽度。用法 C = contourc(Z) 从矩阵z中计算等高矩阵,其中z的维数至少为2*2阶,等高线为矩阵z中数值相等的单元。等高线的数目和相应的高度值是自动选择的。 C = contourc(Z,n) 在矩阵z中计算出n个高度的等高线。 C = contourc(Z,v) 在矩阵z中计算出给定高度向量v上计算等高线,当然向量v的维数决定了等高线的数目。若只要计算一条高度为a的等高线,输入:contourc(Z,[a,a]); C = contourc(x,y,Z) 在矩阵z中,参量x,y确定的坐标轴范围内计算等高线; C = contourc(x,y,Z,n) 从矩阵Z中,参量x与y确定的坐标范围内画出n条等高线;
展开阅读全文
  语墨文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
0条评论

还可以输入200字符

暂无评论,赶快抢占沙发吧。

关于本文
本文标题:MATLAB精彩资料数学建模教学教育资料.doc
链接地址:http://www.wenku38.com/p-145157.html

                                            站长QQ:1002732220      手机号:18710392703    


                                                          copyright@ 2008-2020 语墨网站版权所有

                                                             经营许可证编号:蜀ICP备18034126号

网站客服微信
收起
展开