当前位置: 首页 > >

Matlab与计算机仿真

发布时间:

Matlab与计算机仿真
数学建模教练组助管 计算机52班 唐佩佳

Matlab 介绍

60mins

计算机 仿真

20mins

自由提 问

Xmins

?用法简单

?适用范围广
?程序结构强 ?具有开放性和延展性

1.1 数值运算能力强

?500多种数学、统计、科学及工程方面的 函数

?标识自然,使问题和解答像数学算式一样 简单明了 ?用户可以将精力用于解题方面,而不是浪 费在语言操作上

1.2 先进的资料视觉化功能

?强有力的二维、三维图形工具
?物件导向图形架构让使用者可以执行视觉 数据分析,并制作高品质的图形

1.3 高阶但简单的程序环境

?作为一种直译式程序语言,编程所花时间 约为FORTRAN或C的几分之一

?不需要编译、连接即能执行
?包含了丰富、易用的内建功能

1.4 开放及可延伸的架构

?大多数核心文件和工具箱文件都是开放的, 容许用户接触大多数文件的源代码

?可以更改现有函数库中的函数
?甚至可以加入自己的函数使Matlab成为使 用者所需要的编程环境

1.5 丰富的程式工具箱

?这些工具箱提 供了使用者在特别应用领 域所需之许多函数。现有工具箱有:符号运 算(利用Maple V的计算核心执行 )、影像 处理、统计分析、信号处理、神经网络、模 拟分析、控制系统、即时控制、系统确认、 强建控制、弧线分析、最佳化、模糊逻辑、 mu分析及合成、化学计量分析。

2.1 变量

?一般变量
命名规则等和C、C++等高级语言相同,不赘述

?特殊变量

变量名

含义

ans
pi eps inf

运算结果的默认变量名
圆周率 计算机的最小数 无穷大,如
0 1 0

NaN
i,j realmin realmax

非数,如 0 ,?
?
i ? j ? ?1

最小的可用正实数 最大的可用正实数

以上变量如未被用户使用,则变量的值 为系统的预定义的值

如果用户对上表中的变量进行了重新赋 值,则变量的值被临时覆盖,可通过cle ar命令消除用户自定义的变量的值

2.2 数组的创建

?直接输入 A=[1 2 3; 4 5 6; 7 8 9];

?语句生成 from:step:to 格式生成固定步长的数组 linspace(a,b,n) 的数组 logspace(a,b,n) n个元素的数组 生成a~b间的线性分布的n个素

生成

10a ~ 10b

之间对数等分的

?特殊矩阵的生成方法 zeros(m,n) ones(m,n) mxn的全0矩阵 mxn的全1矩阵

rand(m,n) 取值为0~1
randn(m,n) eye(n,n)

mxn的均匀分布的随机矩阵,

mxn的正态分布的随机矩阵 mxn的单位阵

2.3 矩阵的提取

?A(r,c) ?A(r,:)

矩阵A的元素(r,c) 矩阵A的第r行

?A(:,c) 矩阵A的第c列

?利用逻辑矩阵来提取矩阵 用于:寻找矩阵中大于某个值的元素等类似 的问题 %寻找A中所有大于0.5的元素% B=A>0.5; A(B)

2.4 矩阵元素的更改或删除

A(i,j)=x; A(:,3)=[];

%将矩阵A中的(i,j)的值改为x %删除矩阵A中的第3列

2.5 矩阵的特殊操作

triu(x) tril(x)

产生X的上三角矩阵 产生X的下三角矩阵

3.1 矩阵之间的关系运算

C1=A==B 不同则为0

判断A,B是否相同,同则为1,

C1=A>=B 判断A是否大于等于B,是则 为1,不是则为0

介绍两个常用于调试程序的函数

size(A) isempty(A)

测算矩阵的大小 ,返回[m n] 判断矩阵是否为空,是则为1

3.2 用图形方式查看稀疏矩阵的信息

%exp3_2_1% A=[] A=sprandsym(200,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中非零元素的分布图

字符数组(字符串)可以被很简单的创建,类型转 换,比较,查找,替换等。 且操作比C、C++简单。但在建模中较少运用,在此 不赘述。

结构数组是一种非常有用的数据结构,尤其是在 解决复杂问题时可以很大程度上提高算法效率。

结构数组实质上类似与C、C++中的结构体

结构数组

结构体

%exp4_1_1%

player.name=‘Nike’; %创建name并赋值 player.nation=‘China’; %创建nation并赋值 player.att=[20 17 19 20]; %创建nation并赋值

5.1 多项式的四则运算及导数

%exp5_1_1%

p1=[1 8 0 0 -10]; % p2=[2 -1 3]; % poly2str(p1,’x’)
poly2str(p2,’x’)

x4 ? 8x3 ? 10
2 x2 ? x ? 3

%以比较*惯的方式显示多项式
%以比较*惯的方式显示多项式

y=conv(p1,p2) %使用Conv函数求两多项式 的乘积 poly2str(y,’x’) 多项式 %以比较*惯的方式显示

y1=polyder(y);
poly2str(y1,’x’) 多项式

%使用polyder函数求导数
%以比较*惯的方式显示

5.2 多项式求值

polyval(p,a) 自变量的值取a

%以p为系数的多项式,将

a 可以是一个数,也可以是矩阵,当其为矩阵时 相当于取a 中的每一个元素,结果是一个矩阵

?多项式求根
?部分分式展开

roots()
residue()

?多项式的微分积分

5.2 数据插值

5.2.1一维数据插值

Y1=interp1(X,Y,X1,’method’)

根据X,Y的值,计算出在X1处的值,并返回 给Y1,其中X,Y是两个等长的已知向量,分 别描述采样点和样本值,X1描述欲插值的 点,返回值Y1是与X1等长的插值结果。

method是插值函数的类型,允许的取值有linear(线 性插值)、nearest(用最接*的相邻点插值)、cu bic(三次插值)、spline(三次样条插值) 5.2.1二维数据插值 Z1=interp2(X,Y,Z,X1,Y1,’method’)

5.3 曲线拟合

多项式曲线拟合是一个用一个多项式来*蛔楦 的数据,拟合的准则是最小二乘法,即寻找一个f(x), 使得

?
i ?1

n

f ( xi ) ? yi

2

最小
拟合的阶数不宜太高!

5.4 数据统计处理

函数名 max(A) min(A) sum(A) mean(A)

功能 矩阵或向量A的最大值 矩阵或向量A的最小值 矩阵或向量A的和 矩阵或向量A的*均值

median(A) corrcoef(X,Y)

矩阵或向量A的中值 矩阵X与Y的相关系数

排序

[Y,I]=sort(A,dim)
函数返回一个对A中的元素按升序排列的新 向量,Y是排序后的向量,而I记录Y中的元 素在A中的位置。 其中,dim指明对矩阵A中的列还是行排序, dim=1,则按列排,dim=2,则按行排。

6.1 绘图

以合适的图来表现结果很直观,很形象,比单纯 数据更易理解,好的图将成就好的论文!
结合经验,给出如下建议:

线型及颜色

? 一图多线 ? 不要忘记做标注 ? 三维图中注意调整 ? 饼图 ? 火柴图

视角 统计图

exp6_1_1 exp6_1_2 exp6_1_3

火柴图 饼图 三维曲面图

7.1 在工程优化中的应用

matlab优化工具箱提供了大量优化函数来求解不同类 型的优化问题
?线性规划问题 ?无约束优化问题 ?有约束优化问题 ?二次规划问题 ?最小最大化问题 ?多目标规划问题

7.2 在自动控制中的应用

控制系统工具箱给出了丰富的函数来描述以下不同的 不同控制系统形式,模型间的转换 按系统描述函数的形式来分 ?传递函数模型 ?零极点模型 ?状态空间方程

按输入输出的变量数目来分: ?单输入单输出系统(SISO) ?多输入多输出系统(MIMO)

?单输入多输出系统(SIMO)
?多输入单输出系统(MISO) 还有系统的串联、并联和反馈等

时域及频域分析 ?时域分析: 一阶系统、二阶系统和高阶系统的时域分析,求解系统 阶跃响应、冲击响应等 ?频域分析的三种基本方法: 幅相频特性(Nyquist图) 对数频率特性(Bode图) 对数幅相频特性(Nichols图)

7.3 在数字信号处理中的应用

?数字信号处理基础知识 信号的产生 信号的运算 信号的抽取和插值

?数字信号的变换技术 离散傅立叶变换(DFT) 快速傅立叶变换(FFT) Hilbert傅立叶变换

?数字滤波器的分析与实现

7.4 在人工神经网络中的应用
? 是一种线性分类器,可以解决文字识别等 简单的模式识别问题
感知器

? 比较古老,现已很少运用

? 是一种简单的神经元网络,可以解决函数 *げ庥朐けǎ瞬ǎJ绞侗穑 据压缩,分类等问题 线性神经网络

BP神经网络

? 人工神经网络的精华部分,是前向神经 网络的核心,可以用于函数*⒛J 识别、数据压缩、分类等问题的研究

径向基网络

? 在学*速率、可扩展性等方面克服了BP 的缺点,具有广泛的应用

自组织竞争人 工神经网络

? 具有自组织、自适应的学*能力、扩展 了神经网络在模式识别等方面的应用

exp7_4_1

%线性神经网络(函数*
?sin(2? t ) ? y ? ?sin(4? t ) ?sin(8? t ) ?
0?t ?2 2?t ?4 4?t ?6

BP神经网络应用举例 exp7_4_2 exp7_4_3 %函数* %分类%

exp7_4_5 exp7_4_4

%图的存储(Command Window)% %噪声去除%

题目没有 数据

系统复杂

要预测却 没有可靠 的方法

计算机仿真

适用于计算机仿真解决的问题 ?难以用数序公式表示的系统,或者没有建立和求 解数学模型的有效方法 ?虽然可以用解析的方法解决问题,但数学的分析 与计算过于复杂

?难以在实际环境中进行实验和观察时,计算机仿 真是唯一可行的办法

仿真的几个重要步骤

产生随机数
对于不同的问题产生不同分布的随机数例如
a.涉及排队论的问题,需要产生足够多的满足泊松分布的随机数 b.已知分布函数可以生成满足该分布的随机数(蒙特卡罗仿真)

连续问题离散化
将系统变换的全过程离散为一个个单位时间,每过一个单位时间,检查 系统各参数,根据参数计算出下一个状态,再过一个单位时间,再检查 各参数,再计算

实例 评价一个超市的运营效率 ?顾客流量 ?商品的分布 ?过道的宽窄 ?收银台的个数 ?收银人员的效率 虚拟超市

数学建模与ACM的辩证关系 ?二者的联系 已知数据需要程序来读取、预处理 建立的数学模型也需要通过程序来验证其优劣, 提供改进方向 对模型进行敏感度、鲁棒性测试并评价 将结果以图表的形式展现 可以说,数学软件的运用贯穿了建模的始终。

对于复杂的问题,更是对程序设计人员提出了更高 的要求! 要求他们: 能够运用较好的数据结构和优秀的算法 能够经受住海量数据(100万个以上的数据流)的 考验

这样的复杂问题,程序量一般大于1000行(matlab),180 0行(C、C++)

?二者的区别

误区一: ACM能搞定一切!建模就是一个ACM的大作 业而已
ACM侧重于算法,而数学建模侧重于模型的建 立,算法只是模型的求解的一种方法。 只有程序,没有公式 只有算法,没有模型 只有求解结果,没有建模过程---无效!

误区二: 程序运行得这么慢,还不如用C/C++编呢! 小规模问题,Matlab与其他高级语言运行时间差不 多,对于大规模问题,不超过20mins是可接受的。 语言不分优劣,重要的是使用*惯,可以用自己熟 悉的语言完成程序的主题,将结果用Matlab来显示, Matlab提供了与各高级语言的接口。

误区三 我们队要组队的话最好找一个参加ACM的 数学建模对程序的要求并不是特别高,只要 求你会开机,会认识键盘,会用鼠标就成! Matlab淡化了其他高级语言的语法上的严格, 可以主要关注求解而不是语法错误 Matlab容易上手,一般对于一个没有学过C的 人,边看边练,一天三小时的话,一周就能 运用Matlab的大部分函数

对于有一定编程基础(上过C/C++课)有几个建议:

?保持良好的程序结构(缩进,必要的注释) ?善于使用良好的数据结构和算法 ?有良好的身体,才会有好的灵感 ?谦虚谨慎,戒骄戒躁 <10万行就不能说自己了解Matlab

一个优秀的数据处理人员的专业素质是:

当讨论出具体模型后,要能写出大致的算法流程,寻找数据 并作预处理,按算法迅速写好程序,并能根据运行结果反馈 给队友模型改进方向,再根据队友的建议修改相应的程序, 直到满意。最后作出直观合理的图形或表格,定量给出模型 的评价参数

感谢同学们的参与和数学建模俱乐部的精心组 织!

期望与大家交流 唐佩佳 tpj008716@stu.xjtu.edu.cn (非诚勿扰)

推荐书目
刘会灯,朱飞,Matlab编程基础与典型运用, 人民邮电出版社




友情链接: 高中资料网 职业教育网 成人教育网 理学 大学工学资料