530 likes | 704 Views
多媒体信息处理系统设计. MATLAB 基础 http://www2.nbu.edu.cn/jiangzhidi/mediasystem http://bighand.zxq.net/mediasystem. 主讲:蒋志迪 宁波大学信息科学与工程学院 办公室:曹光彪信息楼 424 电话: 665929 email : bighandjzd@126.com. 主要内容. Matlab 概述 软件界面简介 变量、数组、矩阵和字符串 程序设计 符号运算. Matlab 概述. MATrix LABoratory
E N D
多媒体信息处理系统设计 MATLAB基础http://www2.nbu.edu.cn/jiangzhidi/mediasystem http://bighand.zxq.net/mediasystem 主讲:蒋志迪 宁波大学信息科学与工程学院 办公室:曹光彪信息楼424 电话:665929 email:bighandjzd@126.com
主要内容 • Matlab概述 • 软件界面简介 • 变量、数组、矩阵和字符串 • 程序设计 • 符号运算
Matlab概述 • MATrix LABoratory • 由美国Math Works公司开发 • 适合多学科、功能强大 • 发展自今,已集成科学计算、图像处理、声音处理……(包括微积分、代数、数值分析等) • 矩阵计算功能强大、还支持符号运算 • 高级课程的基本教学工具 • 直译式语言,比其他程序设计语言容易
MATLAB的主要特点 • 运算符和库函数极其丰富,语言简洁,编程效率高 • 图形功能强大 • 功能强大的工具箱 • 易于扩充
MATLAB发展历史 • MATLAB 是“ 矩阵实验室”( MATrix LABoratory)的缩写,最初版本是由 Cleve Moler 博士用 FORTRAN 语言开发的矩阵分析软件 80 年代初期,由 Cleve Moler 和 John Little采用 C 语言改写了 MATLAB 的内核。成立了 Mathworks 软件开发公司,并于1984 年将 MATLAB 正式推向市场。 • 1992年初推出了应用于 Windows 操作系统的 MATLAB 4.x 版本。 • 1997年推出 5.1 版本。 • 1998年推出 5.2 版本。 • 1999年推出 MATLAB 5.3 版本(Release 11) • 2000年又推出了更为简便易学的 MATLAB 6.0 版本(Release 12) • 2003年推出Matlab6.5.1 (Release 13) • 2004年推出Matlab7.0 (Release 14) • 2007年3月1日发布Matlab 2007a(支持多核操作) • 2008年10月9日发布MATLAB 2008b • 2009年9月4日Matlab R2009b • 2010年3月5日发布了Matlab R2010a(Matlab7.10)
软件界面简介 • 命令窗口 • 开始start面板 • 工作空间窗口 • 命令历史窗口 • 当前目录窗口 • M文件编辑窗口 • 图形窗口
2种工作方式 • 命令窗口Command Window中直接输入 • 最简单的计算器使用法 • M脚本文件(程序执行方式) • 使用M文件编辑窗口或其他纯文本编辑软件
Command Window命令窗口 1. 直接计算 (12+2*(7-4))/3^2 2. 变量、矩阵输入 A = [1,2,3; 4,5,6; 7,8,9] 或: A=[1,2,3 4,5,6 7,8,9] 通过反复按键盘的箭头键,实现指令回调和编辑
Matlab搜索路径设置 • 修改当前目录 • Current Directory当前目录浏览器 • CD命令 • 搜索目录设置(添加工具箱时比较有用) • 搜索路径设置器File—Set Path… • path命令
Matlab帮助系统 • 命令行帮助 • help 命令 / doc 命令 • 联机帮助 • helpwin/doc或者菜单操作“Help--MATLAB Help" • 演示帮助 • demo
变量与运算 • 变量无需预先定义类型 1)以字母开头,后面可跟字母,数字和下短线; 2)大小写字母有区别,不超过31个字符。 • 书写自由:多个表达式可以写在一行 • 表达式后面跟分号“;”,将不显示结果; • 跟‘,’或‘回车’,将显示表达式的计算结果; • 当一个表达式没写完就需换行时,应在该行末尾键入‘…’之后再回车换行。
数据显示格式 • format long (short、short e、rational等) • 复数 • 1+2i; 5-4*i
变量名 意义 help 线上说明, 如 help quit who 列出所有定义过的变量名称 ans 最近一次计算结果的变量名 eps MATLAB定义的正的极小值=2.2204e-16 pi 内建的π值 Inf 或 inf ∞值,正无穷大 NaN或nan 不定值 i 或 j 虚数单位 - 1 version MATLAB版本 nargin 函数输入参数的个数 nargout 函数输出参数的个数 预定义变量
MATLAB中的语句 1) 一般:变量=表达式; 例如:x=sin(pi/12)-tan(pi/10)*8; 2)也可以:表达式; 此时等价于 ans=表达式
数组的创建 • 常采用“first:increment:last”和函数“linspace”两种方式来创建数组,如 x=1:5 x=0 : 0.1 : 1 x=linspace(0, pi, 11) • 引用格式:x(index) %index可以是数组 • x(3) • x(1:5) • x(1:2:5) • x([2,1,4])
数组函数 • max(x) 找出x数组的最大值 • max(x,y) 找出x及y数组的最大值,会有二个极值分属x及y数组 • [y,i]=max(x) 找出x数组的最大值以y显示,其在x数组的位置以i显示 • min(x) 找出x数组的最小值 • min(x,y) 找出x及y数组的最小值,会有二个极值分属x及y数组 • [y,i]=min(x) 找出x数组的最小值以y显示,其在x数组的位置以i显示 • mean(x) 找出x数组的平均值 • median(x) 找出x数组的中位数 • sort(v) 按升序排列 • sum(x) 计算x数组的总和值 • prod(x) 计算x数组的连乘值 • cumsum(x) 计算x数组的累积总和值 • cumprod(x) 计算x数组的累积连乘值
矩阵的创建 • 特殊矩阵 • zeros(m, n) m行n列的零矩阵 • ones(m, n) m行n列的全1矩阵 • eye(n) n阶单位矩阵 • rand(m, n) m行n列的均匀分布随机数矩阵 • randn(m,n) m行n列的正态分布随机数矩阵 • diag(v) 以数组v为对角线元素的对角阵 • triu(x) 矩阵x的上三角阵 • tril(x) 矩阵x的下三角阵
矩阵(包括数组)的剪裁和拼接 从一个矩阵中取出若干行(列)构成新矩阵称为剪裁,“:”是非常重要的剪裁工具。 例如, 键入:A=[1 2 3;4 5 6;7 8 9]; A(3, :) %A的第三行 输出:ans= 7 8 9
键入:B=A(2:3, :) %A的2,3行 输出:B= 4 5 6 7 8 9 键入:A(:, 1) %A的第一列 输出:ans= 1 4 7 键入: A=[1 2 3;4 5 6;7 8 9]; C=A(1:2, [1 3]) 输出:C= 1 3 4 6 还有A(1:2:3, 3:-1:1),
将几个矩阵接在一起称为拼接,左右拼接行数要相同,上下拼接列数要相同。将几个矩阵接在一起称为拼接,左右拼接行数要相同,上下拼接列数要相同。 键入:D=[C, zeros(2,1)] 输出:D= 1 3 0 4 6 0 键入:E=[D;eye (2),ones(2,1)] 输出:E= 1 3 0 4 6 0 1 0 1 0 1 1
数组和矩阵运算 • 标量、数组(包括矩阵)的通常意义下的运算: “+”, “–”, “*”, “/”, “^” , “ ’ ” • 数组(包括矩阵)对应位置元素进行运算的特殊运算符: “.*”, “./”, “.^” + 矩阵加法; - 矩阵减法; * 矩阵乘法; ’ 矩阵转置; ^ 矩阵乘幂; \ 矩阵左除 ; / 矩阵右除。 例如,设A是可逆矩阵, AX=B的解是A左除B,即X=A\B; XA=B的解是A右除B,即X=B/A。
矩阵函数 inv(A) 矩阵的逆; rank(A) 矩阵秩 det(A) 矩阵的行列式; orth(A) 正交化 poly(A) 特征多项式 d=eig(A), [v,d]=eig(A) 特征值与特征向量 size(A) 返回一个二元素向量,第一个元素 为A的行数, 第二个元素为A的列数 size(A,1) 返回A的行数; size(A,2) 返回A的列数 length(A) 返回max(size(A)) diag(A) 提取A的对角元素返回列向量 reshape(c,2,6) 按2行6列重排矩阵
MATLAB中的数学函数 三角函数:sin(x), sinh(x), asin(x), sinh(x), cos(x), tan(x), cot(x), sec(x), csc(x)等。 指数函数:exp(x), log(x), log10(x), log2(x), sqrt(x)等。 整值函数:朝零方向取整fix(x), 朝-方向取整 floor(x), 朝+方向取整ceil(x), 四舍五入到最接近的整数round(x), 符号函数sign(x)等 其他数学函数:绝对值或复数的幅值abs(x)
四种循环和选择控制结构 while循环 for循环 if-else-end结构 switch-case-end结构 程序编写
保存按钮 点击即可运行 在命令窗口进入程序编辑器输入、保存M文件,然后在命令窗口键入你建立的 M文件的文件名即可逐次执行其中的命令。 在此空白框键入M文件
M文件 命令M文件:一些命令行的组合。 函数M文件:定义函数的程序,具有特定格式。 例:x=[2 3]; f=cost(x) function f=cost(x) f=100*(x(2)-x(1)^2)^2-(1-x(1))^2; 函数M文件的形式为 function [输出变量列表]=函数名(输入变量列表) 函数体语句;
例 function [income,profit]=total(ppri,spri,samnt) income= sum(spri.*samnt); profit=income-sum(ppri.*samnt); P=[7.15 8.25 3.2 10.3 6.68 12.03 16.85 17.51 9.3]; Sp=[11.1 15 6 16.25 9.9 18.25 20.8 24.15 15.5] Sa=[568 1205 753 580 395 2104 1538 810 694]; [in,pr]=total(P,Sp,Sa)
程序流程控制 循环选择控制结构 关系运算符: <, >, <=, >=, = =(等于),~=(不等于) 关系运算比较两个数值,当给出的关系式成立时,结果为1(表示真),否则为0(表示假)。 逻辑运算符: &(与运算), |(或运算),~(非运算)
类型 语法 解释 类型 语法 解释 循环语句 for 循环变量=数组, 命令组; end 对于循环变量依次取数组中的值,循环执行命令组直到循环变量遍历数组 分支语句 Switch分支变量, Case 值1, 命令组1; Case 值2, 命令组2; ……; otherwise 命令组k; end 按分支变量的取值,执行命令组 循环语句 while 条件式, 命令组; end 当条件满足时执行循环命令组 分支语句 if 条件式1, 命令组1; elseif 条件式2, 命令组2; ……; else 命令组k; end 按条件执行命令组 中断语句 pause 暂停执行,直到击键;pause(n)表示暂停n秒后继续 中断语句 break 跳出循环体 中断语句 return 中断该程序,返回 中断语句 error(字符串) 提示错误并显示字符串说明 控制流
No 关系表达式 Yes statments end的后续语句 循环选择控制结构 While循环的一般形式为: while 关系表达式 {statments} end 如: s=0;n=1 while s<=100 s=s+n^2; n=n+1; end n,s
k=1, x=a(:,1) No k<=size(a,2) Yes statments k=k+1, x= a(:,k) end的后续语句 for循环 for循环的一般形式 for x=a {statments} end 如, for k=1:4 x(k)=1/k; end format rat %设置输出格式为有理数 x
No 关系表达式 Yes statments end的后续语句 if-else-end结构 最简单的形式: if 关系表达式 {statments} end
if-else-end结构 当有三个或更多的选择时 if 关系表达式(1) {statments}(1) elseif 关系表达式(2) {statments}(2) ... elseif 关系表达式(n) {statments}(n) else {statments}(n+1) end 例如,可用以下程序得到符号函数。 function y=SIGN(x) if x<0 y=-1; elseif x==0 y=0; else y=1; end
switch-case-end多分支选择结构 switch lower(NAME) case {'zhanghua', 'lijiang'}, disp( 'He comes from China.') case 'peter', disp( 'He comes from United States.') case 'monika', disp( 'She comes from Germany') otherwise, disp( 'He or she comes from other... countries.') end
switch-case-end多分支选择结构 一般形式 switch 表达式(标量或字符串) case 值1, 语句体1 case {值2.1,值2.2, ...} 语句体2 ... otherwise, 语句体n end
字符串操作 键入:g='3*x^2+2*x+6=0'显示: g= 3*x^2+2*x+6=0 键入:name='ZhangHua' 显示: name= Zhang Hua 键入:f='cos(x)' 显示:f= cos(x) 可用class函数测试变量的类型
例 用专门函数char创建多行串数组. S1=char('This string array','has two rows.') S1 = This string array has two rows. S2=char('这','字符','串数组',' ','由5行组成') size(S2) 2行17列 5行5列
例 最常用的数组/字符串转换函数 num2str, mat2str B=rand(2,3); B_str=mat2str(B,4) [0.1389 0.1987 0.2722;0.2028 0.6038 0.1988] Expression=['exp(-',B_str,')'] exp(-[0.1389 0.1987 0.2722;0.2028 0.6038 0.1988]) eval(Expression) ans = 0.8703 0.8198 0.7617 0.8164 0.5467 0.8197
例 综合例题:在MATLAB计算生成的图形上标出图名和最大值点坐标。 a=2; w=3; t=0:0.01:10; y=exp(-a*t).*sin(w*t); plot(t,y,'b'), hold on, plot(t,zeros(size(t)),‘k’); %画水平线 [y_max,i_max]=max(y); plot(t(i_max),y_max,'r.','MarkerSize',20) t_text=['t=',num2str(t(i_max))]; y_text=['y=',num2str(y_max)]; max_text=char('maximum',t_text,y_text); text(t(i_max)+0.3,y_max+0.05,max_text) tit=['y=exp(-',num2str(a),'t)*sin(',num2str(w),'t)']; title(tit),xlabel('t'),ylabel('y'), hold off
符号运算 数学实验之 --MATLAB初步 字符串入门 实验目的 符号表达式的建立 软件环境 数值运算 符号和数值之间的转换 图形功能 因式分解、展开和简化 程序编写 符号运送 符号与数值间的转换 课堂延伸 符号微积分 操 练 符号函数画图 结 束
符号运算 符号变量和符号表达式的建立 1.用函数syms定义符号变量和符号表达式 调用形式:syms var1 var2 …. 例:syms y u; p=exp(-y/u); q=y^2+u^3+u*y 2.用函数sym来建立符号表达式 调用格式为: 变量=sym(‘表达式') 键入: y=sym(‘2+cos(x)’) 将显示 y= 2+cos(x) 键入 X=sym(‘[a,b,c;d,e,f;b,f,d]’) 将显示 X= [a,b,c] [d,e,f] [b,f,d]
例 求矩阵 的行列式值、逆和特征根 syms a11 a12 a21 a22 A=[a11,a12;a21,a22] DA=det(A), IA=inv(A), EA=eig(A)
符号运算与操作 符号表达式可以进行加、减、乘、除及幂运算等的基本的代数运算。 运算符: + - * / ^ 因式分解、展开和简化 • collect 合并同类项 • expand 展开 • factor 分解因式 • simplify 化简 • simple 求表达式的最简形式
例用符号计算验证三角等式 syms fai1 fai2 y=simple(sin(fai1)*cos(fai2)-cos(fai1)*sin(fai2)) 输出为: y = sin(fai1-fai2)
符号微积分 • diff(f) 对缺省变量求微分 • diff(f,v) 对指定变量v求微分 • diff(f,v,n) 对指定变量v求n阶微分 • int(f) 对f表达式的缺省变量求积分 • int(f,v) 对f表达式的v变量求积分 • int(f,v,a,b) 对f表达式的v变量在(a,b) 区间求定积分
例 验证积分 syms A t tao w yf=int(A*exp(-i*w*t),t,-tao/2, tao/2); Yf=simple(yf) Yf = 2*A*sin(1/2*tao*w)/w
符号和数值之间的转换 • 用sym将数值表达式转换为符号表达式 调用格式为:变量=sym(‘数值表达式’) 如,键入:a=sym('1+2*sqrt(3)') 显示:a= 1+2*sqrt(3) • 用numeric将符号表达式转换为数值表达式 如,键入: numeric(a) 显示: ans = 4.4641