首页 MATLAB2010教程教程

MATLAB2010教程教程

举报
开通vip

MATLAB2010教程教程第一章 MATLAB基础知识 第1 MATLAB基础知识 Matlab产生的背景: MATrix LABoratory(矩阵实验室)的缩写 利用C语言等高级语言编写程序,过程比较烦琐,普通用户掌握起来较难。 不希望把时间过多的花在编程序上而忽略了问题本身的研究 第 1 Matlab 基本知识 1、​ Matlab 的主要功能 Matlab是一种功能非常强大的工程语言,诞生于20世纪70年代,1984年正式推向市场。2002年8月,Matlab6.5开始发布。是进行科学研究和产品开发必不可少的工具。 ​ 数值和符...

MATLAB2010教程教程
第一章 MATLAB基础知识 第1 MATLAB基础知识 Matlab产生的背景: MATrix LABoratory(矩阵实验室)的缩写 利用C语言等高级语言编写程序,过程比较烦琐,普通用户掌握起来较难。 不希望把时间过多的花在编程序上而忽略了问题本身的研究 第 1 Matlab 基本知识 1、​ Matlab 的主要功能 Matlab是一种功能非常强大的工程语言,诞生于20世纪70年代,1984年正式推向市场。2002年8月,Matlab6.5开始发布。是进行科学研究和产品开发必不可少的工具。 ​ 数值和符号计算 矩阵(数组)的四则运算(Matrix+Laboratory)、数值差分、导数、积分、求解微分方程、微分方程的优化等 ​ 数字图像、数字信号处理 ​ 工程和科学绘图 ​ 控制系统设计 ​ 财务工程 ​ 建模、仿真功能 2、​ Matlab 的界面 1.命令窗口(Command Window): Matlab各种操作命令都是由命令窗口开始,用户可以在命令窗口中输入Matlab命令,实现其相应的功能。此命令窗口主要包括文本的编辑区域和菜单栏(如:四则运算;“;”禁止显示变量的值;↑↓遍历以前的命令)。在命令窗口空白区域单击鼠标右键,打开快捷菜单,各项命令功能如下: Evaluate Selection :打开所选文本对应的表达式的值。 Open Selection :打开文本所对应的MatLab文件。 Cut :剪切编辑命令。 Paste :粘贴编辑命令。 2. M-文件编辑/调试(Editor/Debugger)窗口 Matlab Editor/Debugger窗口是一个集编辑与调试两种功能于一体的工具环境。 M-文件(函数文件) ​ 什么是M-文件:它是一种和Dos环境中的批处理文件相似的脚本文件,对于简单问题,直接输入命令即可,但对于复杂的问题和需要反复使用的则需做成M-文件(Script File)。 ​ 创建M-文件的方法: Matlab命令窗的File/New/M-file。 在Matlab命令窗口运行edit。 ​ M-文件的扩展名: *.m ​ 执行M-文件:F5 ​ M文件的调试 选择Debug菜单,其各项命令功能如下: Step :逐步执行程序。 Step in :进入子程序中逐步执行调试程序。 Step out :跳出子程序中逐步执行调试程序。 run:执行M-文件。 Go Until Cursor :执行到光标所在处。 Exit Debug Mode :跳出调试状态。 ​ 函数文件的创建要求:文件名与函数名必须相同,如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 等。 、关于变量 变量命名规则: ​ 变量名是不包含空格的单个词 ​ 变量名区分大小写 ​ 变量名必须以字母开头的字母、数字、下划线的组合,最多19个字符。 ​ Matlab提供的标准函数名均以小写字母开头 特殊变量名: ​ ans 缺省变量名 ​ pi 圆周率 ​ i,j 虚数单位 ​ eps 无穷小 ​ inf ,Inf 无穷大 ​ realmax 最大正实数 ​ realmin 最小正实数 清除变量的值 ​ clear ​ clear 变量名1 变量名2 显示驻留内存的变量名 ​ who ​ whos 第 2 Matlab编程 1矩阵(数组)的输入 1、直接输入 直接按行方式输入每个元素:同一行中的元素用逗号(,)或者用空格符来分隔,且空格个数不限;不同的行用分号(;)分隔。所有元素处于一方括号([ ])内;多维矩阵用多重方括弧。可建立复数矩阵 如: Null_M = [ ] %生成一个空矩阵 可建立复数矩阵 R=[1,2,3;4,5,6] I=[7,8,9;10,11,12] Z=R+I*j 2. 由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.矩阵的转置和逆矩阵 ​ X的转置:X’ ( 图像顺时针旋转90°,并水平镜像) 如:a=imread('D:\2-1.bmp'); b=a'; subplot(1,2,1),subimage(a),subplot(1,2,2),subimage(b) ​ X的逆矩阵 inv(X) 2矩阵元素的访问及其大小的确定 访问第n个元素: X(n)(n>=1) 访问多个元素: X ([n1,n2,n3……]) 或 X(1:10) 确定元素的个数: numel(X) 确定矩阵的大小: [m,n,l]=size(X) 3矩阵的算数运算 ​ 数与矩阵的运算:m等价于m. m+A : m与A中各元素相加 m-A : m与A中各元素相减 m×A : m与A中各元素相乘 m. /A : m除以A中各元素 (没有m/A) m \ A : A中各元素除以m ​ 矩阵与矩阵的运算 A+B: A、B对应元素相加 A-B: A、B对应元素相减 A×B: A、B矩阵按线性代数中矩阵乘法运算进行相乘(注意维数匹配) A.*B: A、B对应元素相乘(注意维数相同) A / B: A除以B矩阵 (A×B-1)(注意维数匹配) A./B: A除以B中各元素 A \ B: B除以A矩阵 (A-1×B)(注意维数匹配) A.\B: B除以A中各元素 A^m: 相当于矩阵A×矩阵A×矩阵A…….(m为小数即是矩阵的开方运算)(注意维数匹配) A.^m:矩阵A中各元素的m次方 A.^B:矩阵A中各元素的进行B中对应元素次方(注意维数相同) 4关系运算 <、<=、>、>=、= =、~ = 六种关系运算符。关系成立结果为1,否则为0。 5逻辑运算 设矩阵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。 6集合运算 1.两个集合的交集 intersect 2.检测集合中的元素 ismember 3.两集合的差 setdiff 4.两个集合交集的非(异或)函数 setxor 5.两集合的并集 union 6.取集合的单值元素 unique 7MatLab的控制流 由各种语句构成 语句后面加“;”号,不显示运算结果 %开头表示是注释语句 赋值语句 变量=表达式 表达式 (相当于将值付给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 = 10946 i = 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='不及格'; %列为'不及格'等级 end end %将学生姓名,得分,登记等信息打印出来。 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的最后一行。 end lasterr %显示出错原因 A_end = 4 9 2 ans = Index exceeds matrix dimensions. 第2 符号数学工具(Symbolic Math Toolbox) 第 1 符号表达式 ​ 符号表达式是代表数字、函数、算子和变量的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 ' ) 注意:加单引号’’表示是一个符号表达式而不是数字表达式。 ​ 符号函数:让用户操作上述符号表达式的方法和函数,比如: >> diff( 'cos(x)' ) % differentiate cos(x) with respect to x ans= -sin(x) >> M=sym( '[a,b;c,d] ') % create a symbolic matrix M M= [a,b] [c,d] 注意:1.建立符号数组时,最好用上函数sym 2.许多符号函数可以自动将字符转变为符号表达式。例如diff cos(x) 也可以, >> diff x^2+3*x+5 % the argument is equivalent to ' x^2+3*x+5 ' ​ 符号变量是符号表达式中的变量,如:’x+3*y+z’中的x,y,z。 ​ 独立变量是当符号表达式中含有多于一个的变量时,只有一个变量是独立变量。缺省的独立变量是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 variable ans= 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 variable ans= cos(omega) 第 2 符号表达式运算(目的:更方便的构造符号表达式) 标准代数运算: symadd、symsub、symlnul、symdiv:分别为加、减、乘、除两个表达式 sympow:将一个表达式上升为另一个表达式的幂次 例如:给定两个函数 >> f= ' 2*x^2+3*x-5 ' % define the symbolic expression f= 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-g ans= x^2+4*x-12 >> symmul(f,g) % find an expression for f*g ans= (2*x^2+3*x-5)*(x^2-x+7) >> symdiv(f,g) % find an expression for f/g ans= (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 expression f= cos(x) >> g= ' sin(2*x) ' % create another expression g= sin(2*x) >> symop(f,'/ ',g,'+',3) % combine them ans= cos(x)/sin(2*x)+3 高级运算: compose:把f(x)和g(x)复合成f(g(x)); finverse: 求函数的逆函数; symsum:求表达式的序列和。 ​ 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) ​ 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 solution Warning: finverse(x^2) is not unique ans= 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) ​ 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*x 2. ,它应返回 。 >> symsum((2*n-1)^2,1,n) ans= 11/3*n+8/3-4*(n+1)^2+4/3*(n+1)^3 3. ,返回应是 。 >> 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 expression f= a*x^3+x^2-b*x-c >> diff(f) % differentiate with respect to the default variable x ans= 3*a*x^2+2*x-b >> diff(f,'a ') % differentiate with respect to a ans= x^3 >> diff(f,2) % differentiate twice with respect to x ans= 6*a*x+2 >> diff(f,' a ',2) % differentiate twice with respect to a ans= 0 >> m=[(1: 8).^2)] % create a vector M= 1 4 9 16 25 36 49 64 >> diff(M) % find the differences between elements ans= 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 integrate ans= 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 function f= sin(s+2*x) >> int(f) % integrate with respect to x ans= -1/2*cos(s+2*x) >> int(f,' s ') % integrate with respect to s ans= -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 n ans= -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 x ans= [1/2*a*x^2,1/3*b*x^3] [1/4*c*x^4, d*s*x] 第 4 数字信号处理常用Matlab函数简介 1典型离散信号表示方法 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的高斯随机序列,即白噪声序列。 2滤波器分析与实现 滤波器分析与实现常用函数 abs 求绝对值 angle 求相角 conv 求卷积 conv2 求二维卷积 deconv 翻卷积 f1 filt 重叠相加法fft滤波器实现 filter 直接滤波器实现 filter2 二位数字滤波器 filtfilt 零相位数字滤波器 filtic Filter初始条件选择 freqs 模拟滤波器频率响应 freqspace 画出频率响应曲线 freqz 数字滤波器频率响应 freqzplot 画出频率响应曲线 gGrpdelay 平均滤波延迟 latcfilt 格型滤波实现 impz 数字滤波器中的单位冲击响应 medfilt1 一维中值滤波 sosfilt 二次分式滤波器实现 zplane 离散系统零、极点图 upfirdn 上抽样 unwrap 去除相位 1.​ abs y=abs(x) 计算x的绝对值,当x为复数时,其算其模值。当x为字符串时,计算各个字符的ASCII码。 2. angle φ= angle(h) 计算复矢量或者复矩阵的相角(以弧度为单位),相角介于-л~л之间。 3.conv c=conv(a,b) 对序列a,b进行卷积运算。 4.filter y=filter(b,a,x)  计算输入信号x的滤波器输出,向量a,b分别是所采用的滤波器的分子系数向量和滤波器的分母向量。 [y,zf]=filter(b,a,x,zi)  参数zi指定滤波器的初始条件,其大小为 zi=max(length(a),length(b))-1 y=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。 3信号变换                       常用变换函数 czt Chirp z变换 dct 离散余弦变换 dftmtx 离散傅里叶变换 fft 一维快速傅里叶变换 fft2 二维快速傅里叶变换 fftshift 重新排列fft输出 Hilbert Hilbert变换 idct 离散余弦反变换 ifft 一维快速傅里叶反变换 ifft2 二维快速傅里叶反变换 1.​ fft Y=fft(X) 若X是向量,则采用傅里叶变换求解X离散傅里叶变换;若X是矩阵,则计算该矩阵每一列的离散傅里叶变换。 Y=fft(X,N) N是进行离散傅里叶变换的X的数据长度,可以通过对X进行补或截取来实现。 Y=fft(X,[],dim) 在参数dim指定的维上进行傅里叶变换。X是矩阵时,dim用来指变换的实施方向:dim=1,表明变换按列进行;dim=2,表明变换按行进行。 第 5 方程求解 1求解单个变量的代数方程:利用 solve函数 1.没有=号的表达式,用solve将其置成等于0。 >> solve( ' a*x^2+b*x+c ' ) % solve for the roots of the quadratic eqution ans= [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 b ans= -(a*x^2+c)/x 3.对带有等号的方程求解。 >> f=solve( ' cos(x)=sin(x) ' ) % solve for x f= 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] 2单个常微分方程求解:利用 dsovle函数 dsovle 函数的句法:用字母D来表示求微分,D2,D3等等表示二阶、三阶微分,并以此来设定方程。任何D后所跟的字母为因变量。方程 =0用符号表达式D2y=0来表示。独立变量可以指定或由symvar规则选定为缺省。 例1,求一阶方程dy/dx=1+y2的解,其通解为: >> dsolve( ' Dy=1+y^2 ' ) % find the general solution ans= tan(t+C1) %C1是积分常数 给定初值y(0)=1的方程的解: >> dsolve('Dy=1+y^2 ',' y(0)=1 ') % add an initial condition y= tan(t+1/4*pi) 指定独立变量: >> dsolve(' Dy=1+y^2 ',' y(0)=1 ',' v ') % find solution to dy/dv ans= 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 simplified y= -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 simplification y= (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 矩阵的转置 离散信号的表示法 第3 函数绘图 数据图形能使视觉感官直接感受到数据的许多内在本质,发现数据的内在联系。MATLAB可以表达出数据的二维,三维,甚至四维的图形。 第 1 二维图形 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:m plot(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 > < 标记类型 棱形 向上三角形 向下三角形 向右三角形 向左三角形 定义符 s h P 标记类型 正方形 正六角星 正五角星 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:10 plot(t,sin(2*t),'-mo','LineWidth',2,... 'MarkerEdgeColor','k',... 'MarkerFaceColor',[0.49,1,0.63],... 'MarkerSize',5) 2一元函数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]) 3快速函数作图: ezplot(Easy to use function plotter) 例如 >> y=' 16*x^2+64*x+96 ' % expression to plot y= 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 < 2pi ezplot(f,[min,max]):f(x) over min < x < max. f(x,y) = 0 over min < x < max and min < y < max ezplot(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 < 2 ezplot(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') 4读取二维灰度图像 I=imread('E:\图像\131.bmp') 第 2 三维图形 1三维曲线、面填色命令 命令1 comet3 功能 三维空间中的彗星图。彗星图为一个三维的动画图像,彗星头(一个小圆圈)沿着数据指定的轨道前进,彗星体为跟在彗星头后面的一段痕迹,彗星轨道为整个函数所画的实曲线。注意一点的是,该彗星轨迹的显示模式EraseMode为none,所以用户不能打印出彗星轨迹(只能得到一个小圆圈),且若用户调整窗口大小,则彗星会消失。 用法 comet3(z) 用向量z中的数据显示一个三维彗星 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会自动连接最后一个节点和第一个节点
本文档为【MATLAB2010教程教程】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_960715
暂无简介~
格式:doc
大小:2MB
软件:Word
页数:87
分类:
上传时间:2011-09-16
浏览量:91