9512.net
甜梦文库
当前位置:首页 >> 学科竞赛 >>

2016全国大学生数学建模竞赛培训(MATLAB)



数 学 建 模

哈尔滨理工大学 应用数学系

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

内容

1 2 3

常用软件介绍 MATLAB基本操作 MATLAB编程及调试

4

MATLAB求解算例

r />数学建模

一、MATLAB软件
源自 Matrix Laboratory (矩阵实验室),首创者是 在数值线性代数领域颇有成就的Cleve Moler博士。
科学计算软件,以矩阵的形式处理数据。 将高性能的数值计算和可视化集成在一起,并提供了 大量的内置函数。 开放式结构( M 语言编程),用户可以 非常容易地对MATLAB的功能进行扩充。
数学建模

一、MATLAB软件
? MATLAB系列产品可以做如下工作: ? 数值分析; ? 数值和符号计算; ? 工程与科学绘图; ? 控制系统的设计与仿真; ? 数字信号处理; ? 数字图像处理; ? 通讯系统设计与仿真; ? 财务与金融工程。

数学建模

一、MATLAB软件
MATLAB产品由若干个模块组成,不同的模块完成不 同的功能。 MATLAB 是 MATLAB 产 品 家 族 的 基 础 , 任 何 其 他 MATLAB产品都以这个模块为基础。MATLAB核心模 块提供了基本的数学算法。 MATLAB 集成了 2D 和 3D 图形功能,以 完成相应数值可视化的工作。 提供了一种交互式的高级编程语言 —— M 语言,利用 M 语言可以通过编写脚本 或者函数文件实现用户的算法。
数学建模

一、MATLAB软件

数学建模

一、MATLAB软件
MathWorks公司的网址是www.mathworks.com。 从MATLAB 4.2c开始,每个版本增加了一个建造编号。 例:MATLAB7.6的建造标号是R2008a。 对于建造编号,愈来愈正规化以后,每 年出两个版本,一般来说,a是测试版, b 是正式版。从出版时间上看, a 是前半 年,b是后半年。 例:2011a和2011b。

数学建模

二、Mathematica软件
? Mathematica是一个符号计算与数值计算的通用数学 软件包,是由美国的物理学家Stephen Wolfram所领 导的一个小组开发成功并推向市场的。

? 与MATLAB相比,Mathematica是一个真正的数学符号 计算软件包,因为只有它的内核是以符号计算为基础 的。
例如:定义一些数学规则,让它为你进 行符号推导演算工作。

数学建模

二、Mathematica软件
? 主要功能和特色
?

符号运算 ? Mathematica能像人一样进行带字母的运算,得到的是 准确结果。符号运算功能可以分成四类: ? (1)初等数学:数和初等函数式的计算域化简; ? (2)微积分:极限、导数(高阶和偏导)、不定积分 和定积分(多重)、将函数展成幂级数、无穷级数求和 积分变换; ? (3)线性代数:行列式、矩阵的各种运算,解方程组, 求特征值和特征向量,正交化和矩阵分解; ? (4)解方程组:包括微分方程。

数学建模

二、Mathematica软件
? 主要功能和特色
?

数值计算 ? Mathematica的数值计算更具科学性,与通常的数值计 算程序有所不同。它允许用户指定任意精度。

例如:能轻而易举地求出 ? 的300位近 似值,也可以求出 1000! 和 21000 等整数的准 确值!
?

Mathematica具有众多的数值计算函数,能满足 线性代数、插值与拟合、数值积分、微分方程 的数值解、函数极值、线性规划及概率统计等 方面的常用计算需求。
数学建模

二、Mathematica软件
? Mathematica的主要功能和特色:
?

?

绘图 ? Mathematica的绘图也很出色,能绘制各种二维和三维 彩色图形,自动化程度很高。 编程 ? 在Mathematica中,用户可以自己编制各种程序(文本 文件),开发新功能。用户开发的功能在软件启动时被 调入,与软件本身的功能一样使用。

数学建模

三、LINDO/LINGO软件
LINDO 和 LINGO 是美国 Lindo 系统公司开发的一 套专门用于求解最优化问题的软件包。 LINDO 用于求解线性规划和二次规划问题, LINGO 除了具有 LINDO 的全部功能外,还可以用于求解 非线性规划问题,也可以用于一些线性和非线性方 程(组)的求解。 LINDO 和 LINGO 软件的最大特色 在于可以允许优化模型中的决策变 量是整数(即整数规划),而且执 行速度很快。
数学建模

三、LINDO/LINGO软件
LINDO是一种专门用于求解数学规划问题的软件包。 由于LINDO执行速度很快、易于方便输入、求解和分 析数学规划问题。因此在数学、科研和工业界得到广 泛应用。 LINDO主要用于解线性规划、非线性 规划、二次规划和整数规划等问题。 也可以用于一些非线性和线性方程组 的求解以及代数方程求根等。LINDO 中包含了一种建模语言和许多常用的 数学函数(包括大量概论函数),可 供使用者建立规划问题时调用。
数学建模

三、LINDO/LINGO软件
LINDO/LINGO 软件作为著名的专业优化软件,其功 能比较强、计算效果比较好,与那些包含部分优化功 能的非专业软件相比,通常具有明显的优势。此外, LINDO/LINGO 软件使用起来非常简便,很容易学会 ,在优化软件(尤其是运行于个人电脑上的优化软件 )市场占有很大份额,在国外运筹学类的教科书中也 被广泛用做教学软件。

要学好用这两个软件最好的办法就 是学习他们自带的HELP文件。
数学建模

三、LINDO/LINGO软件
LINGO 实际上还是最优化问题的一种建模语言,包括 许多常用的函数可供使用者建立优化模型时调用,并 提供与其他数据文件的接口,易于方便地输入、求解 和分析大规模最优化问题。 由于这些特点,LINGO系统公司的线性、 非线性和整数规划求解程序已经被全 世界数千万的公司用来做最大化利润 和最小化成本的分析。 应用的范围包含生产线规划、运输、 财务金融、投资分配、资本预算、混 合排程、库存管理、资源配置等等。
数学建模

四、Maple软件
Maple是加拿大滑铁卢大学(University of Waterloo) 和Waterloo Maple Software(亦称Maplesoft枫软)公司 注册的一套为微积分、线性代数和微分方程等使用的 软件包。

良好的使用环境、强有力的符号计算、 高精度的数值计算、灵活的图形显示 和高效的编程功能。

数学建模

四、Maple软件
? Maple软件适用于解决微积分、解析几何、线性代数、 微分方程、计算方法、概率统计等数学分支中的常见 计算问题。

? Maple采用字符行输入方式,输入时需要按照规定的 格式输入,虽然与常见的数学格式不同,但灵活方式, 也很容易理解。输出则可以以字符方式和图形方式, 产生的图形结果可以很方便地剪贴到Windows应用程 序内。
?
数学建模

五、SAS软件
? SAS系统全称为Statistics Analysis System ,意为 统计分析系统。最早由北卡罗来纳大学的两位生物统 计学研究生编制,并于1976年成立了SAS软件研究所, 正式推出了SAS软件。 ? 1985年推出SAS PC微机版本,1987年推出DOS下的 SAS6.03版,之后又推出6.04版。以后的版本均可在 WINDOWS下运行,目前最高版本为SAS9.3版。 ? SAS是用于决策支持的大型集成信息系统,但该软件 系统最早的功能限于统计分析,至今,统计分析功能 也仍是它的重要组成部分和核心功能。

数学建模

五、SAS软件
? SAS集数据存取、管理、分析和展现于一体,为不同 的应用领域提供了卓越的数据处理功能。 ? 它独特的?多硬件厂商结构?(MVA)支持多种硬件 平台,在大、中、小与微型计算机和多种操作系统 (如UNIX,MVS WINDOWS 和DOS等)下皆可运行。 SAS采用模块式设计,用户可根据需要选择不同的模 块组合。 ? 它适用于具有不同水平与经验的用户,初学者可以较 快掌握其基本操作,熟练者可用于完成各种复杂的数 据处理。

数学建模

五、SAS软件
? SAS是数据管理和分析软件包,能够完成各种统计分 析、矩阵运算和绘图等。 ? SAS的各项功能由功能模块完成,其中BASA模块为必 需模块,其它模块可任选。供选择的模块包括统计 (STAS)、矩阵运算(IML)、绘图(GRAPH)和全 屏幕操作(FSP)等20余个。

数学建模

五、SAS软件
? 基础模块(BASE)
?
? ?

?
?

?

进行数据存储,调入,追加,拷贝和文件处理; 编写报告,打印图表; 进行数据排序,分类等操作; 完成一些基本统计数计算(如平均数和相关系数); 与一些软件包(dBASE,LOTUS等)及大型机进行数据交换 和通讯。 BASE模块为SAS系统的核心模块。

数学建模

五、SAS软件
? 统计模块(STAT)
?

?

?

提供一些高度可靠、完整的统计分析过程,主要有方差分 析(包括一元、多元的单因素及多因素实验设计的方差分 析),线性相关和回归分析(包括聚类分析、主成份分析、 因子分析、典范相关分析)以及非参数测验等,共计26个 过程。 每个过程还提供多种不同算法和选项,从而SAS系统成为一 个全面、细致、科学的统计分析方法集。 STAT模块为SAS系统的核心和精华。

数学建模

五、SAS软件
? 矩阵运算模块(IML)
?

一种交互式矩阵语言,可直接进行矩阵运算(加法,乘法, 求逆,计算特征值和特征向量等),适用于高级统计、工 程运算和数学分析。
能在微机的绘图设备上绘制图形,可制作三维图形、地图 和幻灯等。 为一交互式全屏幕软件,利用它可以 建立、修改和浏览SAS数据集中的观察 值,定义用户屏幕等。
数学建模

? 绘图模块(GRAPH)
?

? 全屏幕操作模块(FSP)
?

六、SPSS软件
SPSS 是统计产品与服务解决方案( Statistical Product and Service Solutions)的简称,为IBM公司推出的一 系列用于统计学分析运算、数据挖掘、预测分析和决 策支持任务的软件产品及相关服务的总称,有 Windows和Mac OS X等版本。 SPSS原是为大型计算机开发的,其版 本为 SPSSx , 80 年代初,微机开始普 及以后,它率先推出了微机版本(版 本为 SPSS/PC+ x.x ),占领了微机市 场,大大地扩大了自己的用户量。
数学建模

六、SPSS软件
80 年 代 末 , Microsoft 发 表 Windows 后 , SPSS 迅 速 向 Windows移植。 至1993年6月,正式推出SPSS for Windows 6.0版本。 该版本不仅修正了以前版本的错误,改写一些模块使 运行速度大大提高。而且根据统计理论与技术的发展, 增加了许多新的统计分析方法,使之功能日臻完善。

数学建模

六、SPSS软件
? 采用现今广为流行的电子表格形式作数据管理器,使 用户变量命名、定义数据格式、数据输入与修改等过 程一气呵成,免除了原DOS版本在文本方式下数据录 入的诸多不便。 ? 采用菜单方式选择统计分析命令,采用对话框方式选 择子命令,简明快捷,无需死记大量繁冗的语法语句, 这无疑是计算机操作的一次解放。

数学建模

六、SPSS软件
? 采用对象连接和嵌入技术,使计算结果可方便地被其 他软件调用,数据共享,提高工作效率。 ? 作为统计分析工具,理论严谨、内容丰富,数据管理、 统计分析、趋势研究、制表绘图、文字处理等功能, 几乎无所不包。

数学建模

内容

1 2 3

常用软件介绍 MATLAB基本操作 MATLAB编程及调试

4

MATLAB求解算例

数学建模

数据类型
? 常数和变量
?

?

?

和许多其他计算机语言一样,常数和变量是基本的语言元 素。 在MATLAB中使用变量比在其他语言中要方便一些,不必声 明变量的数据类型,只要用表达式给变量赋值就可以创建 该变量。 常数 ? MATLAB提供一些内部常数,这些常数定义了MATLAB应用 和编程中经常用到的数据。表中的常数可以不必声明, 直接应用于MATLAB编程。

数学建模

数据类型
常数 ans 常数 默认变量名

eps
pi i,j

浮点相对误差限
圆周率 虚数单位

inf
realmin realmax NaN version

无限值
计算机可以表示的最小浮 点数 计算机可以表示的最大浮 点数 不合法的数值值 MATLAB版本字符串
数学建模

数据类型
? 变量
?

?

变量名:MATLAB变量名的第1个字符必须是字母,字母间不 可留空格,后面可以跟字母、数字和下划线的任何组合, 最多只能有19个字母。 MATLAB 中变量名有大小写区分,所有A和a是不同的变量。 可以用isvarname函数确认变量名的合法性,如果变量名合 法,该函数返回1,否则返回0。
注意: MATLAB 用字符 i 和 j 表示虚数单位,如果涉及到 复数计算,应避免把 i 和 j 用 作变量名。

例如:isvarname 8th_row ans = 0

数学建模

数据类型
?

创建变量:在MATLAB中,不必声明变量的数据类型,例如 在命令窗口键入

A= 2 A= 2
? ?

就可以直接创建变量A。 如果变量已经存在,给它赋值会替换它的当前值。

数学建模

数据类型
数据类型 逻辑型数组 字符型数组 举例 magic(4)>10 ‘Hello’ 描述 只能包含1,0或true,false,任何非 0值转换为1 每个字符的长度为 16 位,该数组即 为字符串 长度为8、16、32、64位的有符号和 无符号整型数组,在内存足够的情 况下,可以用它们进行整型操作 单精度数值型数组。单精度类型的 数据需要的存储量比双精度类型少, 但精度稍微差一些 双精度数值型数组。是 MATLAB 中最 常用的变量类型 单元数组的元素包含其他数组,可 以将不同大小的有关系的数据和信 息集中到一起 结构数组具有字段名,这些字段包 含其他数组,结构数组也可以将有 关系的数据和信息集中起来 MATLAB 函数的句柄,函数句柄可以 在变量列表中进行传递,并用fecal 函数进行计算 MATLAB 类,该定制类用 MATLAB 函数 创建 Java类,可以使用 JavaAPI或第3方 定义的已经存在的类,或者用 Java 语言创建自己的类

int8, uint8, int16, uint8(magic(3)) uint16,int32,uint32,int64,uint6 4 single 3*10^38

double 单元数组

3*10^3005+6i {17’hello’eye(2)}

结构数组

a.day=12;a.color=’red’; a.mat=magic(3); @humps

函数句柄

类 Java类

inline(‘sin(x)’) java.awt.Frame

数学建模

数据类型
? MATLAB 中 进 行 数 值 计 算 , 默 认 时 所 有 变 量 都 为 double 型,使用 format 命令,可以设置变量的输出 格式,例如,在命令窗口键入下面的命令行,创建变 量VarFormat VarFormat = 10.1987 VarFormat= 10.1987 format long VarFormat ? 返回 VarFormat = 10.198700000000001
数学建模

数据类型
? 以15位浮点格式输出变量值,在命令行键入

>> format long e >> var var = 1.019870000000000e+001
? 以16进制输出变量值,在命令行输入 >> format hex >> var var = 402465bc01a36e2f
数学建模

数据类型
? 变量也可用来存放向量或矩阵,并进行各种运算,如 下例的行向量运算: x = [1 3 5 2]; y = 2*x+1 y = 3 7 11 5

数学建模

数据类型
? 我们可以随意更改、增加或删除向量的元素: y(3) = 2 % 更改第三个元素 y =3 7 2 5 y(6) = 10 % 加入第六个元素 y = 3 7 2 5 0 10 y(4) = [] % 删除第四个元素, y = 3 7 2 0 10 ? MATLAB会忽略所有在百分比符号(%)之后的文字, 因此百分比之后的文字均可视为程式的注解( Comments)。
数学建模

数据类型
? MATLAB亦可取出向量的一个元素或一部份来做运算 ? x(2)*3+y(4) % 取出 x的第二个元素和 y的第四个 元素来做运算 ans = 9 y(2:4)-1 % 取出y的第二至第四个元素来做运算 ans = 6 1 -1 ? 2:4代表一个由2、3、4组成的向量

数学建模

数据类型
? 将列向量转置(Transpose)后,即可得到列向量( Column vector): z = x' z = 4.0000 5.2000 6.4000 7.6000 8.8000 10.0000

数学建模

数据类型
? 不论是行向量或列向量,我们均可用相同的函数找出 其元素个数、最大值、最小值等 length(z) % z的元素个数 ans = 6 max(z) % z的最大值 ans = 10 min(z) % z的最小值 ans = 4

数学建模

数据类型
? 若要输入矩阵,则必须在每一列结尾加上分号(;) ,如:

A = [1 2 3 4; 5 6 7 8; 9 10 11 12]; A= 1 2 3 4 5 6 7 8 9 10 11 12

数学建模

数据类型
? 同样地,我们可以对矩阵进行各种处理: A(2,3) = 5 % 改变位於第二列,第三行的元素值 A= 1 2 3 4 5 6 5 8 9 10 11 12 B = A(2,1:3) % 取出部份矩阵B B=565

数学建模

数据类型
A = [A B'] % 将B转置後以行向量并入A A= 1 2 3 4 5 5 6 5 8 6 9 10 11 12 5 A(:, 2) = [] % 删除第二行(:代表所有列) A= 1 3 4 5 5 5 8 6 9 11 12 5 ? 这几种矩阵处理的方式可以相互叠代运用,产生各种 意想不到的效果,就看各位的巧思和创意。
数学建模

数据类型
? 提示:
?

在MATLAB的内部资料结构中,每一个矩阵都是一个以行为 主(Column-oriented )的阵列(Array),因此对于矩阵 元素的存取,我们可用一维或二维的索引(Index)来定址 。

? 在上述矩阵A中,位于第二列、第三行的元素可写为 A(2,3) (二维索引)或A(6)(一维索引,即将所有 直行进行堆叠后的第六个元素)

数学建模

数据类型
? 若要重新安排矩阵的形状,可用reshape命令:

B = reshape(A, 4, 2) % 4是新矩阵的列数,2是新矩阵 % 的行数 B= 5 8 9 12 5 6 11 5

数学建模

数据类型
? 提示:
?

A(:)就是将矩阵A每一列堆叠起来,成为一个行向量,而这 也是MATLAB变数的内部储存方式。reshape(A, 8, 1)和 A(:)同样都会产生一个8x1的矩阵。

? MATLAB可在同时执行数个命令,只要以逗号或分号 将命令隔开: x = sin(pi/3); y = x^2; z = y*10, z= 7.5000 ? 若一个数学运算是太长,可用三个句点将其延伸到下 一行: z = 10*sin(pi/3)* ... sin(pi/3);
数学建模

数据类型
? 若要检视现存于工作空间(Workspace)的变量,可 键入who: who Your variables are: testfile x ? 使用clear可以删除工作空间的变量: clear A A ??? Undefined variable 'A'.

function

or
数学建模

流程控制
? 重复命令
?

最简单的重复命令是for循环(for-loop),其基本形式为 :

for 变量 = 矩阵; 运算式; end
其中变量的值会被依次设定为矩阵的每一行,来执行介于 for和end之间的运算式。 若无意外情况,运算式执行的次数会等于矩阵的行数。

?

?

数学建模

流程控制
? 产生一个长度为6的调和数列: x = zeros(1,6); % x是一个16的零 矩阵 for i = 1:6, x(i) = 1/i; end

? 矩阵x最初是一个16的零矩阵,在for圈中,变量i的 值依次是1到6,因此矩阵x的第i个元素的值依次被设 为1/i。

数学建模

流程控制
? For循环可以是多层的,下例产生一个16的Hilbert 矩阵h,其中位于第i列、第j行的元素为
format rat disp(h) 1 1/2 1/3 1/4 1/5 1/6 1/2 1/3 1/4 1/5 1/6 1/7 1/3 1/4 1/5 1/6 1/7 1/8 1/4 1/5 1/6 1/7 1/8 1/9 1/5 1/6 1/7 1/8 1/9 1/10 1/6 1/7 1/8 1/9 1/10 1/11
数学建模

h = zeros(6); for i = 1:6, 行 for j = 1:6, 列 h(i,j) = 1/(i+j-1); end end

流程控制
? 在下例中,for循环列出先前产生的Hilbert矩阵的 每一行的平方和: for i = h, disp(norm(i)^2); % 印出每一行 的平方和 end 1299/871 282/551 650/2343 524/2933 559/4431 831/8801
数学建模

流程控制
? While循环 while 条件式; 运算式; end

? 例如,

x = zeros(1,6); % x是一个16的零矩阵 i = 1; while i <= 6, x(i) = 1/i; i = i+1; end format short
数学建模

流程控制
? 逻辑命令
?

最简单的逻辑命令是if, ..., end,其基本形式为

if 条件式; 运算式; end if rand(1,1) > 0.5, disp('Given random number is greater than 0.5.'); end Given random number is greater than 0.5.

数学建模

内容

1 2 3

常用软件介绍 MATLAB基本操作 MATLAB编程及调试

4

MATLAB求解算例

数学建模

一、函数
? MATLAB提供了很多内部数学函数 abs,sqrt,exp,sin ? 对负数取平方根或对数也不会导致错误,MATLAB会 自动返回复数计算结果。 ? MATLAB还提供了很多高级的数学函数,这些函数中 的大部分都接受复数参数。 bessel和gamma函数 ? 在命令窗口键入如下命令可以查看基本数学函数的列 表。 help elfun ? 键入下面的命令,可以找到更多的高级数学函数和矩 阵函数。 help specfun help elmat
数学建模

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

数学建模

一、函数
? 主函数
?

?

M文件的第一个函数称为主函数,主函数后面可以有任意个 子函数。 在多数情况下,主函数是M文件中可以从MATLAB命令行或从 另一个M文件函数调用的唯一函数,调用该函数时,使用定 义该函数的M文件的名称。

例如:average函数位于文件average.m中 function y = average(x) % 计算矢量元素的平均值

数学建模

一、函数
y = sum(x)/length(x); ? 可以从MATLAB命令行用下面的命令计算3个数的平均 值。 average([ 12 34 25])

注:一般使主函数的名称与M文件相同,如果函数 名与文件名不同,必须用文件名调用函数。

数学建模

一、函数
? 子函数
?

?

?

?

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

?。

一、函数
? 匿名函数
?

使用匿名函数,可以在不必创建M文件的情况下快速创建简 单函数。可以在MATLAB命令或任何M文件函数或脚本中创建 匿名函数。

? 创建匿名函数的语法格式为:
fhandle = @(arglist)expr

expr表示函数体,即函数要完成主要工作的代码, arglist为要传递给函数的逗号间隔的输入参数列表 ,返回函数句柄fhandle。
数学建模

一、函数
? 嵌套函数
?

可以在一个函数中嵌套定义一个或多个函数,嵌套函数具 有类似下面的形式。

function x=A(p1,p2) … function y = B(p3) … end … end

注意: M 文件函数一般不 需 要 end 语 句 , 但 使 用 嵌 套函数时需要此语句。如 果 M 文件包含一个或多个 嵌套函数,必须在 M 文件 中 使 用 end 语 句 终 止 所 主 函数,不管它们是否包含 嵌套函数。
数学建模

一、函数
? 私有函数
?

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

数学建模

一、函数
? 重载函数
?

有时候同一个函数可以用于多种情况,对应地有不同的输 入参数,此时要用到重载函数。比如,绘制二维线形图的 plot函数就有多种重载形式,

plot(Y) plot(X1,Y1,…)
?

这两个函数具有相同的函数名,不同的参数,调用plot函 数时MATLAB会根据函数的参数自动选择使用。

数学建模

二、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 shading interp axis equal

sphere ? 保存为spher.m,在命令窗口中键入 生成单位球面。 ? 这 里 的 使 用 方 式 与 drawsur 完 全 不 同 , 它 没 有 function 关键字,没有输入参数。这就是脚本式 M文 件的使用方式。
数学建模

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

数学建模

二、M文件
? M文件的基本结构
?

函数式M文件比较标准的格式如下所示,其中加粗的文字表 示M文件的基本组成部分:

Function [x,y]=myfun(a,b,c) 函数定义行

% H1行—用一行文字来综述函数的功能 % 帮助文本—用一行或多行文本解释如何使用函数 % 在命令行中键入?help<functionname>?时可以使用它

数学建模

二、M文件
% 函数体—一般从第一个空白行后开始 % 注释—描述函数的行为,输入输出的类型等 % 在命令行中键入?help<functionname>?时不会显示注释文本 % 开始编写函数代码

x= prod(a,b);
? 一个完整的M文件应该包括函数定义行、H1行、帮助 文本、函数体、注释和函数代码等方面的内容,其中 函数定义行和函数代码是必须的。

数学建模

二、M文件
? 函数的参数
?

调用函数时,调用者通过一个参数列表传递数据,并获取 返回值,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中的内容
?

因为varargin将所有输入参数包含在一个单元数组中,所 以有必要使用单元数组索引来提取数据

y(n) = varargin{n}(2);
?

其中,索引表达式{n}获取varargin的第n个单元。表达式 (2)表示单元内容的第二个元素。

数学建模

二、M文件
? 打包varargout
?

当允许有任意多个输出参数时,必须将所有输出打包到 varargout单元数组中,使用nargout确定输出参数的个数 。例如,下面的代码接收两列输入数组,其中第一列表示 一系列x坐标,第二列表示y坐标,它将数组分成单独的 [xi,yi]矢量,可以将该矢量传递给testvar函数。
循环中的赋值语 句使用了单元数 组的赋值语法。

function [varargout] = testvar2(arrayin) for k = 1:nargout varargout{k} = arrayin(k,:); % 单元数组赋值 endfor

数学建模

二、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)

数学建模

三、程序调试和错误处理
? 用try-catch语句检查错误
?

try…catch 语句进行错误捕获,它把 有可能引起异常的语句放在 try控制块 中,这样当 try 控制块中 statement 语 句引起异常时,catch 控制块就可以捕 获它,并针对不同的错误类型,进行 不同的处理。调用格式:

try, statement, …, statement, catch, statement, …, statement, 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”菜单如图9.8所示,各种方法主要分 为三种,即定点调试、断点调试以及错误和警告调试等。

数学建模

三、程序调试和错误处理
? 定点调试
?

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

? 断点调试
?

? 错误和警告调试
?

数学建模

四、编程技巧
? 矢量化
?

使程序运行更快的方法之一是将构造程序的算法进行矢量 化,在其他程序语言可能使用 for 循环或 do 循环的地方, MATLAB可以使用矢量或矩阵操作,对于下面的程序:

x=.01; for k = 1:1001 y(k) = log10(x); x = x+.01; end

进行矢量化后如下所示: x=.01:.01:10; y=log10(x);

数学建模

四、编程技巧
? 预分配内存空间
?

如果不能矢量化某段代码,可以通过预分配保存输出的任 何矢量或数组的内存空间来加速for循环,例如,下面的代 码用函数zeros预分配for循环中创建的矢量的内存空间, 使得这个for循环的运行速度显著加快。

r = zeros(32,1); for n = 1:32 r(n) = rank(magic(n)); end
?

若没有使用内存预分配,每循环一次,MATLAB解释器就会 将r矢量的元素增加一个,而内存预分配后,就取消了这个 步骤,从而使运行加速。
数学建模

五、资料的储存与载入
? 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: Bhjy ans i x z save test B y % 将变量B与y储存至test.mat dir % 列出现在目录中的档案

数学建模

六、结束MATLAB
? 结束MATLAB的方法
?

键入exit 键入quit 直接关闭MATLAB的命令视窗(Command window)

?

?

数学建模

内容

1 2 3

常用软件介绍 MATLAB基本操作 MATLAB编程及调试

4

MATLAB求解算例

数学建模

算例1
研究偶极子(Dipole)的电势(Electric potential)和电 场强度(Electric field density)。 设在 (a, b) 处有电荷 ? q ,在 (?a, ?b)处有电荷 ? q 。 那么在电荷所在平面上任何一点的电势和场强分别 ? q 1 1 为 V ( x, y) ? 4?? , ( ? ) E ? ??V r r
0 ? ?

其中, r? ? ( x ? a)2 ? ( y ? b)2 , r? ? ( x ? a) 2 ? ( y ? b) 2
1 4?? 0 ? 9 ?109
q ? 2 ?10?6

又设电荷

a ? 1.5

b ? ?1.5

数学建模

算例1
clear;clf; q=2e-6;k=9e9;a=1.5;b=-1.5; x=-6:0.6:6;y=x; [X,Y]=meshgrid(x,y); rp=sqrt((X-a).^2+(Y-b).^2);rm=sqrt((X+a).^2+(Y+b).^2); V=q*k*(1./rp-1./rm); [Ex,Ey]=gradient(-V); AE=sqrt(Ex.^2+Ey.^2); Ex=Ex./AE;Ey=Ey./AE; cv=linspace(min(min(V)),max(max(V)),49);
数学建模

算例1
contourf(X,Y,V,cv,'k-') %axis('square') title('\fontname{隶书}\fontsize{22}偶极子的场'),hold on quiver(X,Y,Ex,Ey,0.7) plot(a,b,'wo',a,b,'w+') plot(-a,-b,'wo',-a,-b,'w-') xlabel('x');ylabel('y'),hold off

数学建模

算例1

数学建模

算例2

hist指令的使用示例。 randn('state',1),rand('state',31) x=randn(100,1);y=rand(100,1); subplot(1,2,1),hist(x,7) subplot(1,2,2),histfit(x,20)

数学建模

算例2

n_y1=min(y):0.1:max(y);n_y2=min(y):0.05:max(y); subplot(1,2,1),hist(y,n_y1) subplot(1,2,2),hist(y,n_y2)

数学建模

算例3
? 12e 取发生信号的原始模型为 y( x) ? 3e 。 x在 [0, 4]中取值; y 受到噪声0.3*(rand(n,1)-0.5) 的污染。
? a3 x ? a4 x y ? a e ? a e 本例演示:如何以 为模型,通过 1 2 fminsearch从受污染数据中,估计出参数 。
?0.4 x ?3.2 x

a ? [a(1), a(2), a(3), a(4)] ? [a1 , a2 , a3 , a4 ]

数学建模

算例3
? (1)创建M文件xydata.m ? [XYDATA.M] ? function [x,y,STDY]=xydata(k_noise) %xydata.m x=[0:0.2:4]'; yo=3*exp(-0.4*x)+12*exp(-3.2*x); rand('seed',234) y_noise=k_noise*(rand(size(x))-0.5); y=yo+y_noise; STDY=std(y_noise);
数学建模

算例3
? 创建M文件twoexps.m ? [TWOEXPS.M] ?
function E=twoexps(a,x,y) %twoexps.m x=x(:); y=y(:); Y=a(1)*exp(-a(3)*x)+a(2)*exp(-a(4)*x); E=sum((y-Y).^2);

数学建模

算例3
? (2)编写M脚本文件作为主文件 [EXM.M] ? %exm041022_1.m k_noise=0.3; ? [x,y,STDY]=xydata(k_noise); a0=[1 1 1 1]; options=optimset('fminsearch'); options.TolX=0.01; options.Display='off'; a=fminsearch(@twoexps,a0,options,x,y); chi_est=twoexps(a,x,y)/STDY^2; freedom=length(x)-length(a0); Q=1-chi2cdf(chi_est,freedo
数学建模

算例3
? y_est=a(1)*exp(-a(3)*x)+a(2)*exp(-a(4)*x); ych='y_e_s_t='; a1=num2str(a(1)); a2=num2str(a(2)); a3=num2str(a(3)); a4=num2str(a(4)); char_y_est=[ych,a1,'*exp(-',a3,'*x)+',a2,'*exp(-',a4,'*x)']; plot(x,y,'b+');holdon, plot(x,y_est,'r'); hold off, axis([0,4,0,16])
数学建模

算例3
text(0.4,14,'y=3*exp(-0.4*x)+12*exp(-3.2*x)') text(0.4,12,char_y_est),text(2.5,9,['chi2=' num2str(chi_est)]) text(2.5,7,['freedom=' , num2str(freedom)]) text(2.5,5,['Q=' , num2str(Q)])

,

数学建模

算例3
? (3 ) ? exm

数学建模

作业
完成实验报告(一)



更多相关文章:
2016深圳杯数学建模A题
2016深圳杯数学建模A题_数学_自然科学_专业资料。...《全国大学生数学建模竞赛章程》和《全国大学生数学...非线性规划问题, 18 于是又可以运用 MATLAB 对其...
2016高教社杯全国大学生数学建模竞赛题目
2016高教社杯全国大学生数学建模竞赛题目_数学_自然科学_专业资料。个人建模过程...利用 MATLAB 建立电压放电时间的线性模型: U ?t ? ? ?0.0003499t ?10.74...
2016年全国大学生数学建模竞赛题
2016全国大学生数学建模竞赛题_城乡/园林规划_工程科技_专业资料。小区开放对...B3 的判断矩阵可用 MATLAB 软件计算出它们各自的最大特征向量均为 2,权重在表...
2015年全国大学生数学建模比赛A题一等奖论文
多层优化搜索算法,遗传算法,图像处理,MATLAB 全国大学生数学建模竞赛一等奖论文 1...©2016 Baidu 使用百度前必读 | 文库协议 | 广告服务 | 企业文库 | 网站...
2015年全国大学生数学建模竞赛A题全国二等奖优秀论文
2015年全国大学生数学建模竞赛A题全国二等奖优秀论文...针对问题四,第一问中,利用 MATLAB 将视频每隔 1...文档贡献者 星空深邃kd 贡献于2016-06-29 ...
2011高教社杯全国大学生数学建模竞赛
1 2011 高教社杯全国大学生数学建模竞赛 编号专用页...Matlab 拟合图形(见图 4) :图 4 未来 10 年...(年) 2014 2016 2018 2020 4.15 深圳市人口结构...
2013年全国大学生数学建模竞赛校内选拔赛 18组
2013年全国大学生数学建模竞赛校内选拔赛 18组_营销...对草地生长速率的影响,并利用 MATLAB 模拟草地覆盖...2016 5.3.3迭部地区草地畜牧业可持续发展策略的...
2016全国数学建模竞赛国家奖定稿
2016全国数学建模竞赛国家奖定稿_数学_自然科学_专业资料。全国赛成绩 ...(中国人民大学) 专科组 MATLAB 创新奖获得者:刘苏生、祝王缘、王柏熙(海军...
数学建模培训计划
数学建模竞赛培训计划 2014 年全国大学生数学建模竞赛...逐渐掌握数学软件(matlab)的使用,熟 悉其编程技巧 ...文档贡献者 isdfzjzy31944 贡献于2016-06-22 1/...
我校在2015年全国大学生数学建模竞赛获佳绩
全国大学生数学建模竞赛陕西赛区 2015 颁奖仪式暨 2016 动员大会 在陕西科技大学...数学应用软件 Matlab、 Mathematica 和 Lingo 软件的介绍与应用,科技论文写作训练...
更多相关标签:
2016大学生建模竞赛    2016全国数学建模竞赛    2016研究生建模竞赛    2016年数学建模竞赛    2016数学建模竞赛成绩    2016数学建模竞赛试题    2016数学建模竞赛    2016美国数学建模竞赛    

All rights reserved Powered by 甜梦文库 9512.net

copyright ©right 2010-2021。
甜梦文库内容来自网络,如有侵犯请联系客服。zhit325@126.com|网站地图