第六讲 MATLAB 语言程序设计 6.1 MATLAB语言的函数的基本结构 6.2 全局、局部变量、子函数与私有目录

Slides:



Advertisements
Similar presentations
第 5 章 中國的都市.
Advertisements

歡迎各位111 家長 111 開學花絮 (相見歡) (小一新鮮人) 2. 班親會組織 3. 老師簡介 4. 班級經營理念說明.
營利事業所得稅查核準則 相關概念介紹 南區國稅局 新營分局 林俊標 各位學員大家好:
黃聰明 臺灣師範大學數學系 MATLAB 基本功能介紹 黃聰明 臺灣師範大學數學系.
复习线索 线索 专题九 模块二 第二部分 考点一 高考考点 考点二 配套课时检测.
第四章 MATLAB编程基础 4.1 概述 4.2 流程控制 4.3 脚本文件 4.4 函数文件 4.5 M文件调试 4.6 M文件性能分析
高考历史答题 技巧与方法.
MATLAB小结、 经典迭代法、CG.
學 號:997I0010、997I0024 組 員:洪韋鈴、王婷婷 日 期: 指導老師:王立杰 老師
古文閱讀 – 像虎伏獸 明 劉基 組員: 5號江依倫 6號江若薇 12號張珉芫 32號蔡燕如.
1012 MATLAB 教學 彭奕翔 2013/02/27.
第4章 JavaScript脚本语言基础 4.1 JavaScript简介 4.2 JavaScript语法基础
初中数学阅读材料的使用策略 温州市龙湾区第二实验中学 陈春燕.
程設一.
公司法(六) 股份有限公司 1.
3-3 Modeling with Systems of DEs
程設一.
全球工程師共同的語言 MathWorks 台灣總代理鈦思科技 指導老師 : 郭艷光教授 報告者 : 吳育驊
第七讲 matlab的程序设计 —— matlab语言称为第四代编程语言,程序简洁、可读性很强而且调试十分容易。
Matlab及其应用 鲍文 哈尔滨工业大学 先进动力控制与可靠性研究所
Q1: 追蹤程式: 印出結果? 搶答 while (i<=n) { p=p*i; i=i+2; }
MATLAB介紹.
物件導向程式設計 (Object-Oriented rogramming)
第二章 C# 基础知识.
張智星 (Roger Jang) 清大資工系 多媒體檢索實驗室
1 巨集 2 資料型態 3 物件、屬性、方法與事件 4 陳述式與副函式 5 其他注意事項 6 範例
Matlab M檔案 方煒 台大生機系.
數學與電腦 的初相識 汪群超 個人網址: 變有不可者三,有不可不變者三: 能力未至不可變也、 學識未敷不得變也、 功侯未到不能變也。
Z Mathematical Model ‡ ' MATLAB简介.
创建型设计模式.
数据库原理及应用 《数据库原理及应用》课程组 荆楚理工学院.
Learning Polynomials 台大生機系 方煒.
数学3(必修)—— 算 法 ALGORITHM 苏州大学数学科学学院 徐稼红
试用Bode图设计方法对系统进行滞后-超前串联校正设计, 使校正后系统满足:
張智星 (Roger Jang) 台大資工系 多媒體檢索實驗室
引 言.
Support Vector Machines
Introduction to MATLAB
第6章 FIR数字滤波器设计 6.1 FIR数字滤波器原理 6.2 使用DSP Builder设计FIR数字滤波器
范洪源 臺灣師範大學數學系 分支宣告與程式設計 范洪源 臺灣師範大學數學系.
MATLAB 程式設計入門篇 初探MATLAB
MATLAB 程序设计语言 任课教师:刘毅 西安电子科技大学 ISN国家重点实验室.
* 單元:電腦與問題解決 主題:Java物件導向程式設計-類別與物件 台南縣國立善化高中 蕭嘉民 老師
第三章 C# 基础知识.
MATLAB介绍 Matlab基本命令介绍 Matlab矩阵运算 Matlab控制流 Matlab图像处理工具箱 实习题讲解.
For x = 0 To 9 For y = 0 To 9 z = *x + 10*y …… Next y
第2章 MATLAB程序设计 编者.
張智星 清大資工系 多媒體檢索實驗室 MATLAB 程式設計進階篇 程式計時 張智星 清大資工系 多媒體檢索實驗室.
第二单元 第2课 Matlab程序控制结构 1.顺序结构 2.选择结构 3.循环结构.
第9章 MATLAB环境下的仿真软件Simulink
MATLAB 程式設計入門篇 初探MATLAB
學這些有什麼好處呢? 為了把資料作更客觀之總結描述或比較多組資料。總而言之,就是要找出一個數能代表整組數據。
第七章 程序设计基础.
MATLAB 程式設計入門篇 初探MATLAB
第二章 MATLAB编程与作图 2.1 程序设计 2.2 作图 2.3 在线帮助和文件管理 2.4 习题 2019年4月23日
高山草原生態系 分布於臺灣3000公尺以上高山,如中央山脈.玉山山脈.雪山山脈 分為玉山箭竹草原,高山芒草原及兩者混生林三種
VC++程序调试演示 An Overview of ICU 19th International Unicode Conference
Create and Use the Authorization Objects in ABAP
第一单元 第1课 Matlab概述 1.MATLAB 2.工具箱 3.高效数值计算功能 4.完备的计算结果和编程可视化功能
第7章 MATLAB工程计算.
MATLAB 实用教程.
本講義為使用「訊號與系統,王小川編寫,全華圖書公司出版」之輔助教材
群聚分析操作介紹 -以SOM和K-means為例
第6章 PHP基本語法介紹.
MATLAB 結構化財務程式之撰寫 MATLAB財務程式實作應用研習 主題五 資管所 陳竑廷
第二单元 第3课 Matlab命令执行方式 1.Matlab命令执行方式 2.程序调试.
C#快速導讀 流程控制.
数学是知识的工具,亦是其它知识工具的泉源。 ——勒内·笛卡尔
测试功能 目录 页 程序的状态监视功能 ……………... 2 程序状态监视的模式 …………………………. 3
循环结构 刘华 江苏省苏州中学.
Presentation transcript:

第六讲 MATLAB 语言程序设计 6.1 MATLAB语言的函数的基本结构 6.2 全局、局部变量、子函数与私有目录 6.8 例子与习题

6.1 MATLAB 语言函数的基本结构 MATLAB语言提供了两种源程序文件格式 M脚本文件:它实际上是MATLAB命令窗中一系列命令的组合,它没有输入输出参数传递的过程,它直接对工作区中的变量进行处理操作 M函数:这是MATLAB程序设计的主流,它可以传递参数及返回结果,我们主要介绍M函数的编写方法与技巧。

6.1 MATLAB 语言函数的基本结构 M函数是由 function 语句引导的,其基本格式如下 %中用命令 help 函数名 所得到的帮助就是这段文字。 输入、返回变量格式的检测 函数体语句 只要进入该函数,MATLAB就自动生成 nargin 和 nargout 两个变量,分别表示输入变量和输出变量的个数。程序中可以根据这两个变量的值来判断用户输入参数的情况。

6.1 MATLAB 语言函数的基本结构 M函数典型例子 function [magout,phase,w] = bode(a,b,c,d,iu,w) %BODE Bode frequency response of LTI models. % BODE(SYS) draws the Bode plot of the LTI model SYS (created with % either TF, ZPK, SS, or FRD). The frequency range and number of % points are chosen automatically. % See also BODEMAG, NICHOLS, NYQUIST, SIGMA ni = nargin; no = nargout; ………………………. % end bode

6.1 MATLAB 语言函数的基本结构 说明 注释符号%引导的内容不能含空行,否则,后续的内容不能由 help 命令看到,大部分作者及版权信息都是空行后的注释内容。 当返回变量只有一个时,不用方框号[]括起来。 函数名与该函数存盘用的文件名要一样,否则MATLAB寻找的是文件名符合的函数,而且老版本的MATLAB不能用超过8个字符的函数名。

6.1 MATLAB 语言函数的基本结构 说明(续) 为了使得MATLAB认识该函数,要将该函数所在的目录用cd 命令设为当前目录,或用命令addpath添加到MATLAB的路径中去(也可以用MATLAB菜单下的PATH命令)。 可以用 type 函数名 来看函数文件的内容。 可以用 edit 函数名 来查看或编辑函数文件。

6.2 全局、局部变量、子函数与私有目录 MATLAB工作区中的变量和M函数内部的变量都是局部变量,他们是互不干扰的,但也可以显性地把变量定义为全局变量,使得他们在整个程序中都起作用。 全局变量定义格式为 global a b c d 注意变量之间不能用逗号分开,在MATLAB工作区和M 函数内部同时要声明该变量为全局变量。 为保证函数的独立性,一般情况下不建议使用全局变量。

6.2 全局、局部变量、子函数与私有目录 从MATLAB 5.0 开始引入子函数。所谓子函数就是一个函数文件中不但包含该函数本身,还包含专门由该函数调用的下一级函数,这样的专门函数称为子函数。子函数是不能有其他文件中的函数调用的。 私有目录即在当前的 MATLAB 目录下建立一个 private 子目录,该目录下的内容只能由当前目录下的函数调用,而不能有其他函数调用。

6.3 MATLAB函数的跟踪调试 用 MATLAB 自带的编辑器 EDIT编辑所要跟踪调试的程序,在希望的语句上设置断点,在MATLAB命令窗按正常方式运行命令,程序会自动停留在所设的断点处。 调试状态下,MATLAB命令窗的命令提示符变为 K>>。这时可输入任何MATLAB命令,变量为函数内部的局部变量,而不是工作区中的变量。 调试状态下,鼠标指针指向想查询的局部变量上将立即能显示出该变量值。

6.3 MATLAB函数的跟踪调试 跟踪调试程序中 Debug 菜单下的子菜单项的功能如下表 菜单项 执行结果 Set/Clear Breakpoint 设置或清除断点 Continue 继续执行到下一个断点 Step 单步执行 Step in 单步,若该步调用函数,则在该函数中也单步执行 Exit Debug Mode 退出调试状态

6.4 MATLAB工具箱编写技巧 将为某种专门目的编写一组 MATLAB 函数放在一个目录下,就形成了一个新的工具箱。 为了使得用户能象MATLAB提供的工具箱一样使用该工具箱,必须将该工具箱所在的目录用命令 addpath 添加到MATLAB的搜索路径中去。 为了能使得命令 help 工具箱名 能列出该工具箱的所有函数的功能介绍,应该按下述格式编写一个名为 contents.m 的文件。第一行给出工具箱名称,第二行给出版本信息,由命令 ver 工具箱名 可以获得该工具箱的版本信息。 一般在该工具箱下还有一文件 readme.m 用来存放有关该工具箱的版本升级信息,使用命令 whatsnew 工具箱名 查看的就是该文件的信息。

6.4 MATLAB工具箱编写技巧 >> type contents.m % Symbolic Math Toolbox. % Version 2.1.2 (R12.1) 11-Sep-2000 % New Features. % Readme - Overview of the new features in/changes made to % the Symbolic and Extended Symbolic Math Toolboxes. % Calculus. % diff - Differentiate. % Linear Algebra. % poly - Characteristic polynomial. % Simplification. % simplify - Simplify. % Solution of Equations. % solve - Symbolic solution of algebraic equations. % Variable Precision Arithmetic. % vpa - Variable precision arithmetic.

6.5 MATLAB语言的程序流程语句 循环语句结构 MATLAB 提供了循环语句结构、条件语句结构、开关语句结构以及试探语句。 for 循环变量 = s1:s2:s3 循环体语句组 end for 循环变量 = Vector 循环体语句组 end

6.5 MATLAB语言的程序流程语句 循环语句结构 例一、 t=0; for i = 1:1:100; t=t+i; end 例二、 w=[ 0.1:0.05:1, 1.5:0.5:10, 15:5:100, 150:50:1000]; a=[0 1;-1 –2]; b=[0;1]; c=[1 2]; d=0; m=[]; I=eye(size(A)); for i=w, m=[m; C*inv(sqrt(-1)*I*I-A)*B+D); end

6.5 MATLAB语言的程序流程语句 条件语句结构 if 条件式1 if 条件式1 条件块语句组1 条件块语句组1 elseif 条件式2 条件块语句组2 …… else 条件块语句组n+1 end if 条件式1 条件块语句组1 else 条件块语句组2 end

6.5 MATLAB语言的程序流程语句 条件语句结构 例二 例一 if a>0 if a>=0 a=1 a=1; elseif a<0 a=-1 else a=0 end 例一 if a>=0 a=1; else a=-1; end

6.5 MATLAB语言的程序流程语句 开关结构 switch 开关表达式 case 表达式1 语句段1 case {表达式2,表达式3,…,表达式m} 语句段2 …… otherwise 语句段n end

6.6 MATLAB中新的数据结构 数据结构体 struct 从5.0版本开始,MATLAB 提供了几种新的数据结构类型,他们是数据结构体 struct,类 class和单元结构cell。 数据结构体 struct 与C语言不同,MATLAB中数据结构类型的变量不用定义一个结构体先,直接用就可以,如下例。 >> student_rec.number=1; >> student_rec.name='Ying'; >> student_rec.height=165; >> student_rec.test=[100,80,75;77,60,92;67,28,80;100,89,78]; >> student_rec student_rec = number: 1 name: 'Ying' height: 165 test: [4x3 double]

6.6 MATLAB中新的数据结构 数据结构体 struct 引用成员变量 建立结构体类型的数组 >> student_rec.test ans = 100 80 75 77 60 92 67 28 80 100 89 78 建立结构体类型的数组 >> b(50,2)=struct(student_rec) b = 50x2 struct array with fields: number name height test

6.6 MATLAB中新的数据结构 数据结构体 struct 修改结构数值元素的取值 增加结构体成员 删除结构体成员 >> b(43,2).number=50+43; >> b(43,2).name='Gan'; >> b(43,2).height=156; >> b(43,2).test=[83,80,78;97,80,62;90,20,30;30,20,80]; 增加结构体成员 删除结构体成员 >> b(1,1).weight=90 b = 50x2 struct array with fields: number name height test weight >> b=rmfield(b,'weight') b = 50x2 struct array with fields: number name height test

6.6 MATLAB中新的数据结构 类 class 类不但包含成员变量,还包含成员函数,我们通过一个例子来介绍类的构造,下面建立多项式类。 首先选定一个类的名字,如多项式类我们选为 polynom。 以这个名字在当前目录下建立一个子目录,而且要加符号@,即建立子目录 @polynom。该目录无需在MATLAB路径下再指定。

6.6 MATLAB中新的数据结构 polynom类的数据结构 polynom类的成员函数 多项式类只包含一个数据成员即 p.c,它即是多项式系数,幂次从高到底。该成员变量只能被 @polynom目录下的成员函数访问。 polynom类的成员函数 构造函数 polynom.m 多项式到双精度数的转换函数 多项式到字符串的转换函数 显示函数 A subsref method 重载运算符 +, -, 和 * 重载函数 roots, polyval, plot, 和 diff

6.6 MATLAB中新的数据结构 polynom类的构造函数 polynom.m function p = polynom(a) %POLYNOM Polynomial class constructor. % p = POLYNOM(v) creates a polynomial object from the vector v, % containing the coefficients of descending powers of x. if nargin == 0 p.c = []; p = class(p,'polynom'); elseif isa(a,'polynom') p = a; else p.c = a(:).'; end >> p = polynom([1 0 -2 -5]) p = polynom object: 1-by-1

6.6 MATLAB中新的数据结构 polynom类的转换函数 double.m polynom类的显示函数 display.m function c = double(p) % POLYNOM/DOUBLE Convert polynom object to coefficient vector. % c = DOUBLE(p) converts a polynomial object to the vector c % containing the coefficients of descending powers of x. c = p.c; >> double(p) ans = 1 0 -2 -5 polynom类的显示函数 display.m function display(p) % POLYNOM/DISPLAY Command window display of a polynom disp(' '); disp([inputname(1),' = ']) disp([' ' char(p)]) >> display(p) p = x^3 - 2*x - 5

6.6 MATLAB中新的数据结构 polynom类重载+运算符 plus.m polynom类重载*运算符 mtimes.m function r = plus(p,q) % POLYNOM/PLUS Implement p + q for polynoms. p = polynom(p); q = polynom(q); k = length(q.c) - length(p.c); r = polynom([zeros(1,k) p.c] + [zeros(1,-k) q.c]); polynom类重载*运算符 mtimes.m function r = mtimes(p,q) % POLYNOM/MTIMES Implement p * q for polynoms. p = polynom(p); q = polynom(q); r = polynom(conv(p.c,q.c));

6.6 MATLAB中新的数据结构 单元结构 cell 单元结构类似于数组,但单元结构中各元素可以是不同属性的数据,见下例。 >> a={1,'Ying',180,magic(3)} a = [1] 'Ying' [180] [3x3 double] >> a{4} ans = 8 1 6 3 5 7 4 9 2 访问单元数据要用带有大括号下标的形式,不能用圆括号。 可以使用 celldisp 函数来直接显示整个单元。 删除第n个单元元素用下面命令: a(n)=[]; 注意用圆括号。

6.6 MATLAB中新的数据结构 单元结构 cell应用 varargin 表示输入变量列表,是一个单元结构变量 varargout 表示输出变量列表,是一个单元结构变量 function a=convs(varargin) a=varargin{1}; for i=2:length(varargin) a=conv(a,varargin{i}); end >> p=[1 2 4 0 5];q=[1 2];f=[1 2 3]; >> g=convs(p,q,f,[1 1],[1 3],[1 4]); g= 1 11 56 176 376 578 678 648 527 315 90

6.7 MATLAB语言编程技巧 MATLAB运行机制 判定这个名字是否为变量名 判定这个名字是否为本函数内部的子函数 判定这个名字是否为本目录下的私有目录内函数 判定这个名字是否为 MATLAB 的内在函数名 判定这个名字是否为 MATLAB 路径下的 Mex 型文件 判定这个名字是否为 MATLAB 路径下的 M 函数 MATLAB 搜索路径的顺序是按照其路径设定文件 pathdef.m 中的先后次序来进行的。

6.7 MATLAB语言编程技巧 MATLAB运行机制 用户可以用命令 exist 来查询当前的工作区下是否存在一个名字,其调用格式为: i=exist(字符串),例如 i=exist(‘A’); i=1,则表示当前工作区下存在变量 A i=2,则表示MALTAB工作路径下存在文件 A.m i=3,则表示MATLAB工作路径下存在文件 A.dll i=4,则表示表示存在 Simulink 文件 A.mdl i=5,则表示存在内部 MALTAB 函数 A( ) i=6,则表示MATLAB工作路径下存在伪代码文件 A.p i=7,则表示MATLAB工作路径下存在一个A子目录 i=0,则表示不存在任何和 A 有关的变量和文件

6.7 MATLAB语言编程技巧 测定程序执行时间和时间分配 tic 和 toc 是启动和停止秒表, cputime 获取 CPU时间 >> tic,t=cputime;a=hilb(1000);toc,cputime-t elapsed_time = 0.7030 ans = 0.7500 M 函数耗时剖析命令 profile profile on 待测函数名 profile report profile off

6.7 MATLAB语言编程技巧 加快MALTAB程序执行速度的建议 尽量避免使用循环 多重循环情况下,外循环次数要少 大型矩阵要预先定维 优先考虑内在函数 采用有效的算法 应用 Mex 技术

6.8 例子与习题 例一、分别用 for 和 while 循环结构编写程序,写出 并考虑一种避免循环的简洁方法来进行求和,并比较各种算法的运行时间。 例二、用循环语句形成一个有20个分量的数组,使其元素满足 Fibonacci 规则。

6.8 例子与习题 例三、考虑单元数组 B 的建立,判断下面的语句是否正确 >> B{1,2}='I Am A Student'; >> B{2,1}=180; >> B{2,2}=[100 80 75;77 60 92;67 68 90;100 89 78]; 例四、自己编写一个 MATLAB 函数,是它能自动生成一个 mXm 的 Hankel 矩阵,并使其调用格式为 v=[h1, h2, ….h2n-1]; H=myhankel(v);