数学是知识的工具,亦是其它知识工具的泉源。 ——勒内·笛卡尔

Slides:



Advertisements
Similar presentations
國立成功大學工程科學系 Department of Engineering Science -National Cheng Kung University 控制與訊號處理實驗室 Control & Signal Processing Lab MATLAB/Simulink 教學.
Advertisements

第 5 章 中國的都市.
第六讲 MATLAB 语言程序设计 6.1 MATLAB语言的函数的基本结构 6.2 全局、局部变量、子函数与私有目录
五專醫護類科介紹 樹人醫專 職業教育組 李天豪 組長.
SCILAB第二章 二維平面繪圖 撰文者: 1.中央大氣科學系 楊善文 2. (如對本文有貢獻者,記得在此留名)
—— matlab 具有出色的数值计算能力,占据世界上数值计算软件的主导地位
黃聰明 臺灣師範大學數學系 MATLAB 基本功能介紹 黃聰明 臺灣師範大學數學系.
中五級中史科及通識科跨科研習 研習大澳的「宗教文化」─ 廟宇的研習 指導老師:周婉儀老師 組員: 陳偉欽 5a (15)
內部審核實務 新竹縣政府主計處四科 王美琪
引導者的角色 組別:第5組 4A1I0003 劉芷媛 4A1I0004 陳安琪 4A1I0014 陳佳瑩 4A1I0046 葉倢茹
第四章 MATLAB编程基础 4.1 概述 4.2 流程控制 4.3 脚本文件 4.4 函数文件 4.5 M文件调试 4.6 M文件性能分析
单片机应用技术 项目一 循环彩灯装置 第7讲 Keil软件的使用 《单片机应用技术》精品课程组 湖北职业技术学院机电工程系.
您買美元了嗎? 退休規劃 全球外幣保單.
MATLAB小结、 经典迭代法、CG.
TQC+ 物件導向程式認證-JAVA.
古文閱讀 – 像虎伏獸 明 劉基 組員: 5號江依倫 6號江若薇 12號張珉芫 32號蔡燕如.
我班最喜愛的零食 黃行杰.
1012 MATLAB 教學 彭奕翔 2013/02/27.
数学软件 Matlab —— 二维平面作图 —— 三维空间作图.
認識拿破崙˙波拿巴 關於一位運氣很差的矮子的趣事兩三件 我不是矮子!! 本日主角 重點不是這個吧? 惡搞人員:橘蘋3顆和一隻小精靈.
教師敘薪實務解說 大墩國小人事室 吳莉真
性別透視鏡 鳳鳴電台 高宜君老師.
空間向量 朱泰吉 蔡宇翔 張力夫 莊孟霏.
把握命题趋势 ★ 科学应考 实现最后阶段的有效增分
第十二章 生产与费用循环审计.
用字母表示数 A=X+Y+Z 执教:建阳市西门小学 雷正明.
國語文好點子趴辣客教學食譜 甜點:〈焦糖鳥布蕾〉
项目六 职业生涯规划的方法与步骤.
第七讲 matlab的程序设计 —— matlab语言称为第四代编程语言,程序简洁、可读性很强而且调试十分容易。
Matlab及其应用 鲍文 哈尔滨工业大学 先进动力控制与可靠性研究所
劳动关系 第十二讲 主讲教师:于米          学时:32.
第1章 MATLAB概述 1.1 MATLAB 7.x简介 是Matrix Laboratory的缩写,它将计算、可视化和编程功能于一身,是一个开放的基于矩阵的交互式开发系统。主要用于数学计算、系统建模与仿真、数据分析与可视化等。(Mathworks始创于1984) MATLAB的系统结构.
MATLAB介紹.
范洪源 臺灣師範大學數學系 MATLAB 基本功能介紹 范洪源 臺灣師範大學數學系.
Matlab M檔案 方煒 台大生機系.
數學與電腦 的初相識 汪群超 個人網址: 變有不可者三,有不可不變者三: 能力未至不可變也、 學識未敷不得變也、 功侯未到不能變也。
Z Mathematical Model ‡ ' MATLAB简介.
講師:戴志華 國立台灣大學電機工程研究所 Visual Basic 程式設計 講師:戴志華 國立台灣大學電機工程研究所.
ASP动态网页设计实用教程 主讲教师: 开课单位:.
第1章 MATLAB概述 编者.
任务一 认识 AutoCAD的基本功能.
新觀念的 VB6 教本 第七章 讓程式轉彎的控制敘述.
程式流程控制 方煒 台大生機系.
Matlab基础介绍 Matlab 简介 Matlab 的安装与启动 Matlab 编程基础 Matlab 在数字信号处理课程中的应用.
H-SPICE 投影片原著:徐鉉強 助教:曾世穎.
引 言.
Introduction to MATLAB
授課教授:張寶基 助教:梁凱雯 郭千豪 音視訊處理實驗室 2014 / 9 / 30
MATLAB 程式設計入門篇 初探MATLAB
MATLAB 程序设计语言 任课教师:刘毅 西安电子科技大学 ISN国家重点实验室.
MATLAB介绍 Matlab基本命令介绍 Matlab矩阵运算 Matlab控制流 Matlab图像处理工具箱 实习题讲解.
第2章 MATLAB程序设计 编者.
数学建模 江西财经大学 数学与管理决策系 制作:华长生 华长生制作.
共有六個運算性質 包括它的證明以及相關題型
MATLAB 入门教程.
第二单元 第2课 Matlab程序控制结构 1.顺序结构 2.选择结构 3.循环结构.
MATLAB 程式設計入門篇 初探MATLAB
第二章、第三章错题分析.
學這些有什麼好處呢? 為了把資料作更客觀之總結描述或比較多組資料。總而言之,就是要找出一個數能代表整組數據。
实验教学 MATLAB在行列式和矩阵中的应用 授课教师:杨梦云.
MATLAB 程式設計入門篇 初探MATLAB
第二章 MATLAB编程与作图 2.1 程序设计 2.2 作图 2.3 在线帮助和文件管理 2.4 习题 2019年4月23日
第3章 JavaScript基本语句.
3-3 錐度車削方法 一、尾座偏置車削法 二、錐度附件車削法 三、複式刀座車削法.
两个变量的线性相关 琼海市嘉积中学 梅小青.
1.5 Matlab绘图 plot(y) plot(x,y)
MATLAB 程式設計 程式除錯 方煒 台大生機系.
MATLAB 实用教程.
智慧財產權管理講次36 積體電路電路布局保護法(1) 主講:吳銘圳
第二单元 第3课 Matlab命令执行方式 1.Matlab命令执行方式 2.程序调试.
Presentation transcript:

数学是知识的工具,亦是其它知识工具的泉源。 ——勒内·笛卡尔 数 学 建 模 数学是知识的工具,亦是其它知识工具的泉源。 ——勒内·笛卡尔

第9章 MATLAB编程及调试 宋显华 songxianhua@hrbust.edu.cn

内容 1 常用软件介绍 2 MATLAB基本操作 3 MATLAB编程及调试 4 MATLAB求解算例 数学建模

第9章 模型求解常用软件 第41讲 MATLAB编程及调试

一、函数 MATLAB提供了很多内部数学函数 abs,sqrt,exp,sin 在命令窗口键入如下命令可以查看基本数学函数的列表。 键入下面的命令,可以找到更多的高级数学函数和矩阵函数。 abs,sqrt,exp,sin bessel和gamma函数 help elfun help specfun help elmat 数学建模

一、函数 有些函数是内部函数, 如aqrt和sin 内部函数是MATLAB内核的一部分,所以它们的计算效率很高,但计算细节无法获取。 对于内部函数,无法看到代码,对于其他函数,可以查看到代码甚至修改代码。 如aqrt和sin 如gamma函数 数学建模

一、函数 主函数 例如:average函数位于文件average.m中 function y = average(x) 在多数情况下,主函数是M文件中可以从MATLAB命令行或从另一个M文件函数调用的唯一函数,调用该函数时,使用定义该函数的M文件的名称。 例如:average函数位于文件average.m中 function y = average(x) % 计算矢量元素的平均值 数学建模

注:一般使主函数的名称与M文件相同,如果函数名与文件名不同,必须用文件名调用函数。 一、函数 可以从MATLAB命令行用下面的命令计算3个数的平均值。 y = sum(x)/length(x); average([ 12 34 25]) 注:一般使主函数的名称与M文件相同,如果函数名与文件名不同,必须用文件名调用函数。 数学建模

一、函数 子函数 。 M文件中可以包含一个以上的函数,文件中除主函数以外的其他函数称为子函数,并且它们只对主函数或同一文件中的其他函数可见。 主函数放在最上面,子函数放在下面,各子函数排名不分先后。 即使在同一个M文件中,子函数也不能获取用于主函数或其他子函数的参数,除非它们声明为全局变量,或者作为参数传递。 从M文件内部调用函数时,MATLAB首先检查文件,看函数是否为子函数,然后检查该名称的私有函数,最后搜索路径上的独立M文件或内部函数。因为首先检查子函数,所以可以用相同名称的子函数覆盖已经存在的M文件。 。 数学建模

一、函数 匿名函数 创建匿名函数的语法格式为: fhandle = @(arglist)expr 使用匿名函数,可以在不必创建M文件的情况下快速创建简单函数。可以在MATLAB命令或任何M文件函数或脚本中创建匿名函数。 创建匿名函数的语法格式为: fhandle = @(arglist)expr expr表示函数体,即函数要完成主要工作的代码,arglist为要传递给函数的逗号间隔的输入参数列表,返回函数句柄fhandle。 数学建模

一、函数 嵌套函数 可以在一个函数中嵌套定义一个或多个函数,嵌套函数具有类似下面的形式。 注意:M文件函数一般不需要end语句,但使用嵌套函数时需要此语句。如果M文件包含一个或多个嵌套函数,必须在M文件中使用end语句终止所主函数,不管它们是否包含嵌套函数。 function x=A(p1,p2) … function y = B(p3) end 数学建模

一、函数 私有函数 私有函数是private子目录中的函数,它们只对父目录中的函数可见。因为私有函数在父目录以外是不可见的,在其他目录中可以使用与之相同的名称。 数学建模

一、函数 重载函数 plot(Y) plot(X1,Y1,…) 这两个函数具有相同的函数名,不同的参数,调用plot函数时MATLAB会根据函数的参数自动选择使用。 plot(Y) plot(X1,Y1,…) 数学建模

二、M文件 如果需要重复调用命令行,或者命令行的行数比较多,常常将它们写成M文件的形式并进行保存。 脚本式M文件和函数式M文件 假设我们想绘制一个单位球面,并且要让球面看起来比较光滑,可以在命令窗口中键入 sphere %绘制一个单位球面 shading interp %对球面进行插值着色 axis equal %设置坐标系,使各坐标方向上的度量单位相同 数学建模

二、M文件 数学建模

二、M文件 现在假设除了需要生成球面以外,还想生成柱面。可以考虑标志一个绘图函数,这个函数有一个surface参数。 调用这个函数时,如果将参数设置为“sphere”,则生成一个单位球面,设置为“cylinder”时,则生成一个单位柱面。 数学建模

二、M文件 创建和编辑程序的工作在M文件编辑器中完成,在主界面中一次选择File New Function菜单项,打开M文件编辑器。在M文件 编辑器中输入下面的代码 function drawsur(surface) switch surface case 'sphere' sphere case 'cylinder' cylinder end shading interp axis equal 数学建模

二、M文件 然后将它保存到当前目录下,名为drawsur.m。现在,可以再命令窗口中调用drawsur函数了。 在命令窗口中键入下面的命令行 将生成相同的球面。 键入 drawsur(‘sphere’) drawsur('cylinder') 数学建模

二、M文件 M文件有两种,一种是脚本式M文件,另一种是函数式M文件。上面使用的是函数式形式。为了进行比较,我们继续使用前面的例子。新建一个M文件,在编辑器中输入下面代码: 保存为sphere.m,在命令窗口中键入 生成单位球面。 这里的使用方式与drawsur完全不同,它没有function关键字,没有输入参数。这就是脚本式M文件的使用方式。 sphere shading interp axis equal sphere 数学建模

二、M文件 脚本式M文件 函数式M文件 不接受输入参数,没有返回值 可以接受输入参数,可以有返回值 基于工作空间中的数据进行操作 默认时,文件中参数的作用范围只限于函数内部 自动完成需要花费很多时间的多步操作时使用 扩展MATLAB语言功能时使用 数学建模

二、M文件 M文件的基本结构 函数定义行 function [x,y]=myfun(a,b,c) % H1行—用一行文字来综述函数的功能 % 帮助文本—用一行或多行文本解释如何使用函数 % 在命令行中键入“help<functionname>”时可以使用它 数学建模

二、M文件 一个完整的M文件应该包括函数定义行、H1行、帮助文本、函数体、注释和函数代码等方面的内容,其中函数定义行和函数代码是必须的。 % 函数体—一般从第一个空白行后开始 % 注释—描述函数的行为,输入输出的类型等 % 在命令行中键入“help<functionname>”时不会显示注释文本 % 开始编写函数代码 x= prod(a,b); 数学建模

二、M文件 函数的参数 检查输入参数的个数 function c = testarg(a,b) if (nargin ==1)  函数的参数 调用函数时,调用者通过一个参数列表传递数据,并获取返回值,MATLAB采用的是传值方式。 检查输入参数的个数 利用nargin和nargout函数可以确定函数输入参数和输出参数的个数。然后可以根据参数个数用条件语句完成不同的任务,例如, function c = testarg(a,b) if (nargin ==1) c = a.^2; elseif (nargin == 2) c = a+b; end 数学建模

二、M文件 传递参数 使用 varargin 和 varargout 函数可以传递任意个数的输入参数或者返回任意个数的输出参数给函数。 MATLAB把所有指定的输入参数指定到一个单元数组中,每个单元可以包含任意大小或类型的数据。对于输入参数,函数代码必须把它们打包到一个单元数组中,这样,MATLAB就可以把参数返回给调用函数。 数学建模

二、M文件 解包varargin中的内容 y(n) = varargin{n}(2); 数学建模

二、M文件 打包varargout function [varargout] = testvar(arrayin) 当允许有任意多个输出参数时,必须将所有输出打包到varargout单元数组中,使用nargout确定输出参数的个数。例如,下面的代码接收两列输入数组,其中第一列表示一系列x坐标,第二列表示y坐标,它将数组分成单独的[xi,yi]矢量,可以将该矢量传递给testvar函数。 循环中的赋值语句使用了单元数组的赋值语法。 function [varargout] = testvar(arrayin) for k = 1:nargout varargout{k} = arrayin(k,:); % 单元数组赋值 end 数学建模

二、M文件 参数列表中的varargin和varargout varargin或varargout必须出现在参数列表的最后,即函数调用必须首先指定必要的参数。例如,下面的函数声明行显示了varargin和varargout的正确位置: function [out1,out2] = example1(a,b,varargin) function [i,j,varargout] = example2(x1,y1,x2,y2,flag) 数学建模

二、M文件 返回输出参数 [test,offset] = readText(filestart,offset) 放在函数定义行中等号左侧的任何参数都是调用函数的返回值。如果传递任何函数可以修改的输入参数,需要把相同的参数作为输出参数。这样,调用函数可以获得更新后的值。 [test,offset] = readText(filestart,offset) 数学建模

三、程序调试和错误处理 用try-catch语句检查错误 try, statement, …, catch, end try…catch语句进行错误捕获,它把有可能引起异常的语句放在try控制块中,这样当try控制块中statement语句引起异常时,catch控制块就可以捕获它,并针对不同的错误类型,进行不同的处理。调用格式: try, statement, …, catch, end 数学建模

三、程序调试和错误处理 错误和警告信息 if n<1 error(‘n must be 1 or greater’) end 使用MATLAB的error和warning函数可以报告错误和警告信息并延迟程序的运行。 if n<1 error(‘n must be 1 or greater’) end 如果n小于1,给出出错信息“n must be 1 or greater”; 同样,warning 函数给出警告信息 warning(‘Input must be a string’) 警告输入内必须是字符串。 数学建模

三、程序调试和错误处理 用“Debug”菜单进行调试 在M文件编辑器中,使用“Debug”菜单可以很方便地进行程序调试,“Debug”菜单如图所示,各种方法主要分为三种,即定点调试、断点调试以及错误和警告调试等。 数学建模

三、程序调试和错误处理 定点调试 断点调试 错误和警告调试 定点调试选项包括“Step”、“Step In”、“Step Out”,使用它们可以逐语句、逐函数调试或直接运行到光标处。 断点调试 进行断点调试时,程序运行到断点处就会停下来,这样有利于很快找到出现错误的位置(需要先设置断点)。 错误和警告调试 使用“Stop if Errors/Warnings…”选项,确定错误或警告出现时停止运行。 数学建模

四、编程技巧 矢量化 x=.01; for k = 1:1001 y(k) = log10(x); x = x+.01; 使程序运行更快的方法之一是将构造程序的算法进行矢量化,在其他程序语言可能使用for循环或do循环的地方,MATLAB可以使用矢量或矩阵操作,对于下面的程序: x=.01; for k = 1:1001 y(k) = log10(x); x = x+.01; end 进行矢量化后如下所示: x=.01:.01:10; y=log10(x); 数学建模

四、编程技巧 预分配内存空间 r = zeros(32,1); for n = 1:32 r(n) = rank(magic(n)); 如果不能矢量化某段代码,可以通过预分配保存输出的任何矢量或数组的内存空间来加速for循环,例如,下面的代码用函数zeros预分配for循环中创建的矢量的内存空间,使得这个for循环的运行速度显著加快。 若没有使用内存预分配,每循环一次,MATLAB解释器就会将r矢量的元素增加一个,而内存预分配后,就取消了这个步骤,从而使运行加速。 r = zeros(32,1); for n = 1:32 r(n) = rank(magic(n)); end 数学建模

五、资料的储存与载入 MATLAB储存变量的基本命令是save,在不加任何选项(Options)时,save会将变量以二进制(Binary)的方式储存至文档名为mat的档案,如: save:将工作空间的所有变数储存到名为matlab.mat的 二进制档案。 save filename:将工作空间的所有变数储存到名为filename.mat的二进制档案。 save filename x y z :将变量x、y、z储存到名为filename.mat的二进制档案。 数学建模

五、资料的储存与载入 简例: who % 列出工作空间的变量 Your variables are: B h j y ans i x z save test B y % 将变量B与y储存至test.mat dir % 列出现在目录中的档案 数学建模

六、结束MATLAB 结束MATLAB的方法 键入exit 键入quit 直接关闭MATLAB的命令视窗(Command window) 数学建模

作业