1、Matlab与计算机仿真数学建模教练组助管计算机52班唐佩佳60minsMatlab介绍20mins计算机仿真Xmins自由提问1.Maltlab 的特点用法简单适用范围广程序结构强具有开放性和延展性500多种数学、统计、科学及工程方面的函数标识自然,使问题和解答像数学算式一样简单明了用户可以将精力用于解题方面,而不是浪费在语言操作上1.1 数值运算能力强数值运算能力强强有力的二维、三维图形工具物件导向图形架构物件导向图形架构让使用者可以执行视觉数据分析,并制作高品质的图形1.2 先进进的资资料视觉视觉化功能作为一种直译式程序语言,编程所花时间约为FORTRAN或C的几分之一几分之一不需要编译
2、、连接即能执行包含了丰富、易用的内建功能1.3 高阶阶但简单简单的程序环环境大多数核心文件和工具箱文件都是开放的,容许用户接触大多数文件的源代码可以更改现有函数库中的函数甚至可以加入自己的函数使Matlab成为使用者所需要的编程环境1.4 开放及可延伸的架构这些工具箱提 供了使用者在特别应用领域所需之许多函数。现有工具箱有:符号运算(利用Maple V的计算核心执行 )、影像处理、统计分析统计分析、信号处理、神经网络神经网络、模模拟分析拟分析、控制系统、即时控制、系统确认、强建控制、弧线分析、最佳化弧线分析、最佳化、模糊逻辑模糊逻辑、mu分析及合成、化学计量分析。1.5 丰富的程式工具箱 2.
3、数组及矩阵的创建和操作2.1 变变量一般变量命名规则等和C、C+等高级语言相同,不赘述特殊变量变变量名含义义ans运算结果的默认变量名pi圆周率eps计算机的最小数inf无穷大,如NaN非数,如 ,i,jrealmin最小的可用正实数realmax最大的可用正实数10001ij以上变量如未被用户使用,则变量的值为系统的预定义的值如果用户对上表中的变量进行了重新赋值,则变量的值被临时覆盖,可通过clear命令消除用户自定义的变量的值2.2 数组数组的创创建直接输入A=1 2 3; 4 5 6; 7 8 9;语句生成 from:step:to 格式生成固定步长的数组 linspace(a,b,n)
4、 生成ab间的线性分布的n个素的数组 logspace(a,b,n) 生成 之间对数等分的n个元素的数组10 10ab特殊矩阵的生成方法zeros(m,n) mxn的全0矩阵ones(m,n) mxn的全1矩阵rand(m,n) mxn的均匀分布的随机矩阵,取值为01randn(m,n) mxn的正态分布的随机矩阵 eye(n,n) mxn的单位阵2.3 矩阵阵的提取A(r,c) 矩阵A的元素(r,c)A(r,:) 矩阵A的第r行A(:,c) 矩阵A的第c列利用逻辑矩阵来提取矩阵用于:寻找矩阵中大于某个值的元素等类似的问题%寻找A中所有大于0.5的元素%B=A0.5;A(B)2.4 矩阵阵元素
5、的更改或删删除A(i,j)=x; %将矩阵A中的(i,j)的值改为xA(:,3)=; %删除矩阵A中的第3列2.5 矩阵阵的特殊操作triu(x) 产生X的上三角矩阵tril(x) 产生X的下三角矩阵3.矩阵运算3.1 矩阵阵之间间的关关系运运算C1=A=B C1=A=B 判断A,B是否相同,同则为1,不同则为0C1=A=B C1=A=B 判断A是否大于等于B,是则为1,不是则为0介绍两个常用于调试程序的函数size(A) 测算矩阵的大小 ,返回m nisempty(A) 判断矩阵是否为空,是则为13.2 用图图形方式查查看稀疏矩阵阵的信息exp3_2_1%A=A=sprandsym(200,
6、0.03)+100*speye(200,200); 生成系数矩阵spy(A); 画出稀疏矩阵A中的非零元素分布图%exp3_2_2%A=;A=sprandsym(200,0.03)+100*speye(200,200);p=;p=symamd(A); 计算矩阵A的对称spy(A(p,p); 画出排序后A中非零元素的分布图4.字符、元胞和结构数组字符数组(字符串)可以被很简单的创建,类型转换,比较,查找,替换等。且操作比C、C+简单。但在建模中较少运用,在此不赘述。结构数组是一种非常有用的数据结构,尤其是在解决复杂问题时可以很大程度上提高算法效率。结构数组实质上类似与C、C+中的结构体结构数组结
7、构体exp4_1_1%player.name=Nike; %创建name并赋值player.nation=China; %创建nation并赋值player.att=20 17 19 20; %创建nation并赋值5.多项式与数据分析5.1 多项项式的四则运则运算及导数导数%exp5_1_1%p1=1 8 0 0 -10; %p2=2 -1 3; %poly2str(p1,x) %以比较习惯的方式显示多项式poly2str(p2,x) %以比较习惯的方式显示多项式43810 xx223xxy=conv(p1,p2) %使用Conv函数求两多项式的乘积poly2str(y,x) %以比较习惯的
8、方式显示多项式y1=polyder(y); %使用polyder函数求导数poly2str(y1,x) %以比较习惯的方式显示多项式5.2 多项项式求值值polyval(p,a) %以p为系数的多项式,将自变量的值取aa 可以是一个数,也可以是矩阵,当其为矩阵时相当于取a 中的每一个元素,结果是一个矩阵多项式求根 roots()部分分式展开 residue()多项式的微分积分 5.2 数数据插值插值5.2.1一维数据插值Y1interp1(X,Y,X1,method)根据X,Y的值,计算出在X1处的值,并返回给Y1,其中X,Y是两个等长的已知向量,分别描述采样点和样本值,X1描述欲插值的点,返
9、回值Y1是与X1等长的插值结果。method是插值函数的类型,允许的取值有linear(线性插值)、nearest(用最接近的相邻点插值)、cubic(三次插值)、spline(三次样条插值)5.2.1二维数据插值Z1=interp2(X,Y,Z,X1,Y1,method)5.3 曲线拟线拟合多项式曲线拟合是一个用一个多项式来逼近一组给定的数据,拟合的准则是最小二乘法,即寻找一个f(x),使得最小21( )niiif xy拟合的阶数不宜太高!5.4 数数据统计处统计处理函数数名功能max(A)矩阵或向量A的最大值min(A)矩阵或向量A的最小值sum(A)矩阵或向量A的和mean(A)矩阵或向
10、量A的平均值median(A)矩阵或向量A的中值corrcoef(X,Y)矩阵X与Y的相关系数排序Y,I=sort(A,dim)函数返回一个对A中的元素按升序排列的新向量,Y是排序后的向量,而I记录Y中的元素在A中的位置。其中,dim指明对矩阵A中的列还是行排序,dim=1,则按列排,dim=2,则按行排。6.图形6.1 绘图绘图以合适的图来表现结果很直观,很形象,比单纯数据更易理解,好的图将成就好的论文!结合经验,给出如下建议:线型及颜色视角统计图 一图多线 不要忘记做标注 三维图中注意调整 饼图 火柴图exp6_1_1 火柴图exp6_1_2 饼图exp6_1_3 三维曲面图7.Matla
11、b在各工程领域的应用7.1 在工程优优化中的应应用matlab优化工具箱提供了大量优化函数来求解不同类型的优化问题线性规划问题无约束优化问题有约束优化问题二次规划问题最小最大化问题多目标规划问题7.2 在自动动控制中的应应用控制系统工具箱给出了丰富的函数来描述以下不同的不同控制系统形式,模型间的转换按系统描述函数的形式来分传递函数模型零极点模型状态空间方程按输入输出的变量数目来分:单输单输入入单输单输出系出系统统(SISOSISO)多多输输入多入多输输出系出系统统(MIMOMIMO)单输单输入多入多输输出系出系统统(SIMOSIMO)多多输输入入单输单输出系出系统统(MISOMISO)还有系统
12、的串联、并联和反馈等时域及频域分析时域分析:一阶系统、二阶系统和高阶系统的时域分析,求解系统阶跃响应、冲击响应等频域分析的三种基本方法:幅相频特性(Nyquist图)对数频率特性(Bode图)对数幅相频特性(Nichols图)7.3 在数数字信号处号处理中的应应用u数字信号处理基础知识信号的产生信号的运算信号的抽取和插值 u数字信号的变换技术离散傅立叶变换(DFT)快速傅立叶变换(FFT)Hilbert傅立叶变换 u数字滤波器的分析与实现7.4 在人工神经网络经网络中的应应用感知器 是一种线性分类器,可以解决文字识别等简单的模式识别问题 比较古老,现已很少运用线性神经网络 是一种简单的神经元网
13、络,可以解决函数逼近,预测与预报,滤波,模式识别,数据压缩,分类等问题BP神经网络 人工神经网络的精华部分,是前向神经网络的核心,可以用于函数逼近、模式识别、数据压缩、分类等问题的研究径向基网络 在学习速率、可扩展性等方面克服了BP的缺点,具有广泛的应用自组织竞争人工神经网络 具有自组织、自适应的学习能力、扩展了神经网络在模式识别等方面的应用exp7_4_1 %线性神经网络(函数逼近) sin(2)sin(4)sin(8)tytt02t 24t 46t BP神经网络应用举例exp7_4_2 %函数逼近exp7_4_3 %分类exp7_4_5 %图的存储(Command Window)exp7_
14、4_4 %噪声去除8.计算机仿真计算机仿真要预测却没有可靠的方法题目没有数据系统复杂适用于计算机仿真解决的问题难以用数序公式表示的系统,或者没有建立和求解数学模型的有效方法虽然可以用解析的方法解决问题,但数学的分析与计算过于复杂难以在实际环境中进行实验和观察时,计算机仿真是唯一可行的办法仿真的几个重要步骤连续问题离散化将系统变换的全过程离散为一个个单位时间,每过一个单位时间,检查系统各参数,根据参数计算出下一个状态,再过一个单位时间,再检查各参数,再计算产生随机数对于不同的问题产生不同分布的随机数例如a.涉及排队论的问题,需要产生足够多的满足泊松分布的随机数b.已知分布函数可以生成满足该分布的
15、随机数(蒙特卡罗仿真)实例 评价一个超市的运营效率顾客流量商品的分布过道的宽窄收银台的个数收银人员的效率虚拟超市9.几点经验数学建模与ACM的辩证关系二者的联系已知数据需要程序来读取、预处理建立的数学模型也需要通过程序来验证其优劣,提供改进方向对模型进行敏感度、鲁棒性测试并评价将结果以图表的形式展现可以说,数学软件的运用贯穿了建模的始终。对于复杂的问题,更是对程序设计人员提出了更高的要求!要求他们:能够运用较好的数据结构和优秀的算法能够经受住海量数据(100万个以上的数据流)的考验这样的复杂问题,程序量一般大于1000行(matlab),1800行(C、C+)二者的区别误区一: ACM能搞定一
16、切!建模就是一个ACM的大作业而已ACM侧重于算法,而数学建模侧重于模型的建立,算法只是模型的求解的一种方法。只有程序,没有公式只有算法,没有模型只有求解结果,没有建模过程无效!误区二:程序运行得这么慢,还不如用C/C+编呢!小规模问题,Matlab与其他高级语言运行时间差不多,对于大规模问题,不超过20mins是可接受的。语言不分优劣,重要的是使用习惯,可以用自己熟悉的语言完成程序的主题,将结果用Matlab来显示,Matlab提供了与各高级语言的接口。误区三我们队要组队的话最好找一个参加ACM的数学建模对程序的要求并不是特别高,只要求你会开机,会认识键盘,会用鼠标就成!Matlab淡化了其
17、他高级语言的语法上的严格,可以主要关注求解而不是语法错误Matlab容易上手,一般对于一个没有学过C的人,边看边练,一天三小时的话,一周就能运用Matlab的大部分函数对于有一定编程基础(上过C/C+课)有几个建议:保持良好的程序结构(缩进,必要的注释)善于使用良好的数据结构和算法有良好的身体,才会有好的灵感谦虚谨慎,戒骄戒躁 10万行就不能说自己了解Matlab一个优秀的数据处理人员的专业素质是:当讨论出具体模型后,要能写出大致的算法流程,寻找数据并作预处理,按算法迅速写好程序,并能根据运行结果反馈给队友模型改进方向,再根据队友的建议修改相应的程序,直到满意。最后作出直观合理的图形或表格,定量给出模型的评价参数期望与大家交流唐佩佳(非诚勿扰)感谢同学们的参与和数学建模俱乐部的精心组织!推荐书目刘会灯,朱飞,Matlab编程基础与典型运用,人民邮电出版社