系统建模课程的基础
目录
一·系统
1.定义
系统是由若干相互联系、相互制约、相互依存的部分构成的具有特定功能的有机整体。
现实的简单系统可以按:实体(要素),相互作用,评价指标来分析。
2.分析
建立一个系统,首先要确定系统边界,边界外对系统的作用称为系统的输入,系统对边界外的作用称为系统的输出。
3.特性
(1)整体性:系统是各组成部分之间相互联系、 相互制约、相互依存而产生的整体。
(2)层次性:由若干相互联系、相互制约、相互依存的部分构成的系统具有层次性。
(3)相关性:组成系统的要素之间是相互联系、 相互影响、相互作用的。
4.系统的分类
(1)简单系统和复杂系统
分类依据:结构层次复杂程度
直接由要素构成的两层次系统称为简单系统;
由多层子系统按照一定的空间结构构成的系统称为复杂系统。
(2)静态系统和动态系统
分类依据:状态变量是否随时间变化
静态系统:否;动态系统:是。
(3)连续系统、离散系统和混合系统
分类依据:时间和状态变量的取值特性
状态变量随时间连续变化的系统称为连续系统;
时间变量和状态变量均只取有限个或可数个可能值的系统称为离散系统;
兼具连续和离散成分的系统称为混合系统。
(4)线性系统和非线性系统
分类依据:系统要素之间关系或模型的形式
要素之间的关系能够用线性数学模型描述的系统称为线性系统,否则称为非线性系统。
(5)封闭系统和开放系统
分类依据:系统与环境之间的关系
与环境之间存在物质、能量或信息交换的系统称为开放系统,否则称为封闭系统。
二·模型
1.定义
模型是对实际问题的抽象,是对系统某些本质方面的描述。
2.分类
(1)物理模型、概念模型和数学模型
以实物或图形直观地表达对象特征所得的模型称为物理模型。
对现实世界及其活动进行概念抽象模型称为概念模型。
描述系统要素之间以及系统与环境之间关系的数学表达式(可以画出图像)称为数学模型。
(2)其他分类
线性与非线性模型,微观(微分方程或差分方程表示)与宏观模型(联立方程或积分方程表示),
集中参数(常微分方程)与分布参数(偏微分方程)模型,定常(时不变)与非定常(时变)模型
动态与静态模型,连续与离散模型,确定性与随机性(给定输入,而每次输出都不同)模型,
参数(变量)与非参数(图)模型,时域与频域模型,输入输出(只有输入与输出的关系)与状态空间(内部状态也呈现)模型。
三·仿真
1.定义
通过对替代物或模仿品的实验分析对与之相似的原型系统进行研究的过程称为系统仿真。
系统仿真(又称计算机仿真)包含三个基本要素: 实际系统、数学模型、计算机
系统仿真过程的实现则要通过三项基本活动: 建立模型、实验仿真、结果分析
仿真是一种基于模型的活动。
2.系统仿真过程
3.意义
“系统、模型、仿真”三者之间有着密切的关系:
◆ 系统是研究的对象 ◆ 模型是系统的抽象 ◆ 仿真是通过对模型的实验以达到研究系统的目。
从广义上讲,仿真就是利用相似学的基本原理,通过 研究某种事物来研究与之相似的另一种事物的过程。
四·建模
1 建模的原则
(1) 简单性。 实际模型是简化的近似模型。模型越简单越好
(2) 清晰性。 系统模型是由许多子模型构成。子模型之间结构要尽可能清晰
(3) 相关性。 模型中应该只包括系统中与研究目的有关的信息,把无关信息排除
(4) 准确性。 建立模型式,应用以建立模型的信息的准确性
(5) 可辨识性。 模型结构必须具有可辨识的形式,若具有无法估计的参数,此模型就无实 用价值
(6) 集合性。 是否能够把若干个实体组成更大的实体
2.建模三要素:目的,方法,验证。
(1)目的要明确
(2)方法要恰当
①逻辑推理方法:归纳、推演、类比、移植
②机理建模法(分析法): 白箱问题 (可根据已知工作原理导出数学模型)
③实验建模法(测试法,系统辨识):黑箱问题 (通过输入输出数据估算数学模型)
④综合建模法(机理+实验):灰箱问题(机理写出数学方程,参数通过系统辨识来确定)
(3)结果要验证
①基于机理建模的必要条件法
②基于实验建模的数理统计法
③实物模型验证法
3.建模的步骤
(1)准备阶段 确定指标,收集、整理数据
(2)系统认识阶段 明确建模任务,建立概念模型
(3)系统建模阶段 ➢ 确定模型变量 ➢ 设定模型的数学形式 ➢ 分析参数符号和变化范围
(4)模型求解阶段 估计模型参数,求解模型变量
(5)模型分析与检验 性能评价、对比分析
4.模型验证
通常可以把模型的可信度水平分为以下三种:
◼ 在行为水平上的可信度,模型是否能复现真实系统的行为。
◼ 在状态结构水平上的可信度,即模型能否与真实系统在状态上互相 对应,通过这样的模型对未来的行为进行有效的预测。
◼ 在分解结构水平上的可信度,即模型能否表达真实系统内部的工作情况。 模型验证过程中应注意的问题 ①模型验证是一个重要环节。 ②模型验证过程具有不确定性。 ③对模型进行全面验证往往是不可能的。
五·仿真技术
1.分类:
(1)根据模型类型:物理仿真、数学仿真 和半实物仿真。
①物理仿真的优点是:直观、形象,也称为“模拟”。 物理仿真的缺点是:模型改变困难,实验限制多,投资较大。
②数学仿真优点是:方便、灵活、经济。 数学仿真缺点是:受限于系统建模技术,即系统数学模型不易建立。
③半实物仿真:即将数学模型与物理模型甚至实物联合起来进行实验。简单的部分采用数学模型,复杂的部分采用物理模型。
(2) 根据所使用的仿真计算机类型: 模拟计算机仿真,数字计算机仿真,数字模拟混合仿真。
(3)根据仿真时钟与实际时钟的比例关系:
①实时仿真,即仿真时钟与实际时钟完全一致,也就是模型仿 真的速度与实际系统运行的速度相同。
②亚实时仿真,即仿真时钟慢于实际时钟,也就是模型仿真的速度慢于实际系统运行的速度。当对仿真速度要求不苛刻的情况下 均是亚实时仿真,例如大多数系统离线研究与分析,有时也称为离 线仿真。
③超实时仿真,即仿真时钟快于实际时钟,也就是模型仿真的速度快于实际系统运行的速度。例如大气环流的仿真、交通系统的仿真等。
(4)根据系统模型的特性分类:仿真基于模型,模型的特性直接影响着仿真的实现。
①连续系统仿真; ②离散事件系统仿真。
2.系统仿真的一般过程
(1)建模与形式化: 确定模型的边界, 模型进行形式化处理。
(2)仿真建模: 选择合适的算法,算法的稳定性、计算精度、计算速度。
(3)程序设计: 将仿真模型写成计算机能执行的程序,程序要包括:仿真运行参数、控制参数、输出要求。
(4)模型校验:程序调试,检验所选仿真算法的合理性,检验模型计算的正确性。
(5)仿真运行:对模型进行实验。
(6)仿真结果分析:对系统性能作出评价 模型可信性检验,可信的模型才能作为仿真的基础。
3.发展
第一阶段:20世纪40年代以前主要是物理仿真。
第二阶段:20世纪40年代—50年代主要是模拟计算机仿真,而数字仿真则刚刚起步。
第三阶段:20世纪60~70年代混合仿真与数字仿真都得到了迅速发展,其中混合仿真成为当时仿真的主流技术。 在70年代末,我国自行研制的混合计算机系统已先后用于工程、教学、 科研等领域。
第四阶段:20世纪80年代末90年代初微机技术的迅速发展, 多媒体仿真技术崭露头角。
第五阶段:20世纪90年代末至今,虚拟现实仿真技术不断兴起。
4.应用
(1)系统设计:
一个较为复杂的系统,其设计过程一般要经历可行性论证、初步设计、详细设计、实施等若干阶段。在每个阶段,仿真技术均可提供强有力的技术支持。
(2)教育与培训:
根据模拟对象、训练目的,可将训练仿真系统分为三大类:
①载体操纵型 这是与运载工具有关的仿真系统,包括航空、航天、 航海、地面运载工具,以训练驾驶员的操纵技术为主要目的。
②过程控制型 用于训练各种工厂(如电厂、化工厂、核电站、电力网等)的运行操作人员。
③博弈决策型 用于企业管理人员(厂长、经理)、交通管制人员(火车 调度、航空管制、港口管制、城市交通指挥等)和军事指挥人员(空战、 海战、电子战等)的训练。
(3)产品开发及制造:虚拟制造。
5.仿真新技术
❖ 面向对象仿真(object-oriented simulation,OOS) 如统一建模语言UML,Agent等
❖ 定性仿真(qualitative simulation,QS) 如复杂系统建模仿真等
❖ 智能仿真(intelligence simulation,IS) 如人工智能,各种智能算法(模糊、神经、遗传)等
❖ 分布交互仿真(distributed interactive simulation,DIS) 如高层体系结构HLA,多智能体仿真等
❖ 可视化仿真(visual simulation,VS)
❖ 多媒体仿真(multimedia simulation,MS)
❖ 虚拟现实仿真(virtual reality simulation,VRS
六·MATLAB基础
1.MATLAB基本操作
(1)ans是answer的意思。
(2)三角函数的参数默认为弧度制,若要计算sin(45°),需输入sin(45*pi/180),将45rad转化为45°再计算。对字母大小写敏感。pi都是小写。
(3):sqrt(2*exp(4.92+0.5)+1)
(4)clc清除命令框指令,clear清除工作区变量,“↑”调用上一次输入的指令
(5)变量名第一个字母必须是英文字母。
(6)
(7)who显示工作区变量名
whos显示工作区变量名,变量维数和变量类型
2.MATLAB数组运算
(1)mxn,m行n列
(2)创建一维数组
①行向量
a=[1 2 3]或a=[1,2,3];
a=1:3 默认步长为1; a=1:0.5:3步长为0.5;
a=1:3:3超过最大范围3的数就取不到了;
步长可正可负,取值按照“初值+步长”的逻辑,若第一个取值就超过范围,则取到的数组为空,a=1:-1:3
a=linspace(1,3,5),生成有5个元素的行向量,元素大小在1到3之间,元素间隔(3-1)/(5-1),如果没有规定5,默认生成100个
②列向量
b=[1;2;3],用;分行。
b=(1:3)‘,用 ’ 转置
(3)创建二维数组
c=[1 2 3;4 5 6;7 8 9]或c=[1 2 3回车4 5 6回车7 8 9](但是在MATLAB一回车就输出了(⊙﹏⊙))
c=[1:3;4:6;7:9]
a=[1 2 3]; b=[2 3 4]; c=[a;b];或c=[a b](行向量)
函数ones(生成全1矩阵)、zeros (生成全0矩阵)
ones(m,n):创建mxn的全1数组
size(A)函数返回包含两个元素的向量,分别是矩阵A的行数和列数
length(A):给出行数和列数中的较大者
(4)一维数组寻访
a(x)找到a数组的第x个元素,x只能为正整数,数组的标号都从1开始。
a(:)表示寻访a数组所有元素。
a([1 2 5])或a([1,2,5])找到第1个第2个和第5个
数组元素可以被任意重复访问,构成长度大于原数组的新数组。b=a([1 2 3 3 2 1])
a(1:3) %寻访前3个元素
a(1:2:3) %按步长寻访前3个元素
a(3:-1:1) %按倒序寻访前3个元素
a(3:end) %寻访从第3个到数组末尾
a(3:end-1) %寻访从第3个到数组的倒数第2个元素
修改对应元素:a([2 5])=[1 1] 把第二个和第五个改为1
(5)二维数组寻访
单下标:“单下标”编号:设想把二维数组的所有列,按先后顺序首尾相接排成“一维长列”,第二列接在第一列之后以此类推,然后自上往下对元素位置执行编号。
a=[1 2 3;4 5 6;7 8 9]
a(2)
%ans = 4
全下标:
a(m,n) %寻访二维数组的第m行n列的元素
a(m,:) %寻访二维数组的第m行的所有列元素
a(:,n) %寻访二维数组的第n列的所有行元素
a(1:3,3:5)%寻访1到3行,3到5列元素
a(m1:m2,n) %寻访二维数组的第n列中m1至m2行的元素
a(m,n1:n2) %寻访二维数组的第m行中n1至n2列的元素
a(m1:m2,n1:n2) %寻访二维数组的m1至m2行中n1至n2列的元素
a([m1 m2],n) %寻访二维数组的第n列中m1行和m2行的元素
a(m,[n1 n2]) %寻访二维数组的第m行中n1列和n2列的元素
(5)矩阵运算
①加减运算
加、减的两矩阵必须有相同的行和列两矩阵对应元素相加减。 矩阵与标量运算时,标量与矩阵的所有元素分别进行加减操作。
②乘法运算
A矩阵的列数必须等于 B矩阵的行数,标量可与任何矩阵相乘。
假定有两个矩阵A和B,若A为m×n矩阵, B为n×p矩阵,则C=A*B为m×p矩阵。
③除法运算
“ \”:左除, “ / ”,右除。
对于矩阵来说,左除和右除表示两种 不同的除数矩阵和被除数矩阵的关系。
A\B ↔inv(A)*B A/B ↔A*inv(B) inv —— 矩阵求逆
于矩阵运算,一般 A\B≠B/A 。 而对于数来说, a\b=b/a,如: 3/4=4\3
④乘方运算
一个矩阵的乘方运算可以表示成 A^x , 要求A为方阵,x 为标量。
⑤点运算
点运算符 .* ./ .\ .^
两矩阵进行点运算是指它们的对应元素进行相关运算,要求两矩阵的维参数相同
(相同的行数与列数)。
a./b=b.\a — 都是 a的元素被 b的对应元素除
a.\b=b./a — 都是 b的元素被 a的对应元素除
注意:点都在左边,往谁到谁是除数
⑥其他运算
inv —— 矩阵求逆 det —— 行列式的值 eig —— 矩阵的特征值 diag —— 对角矩阵
’ —— 矩阵转置 sqrt —— 矩阵开方
⑦常用数学函数
abs绝对值函数
real 复数的实部 imag 复数的虚部
⑧比较与逻辑运算
注意一下 : ~=(不等于) ~(非) and(a,b)、or(a,b)、not(a)和 xor(a,b)【与或非异或】
两个矩阵比较,则是相同位置元素比较,输出结果是元素为0和1的矩阵。
当参与比较的一个是标量,而另一个是矩阵时,则把标量与矩阵的每一个元素按标量关系运算规则逐个比较,并给出元素比较结果。最终的运算结果是一个维数与矩阵相同的矩阵,它的元素由0或1组成。
3.符号变量
①定义变量
两个基本指令:sym、syms。
a=sym('x') 该指令用来创建一个符号变量x,x可为字符、字符串、表达式或字符表达式。
函数syms,一次可以定义多个符号变量。一般调用格式为syms(‘a’,‘b’,‘c’,…),或直接简写为
syms a b c …。简写时,只能用空格分开
①符号表达式的运算
syms a b x y theta;
y1=a+b
y2=sin(2*theta)-cos(x)+exp(-y)
y1*y2 %y1和y2相乘
%ans = (a+b)*(sin(2*theta)-cos(x)+exp(-y))
y2/y1 %y2除以y1
%ans =(sin(2*theta)-cos(x)+exp(-y))/(a+b)
合并同类项使用collect指令,其调用格式为 collect(e, ‘s’),其中的e表示所需合并的符号表达式,s为所需合并的项,省略情况下默认为x。
syms x y;
f1=sym(‘x^3-x*y^2+x*y+x’); 或f1=x^3-x*y^2+x*y+x
collect(f1) %默认合并x同幂项系数
%ans =x^3+(-y^2+y+1)*x
f2= sym('y^3+x*y^2+x^3*y^2+y^2');
collect(f2,'y^2') %合并y^2同幂项系数
%ans =y^3+(x+x^3+1)*y^2
因式分解使用factor指令,其调用格式为factor(e)。把多项式分解成嵌套形式使用horner指令,
其调用格式为horner(e)。
f1=x^4+6*x^3+3*x^2-26*x-24;
factor(f1)
%ans =(x-2)*(x+4)*(x+3)*(x+1)
f2=x^3+2*x^2*y-x*y^2-2*y^3;
factor(f2)
%ans =(-y+x)*(2*y+x)*(y+x)
horner(f2)
%ans = x*(x*(x + 2*y) - y^2) - 2*y^3
factor(770) %利用factor指令把一个正整数进行质数分解
%ans =2 5 7 11
使用simplify及simple指令对符号表达式进行化简,其调用格式为simplify(e)和simple(e)。simple比simplify更简。其功能是运用多种恒等式转换对表达式进行综合化简。
syms x;
f1=(1/x+2/x^2+3/x+4)^(1/3)
%f1 =(4/x+2/x^2+4)^(1/3)
y1=simplify(f1)
%y1 =2^(1/3)*((2*x+1+2*x^2)/x^2)^(1/3)
函数的复合是指对于函数f (x)和x=g ( y),构造函数 f ( g ( y))。完成复合操作的指令是compose,其调用格 式为compose(f, g)或compose(f, g, u, v, t),如果使用 后者,则表示对f (u)和u=g (v)求复合函数f ( g (v))|v=t。
syms x y z u v;
f=x/(1+x+x^2);
g=exp(y);
h=cos(u);
k=x^v;
compose(f,g) %构造复合函数f(g(y))
%ans =exp(y)/(1+exp(y)+exp(y)^2)
4.MATLAB程序设计
①程序文件:.m文件
②disp(输出内容)
disp('hello,world')
disp([1 2 3])
A=[1 2 3];
disp(A)
注意:“;”分号主要有两个作用: 1.数组行分隔符; 2.取消运行显示
fprintf(格式的字符串,变量)
fprintf('hello, world\n')
%hello, world
fprintf('x=%f',1.5)
%x=1.500000
③输入
A=input(提示信息)
Str=input(提示信息,‘s’) 如果在input函数调用时采用's'选项,则允许用户输入一个字符串。
name=input('What''s your name?','s');
disp(['hello,',name])
%What's your name?lll
hello,lll
x=input('please enter the x:');
y=sqrt(2*exp(x+0.5)+1);
fprintf('the result is %f\n',y);
%please enter the x:1
the result is 3.156482
④保存与加载数据
save(文件名,变量名) load(文件名)
x=1;y=2;
save('abc.mat','x','y')
%文件夹中会多出一个abc.mat的文件
clear
load('abc.mat')
%工作区会多出x,y两个变量
⑤语句
需要以end结束
for循环要超过终值才结束,等于的时候不结束。
break语句和continue语句
break语句用于终止循环的执行。当在循环体内执行到该语句时,程序将跳出循环,继续执行循环语句的下一语句。 continue语句控制跳过循环体中的某些语句。当在循环体内执行到该语句时,程序将跳过循环体中所有剩下的语句,继续下一次循环。
⑥函数
定义:
m文件中的格式(文件名与函数名相同):
function 输出形参表 = 函数名(输入形参表)
注释说明部分
函数体语句
调用:
函数调用的一般格式是: [输出实参表] = 函数名(输入实参表)
注意:函数调用时,各实参出现的顺序、个数,应与函数定义时相同。
采用help命令或lookfor命令可以显示出注释说明部分的内容。help 函数名
递归调用:
5.MATLAB绘图
跟着一个例子学习吧!
(1)准备图形数据
x = -pi/2:0.1:pi/2;
y=cos(x)-sin(x);
(2)选择图形的显示位置
系统默认图形窗口为Figure1,如果大家需要在图形窗口中并列显示多个窗口,这需要使用subplot指令来选择子图号。画在Figure6吧
figure(6)
(3)调用绘图指令并设置参数,标记属性
调用plot函数绘制图形,标记属性以单引号来引用,各选项直接相连,不需要分隔符
plot(x,y,'k-.*')
(4)设置坐标范围及网格线
默认坐标范围会根据计算结果改变,我们可以设置坐标范围
axis([-pi/2,pi/2,-2,2])
是这样的效果
grid on/off 命令控制是画还是不画网格线, 不带参数的grid命令在两种状态之间进行切换。
box on/off 命令控制是加还是不加边框线, 不带参数的box命令在两种状态之间进行切换。
(5)给图形加注释
title(图形名称) xlabel(x轴说明) ylabel(y轴说明) text(x,y,图形说明)
legend(图例1,图例2,…) gtext(图形说明)使用鼠标选择的位置插入文本
title('first figure');
xlabel('横');
ylabel('纵');
legend('y=cos(x)-sin(x)');
text(pi/2,-1, 'final point');
(6)图形输出
完成图形的绘制和编辑以后,需要将图形打印或是存放在其 他文档中,最简单的方法是使用【file】菜单中的【save as】选项, 并且大家可以自行选择需要保存的格式类型。
(7)其他指令
hold on:启动图形保持功能,在原图的基础上,再次绘制的图形将全部添加到图形窗口中,并自动调整坐标轴范围;hold off:关闭图形保持功能。
plotyy(x1,y1,x2,y2) 横坐标的标度相同, 纵坐标有两个。
同一个绘图窗口的不同区域绘图。
二维绘图
%直方图
t=0:0.2:2*pi; y=cos(t); bar(y)
%阶梯图
x=0:pi/20:2*pi;y=sin(x);stairs(x,y)
%极坐标图
t=0:2*pi/90:2*pi;y=cos(4*t);polar(t,y)
%火柴杆图
t=0:0.2:2*pi; y=cos(t); stem(y)
三维绘图
三维螺旋线
t=[0:0.1:10*pi];
x=2*t;
y=sin(t);
z=cos(t);
plot3(x,y,z);
MATLAB提供的mesh()函数用于绘制三维表面网格图,该函数的调用格式为 mesh(x,y,z,c)
其中,x,y,z分别构成该曲面的x,y和z向量;c为颜色矩阵,表示在不同的高度下的颜色范围,如果省略此选项,则会自动地假定c=z,亦颜色的设定是正比于图形的高度的,这样就可以得出层次分明的三维图形来。
[x,y]=meshGrid(x,y)基于向量x和y中包含的坐标返回二维网格坐标。
关于三维图形的绘制,常用的其他命令有:
surf(x,y,z) %绘制三维表面图形
surfc(x,y,z) %绘制带有等高线的三维表面图形
surf1(x,y,z) %绘制带有阴影的三维表面图形
waterfall (x,y,z) %绘制瀑布型三维图形
contour(x,y,z) %等高线图
课程内容来自课堂,感谢老师的辛苦教导♥♥♥