Jack Huang's Blog


  • 首页

  • 标签

  • 归档

  • 搜索

流程图绘制规范

发表于 2020-04-25 | 更新于 2020-04-26

流程图是表示算法、工作流或流程的一种框图表示,它以不同类型的框代表不同种类的步骤,每两个步骤之间则以箭头连接。这种表示方法便于说明解决已知问题的方法。流程图在分析、设计、记录及操控许多领域的流程或程序都有广泛应用。遵循规范绘制流程图,不仅可提高流程图的可读性,还可以美化流程图。

流程图的三大结构

流程图由三大结构构成,这三大结构分别为顺序结构、选择结构和循环结构,这三个结构构成了流程执行的全过程。

  • 顺序结构

在顺序结构中,各个步骤是按先后顺序执行的,这是一种最简单的基本结构。

  • 选择结构

选择结构又称分支结构,选择结构用于判断给定的条件,根据判断的结果判断某些条件,根据判断的结果来控制程序的流程。

  • 循环结构

循环结构又称为重复结构,就是流程在一定的条件下,反复执行某一操作的流程结构。循环结构下又可以分为当型结构和直到型结构。

绘制流程图中的注意事项

  • 绘制流程图时,为了提高流程图的逻辑性,应遵循从左到右、从上到下的顺序排列。

  • 绘制流程图时,为了提高流程图的逻辑性,应遵循从左到右、从上到下的顺序排列。一个流程从开始符开始,以结束符结束。开始符号只能出现一次,而结束符号可出现多次。若流程足够清晰,可省略开始、结束符号。

  • 菱形为判断符号,必须要有“是和否(或Y和N)”两种处理结果,意思是说,菱形判断框一定需要有两条箭头流出;且判断符号的上下端流入流出一般用“是(或Y)”,左右端流入流出用“否(或Y)”。

  • 同一流程图内,符号大小需要保持一致,同时连接线不能交叉,连接线不能无故弯曲。

  • 流程处理关系为并行关系的,需要将流程放在同一高度。

  • 必要时应采用标注,以此来清晰地说明流程,标注要用专门的标注符号。

  • 处理流程须以单一入口和单一出口绘制,同一路径的指示箭头应只有一个。

  • 同一路径的指示箭头应只有一个。

  • 流程图中,如果有参考其他已经定义的流程,不需重复绘制,直接用已定义流程符号即可。

参考链接

  1. 画了多年的流程图,你真的画规范了吗?,by Hiphop村.
  2. 流程图,by wikipedia.

大数据应用基础之Hadoop

发表于 2020-04-20

大数据,官方定义是指那些数据量特别大、数据类别特别复杂的数据集,这种数据集无法用传统的数据库进行存储,管理和处理。大数据的主要特点为数据量大(Volume),数据类别复杂(Variety),数据处理速度快(Velocity)和数据真实性高(Veracity),合起来被称为4V。

Apache Hadoop则是大数据应用的关键基础设施,本质上是一款支持数据密集型分布式应用程序的开源软件框架。它被设计成从单个服务器扩展到数千台机器,每台机器都提供本地计算和存储。Apache Hadoop本身不是依赖硬件来提供高可用性,而是设计用于检测和处理应用程序层的故障,因此在计算机集群上提供高可用性服务,但每个集群都可能容易出现故障。

Hadoop历史

Hadoop最早由美国工程师Doug Cutting开发。Doug Cutting同样是用于全文检索和搜索的开放源码程序库Lucene和开源搜索引擎Nutch的作者。

在Google发表的三篇有关GFS、MapReduce和BigTable的技术论文基础上,Doug Cutting分别开发了HDFS(Hadoop分布式文件系统)、MapReduce编程模型和用来处理海量数据的非关系型数据库HBase,它们共同构成了Hadoop。因此,本质上Hadoop是Google大数据系统的开源实现。

各大公司包括Yahoo、IBM、Facebook、亚马逊、阿里巴巴、华为、百度、腾讯等都采用Hadoop构建自己的大数据系统,使Hadoop成为了分布式计算系统事实上的国际标准。

Hadoop框架

Hadoop框架构成如图1所示。下面简单介绍Hadoop框架中的重要组件。

Hadoop框架构成

图1 Hadoop框架构成

HDFS

Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。它和现有的分布式文件系统有很多共同点。但同时,它和其他的分布式文件系统的区别也是很明显的。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。

HBASE

Hbase是一种分布式存储的NoSQL数据库,它参考了谷歌的BigTable建模,实现的编程语言为Java。它是Apache软件基金会的Hadoop项目的一部分,运行于HDFS文件系统之上,为 Hadoop 提供类似于BigTable 规模的服务。因此,它可以对稀疏文件提供极高的容错率。

MapReduce

MapReduce是Google提出的一个软件架构,用于大规模数据集(大于1TB)的并行运算。概念“Map(映射)”和“Reduce(归纳)”,及他们的主要思想,都是从函数式编程语言借来的,还有从矢量编程语言借来的特性。

当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归纳)函数,用来保证所有映射的键值对中的每一个共享相同的键组。

HIVE

数据仓库之父比尔·恩门(Bill Inmon)在 1991 年出版的“Building the Data Warehouse”(《建 立数据仓库》)一书中所提出的定义被广泛接受——数据仓库(Data Warehouse)是一个面 向主题的(Subject Oriented)、集成的(Integrated)、相对稳定的(Non-Volatile)、反映历史 变化(Time Variant)的数据集合,用于支持管理决策(Decision Making Support)。

Apache Hive则是一个建立在Hadoop架构之上的数据仓库。它能够提供数据的精炼,查询和分析。Apache Hive起初由Facebook开发,目前也有其他公司使用和开发Apache Hive,例如Netflix等。亚马逊公司也开发了一个定制版本的Apache Hive,亚马逊网络服务包中的Amazon Elastic MapReduce包含了该定制版本。

hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。

Spark

Apache Spark是一个开源集群运算框架,最初是由加州大学柏克莱分校AMPLab所开发。相对于Hadoop的MapReduce会在运行完工作后将中介数据存放到磁盘中,Spark使用了存储器内运算技术,能在数据尚未写入硬盘时即在存储器内分析运算。Spark在存储器内运行程序的运算速度能做到比Hadoop MapReduce的运算速度快上100倍,即便是运行程序于硬盘时,Spark也能快上10倍速度。Spark允许用户将数据加载至集群存储器,并多次对其进行查询,非常适合用于机器学习算法。

Storm

Storm是一个分布式计算框架,主要由Clojure编程语言编写。最初是由Nathan Marz及其团队创建于BackType,该项目在被Twitter取得后开源。它使用用户创建的“管(spouts)”和“螺栓(bolts)”来定义信息源和操作来允许批量、分布式处理流式数据。最初的版本发布于2011年9月17日。

Storm应用被设计成为一个拓扑结构,其接口创建一个转换“流”。它提供与MapReduce作业类似的功能,当遇到异常时该拓扑结构理论上将不确定地运行,直到它被手动终止。

参考链接

  1. hadoop和大数据的关系?和spark的关系?,by 小枣君.
  2. Apache Hadoop,by hadoop.
  3. HBase 深入浅出,by 沈钊伟.
  4. MapReduce,by wikipedia.
  5. Apache Spark,by wikipedia.
  6. Apache Storm,by wikipedia.
  7. Apache Hive,by wikipedia.
  8. Hive学习之路 (一)Hive初识,by 扎心了,老铁.

Hexo构建静态博客方法

发表于 2020-04-18

一直使用Hexo+Github构建静态博客,可突然在使用hexo g -d命令时出故障了,问题如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
INFO  [hexo-math] Using engine 'mathjax'
INFO Start processing
FATAL Something's wrong. Maybe you can find the solution here: http://hexo.io/docs/troubleshooting.html
Template render error: expected variable end
at Object._prettifyError (F:\blog\node_modules\nunjucks\src\lib.js:35:11)
at Template.render (F:\blog\node_modules\nunjucks\src\environment.js:526:21)
at Environment.renderString (F:\blog\node_modules\nunjucks\src\environment.js:364:17)
at Promise.fromCallback.cb (F:\blog\node_modules\hexo\lib\extend\tag.js:62:48)
at tryCatcher (F:\blog\node_modules\bluebird\js\release\util.js:16:23)
at Function.Promise.fromNode.Promise.fromCallback (F:\blog\node_modules\bluebird\js\release\promise.js:180:30)
at Tag.render (F:\blog\node_modules\hexo\lib\extend\tag.js:62:18)
at Object.onRenderEnd (F:\blog\node_modules\hexo\lib\hexo\post.js:282:20)
at Promise.then.then.result (F:\blog\node_modules\hexo\lib\hexo\render.js:65:19)
at tryCatcher (F:\blog\node_modules\bluebird\js\release\util.js:16:23)
at Promise._settlePromiseFromHandler (F:\blog\node_modules\bluebird\js\release\promise.js:512:31)
at Promise._settlePromise (F:\blog\node_modules\bluebird\js\release\promise.js:569:18)
at Promise._settlePromise0 (F:\blog\node_modules\bluebird\js\release\promise.js:614:10)
at Promise._settlePromises (F:\blog\node_modules\bluebird\js\release\promise.js:693:18)
at Async._drainQueue (F:\blog\node_modules\bluebird\js\release\async.js:133:16)
at Async._drainQueues (F:\blog\node_modules\bluebird\js\release\async.js:143:10)
at Immediate.Async.drainQueues (F:\blog\node_modules\bluebird\js\release\async.js:17:14)
at runCallback (timers.js:705:18)
at tryOnImmediate (timers.js:676:5)
at processImmediate (timers.js:658:5)

不想在费劲的查找问题原因,打算重新走一遍hexo+github构建博客流程,于是记录一下。

Hexo安装

Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。安装Hexo命令如下:

1
2
3
4
5
6
7
8
npm install hexo-cli -g
hexo init blog
cd blog
npm install
hexo server

// Solve ERROR Deployer not found: git
npm install hexo-deployer-git --save

后记

安装最新版本的Hexo之后,发现还是出现文章开始的错误,不过幸运的是,新版本的Hexo给出了错误的位置,经检查是公式输入不对导致解析错误的原因。

参考链接

  1. hexo,by hexo.
  2. 超详细Hexo+Github博客搭建小白教程,by 韦阳.
  3. GitHub+Hexo 搭建个人网站详细教程,by 吴润.
  4. ERROR Deployer not found: git,by hexo.

Simulink用户自定义函数

发表于 2020-04-16 | 更新于 2021-05-19

在使用Simulink建模过程中,发现没有想要的模块,于是只能使用Simulink的自定义函数模块拓展其功能。Simulink自定义函数模块可分成:

  • matlab函数
  • matlab系统
  • Simulink函数
  • S函数
  • 初始化函数
  • 重设函数
  • 终止函数

S函数的类型

  • S函数有多种类型,按照语言分类有M、C、C++、Fortran等编写的;
  • 按照所支持功能多少分类,包括Level1和Level2;
  • 按照执行方式分类,可分为直接解释运行的M S函数和编译为Mex文件后执行的C Mex S函数。

参考链接

  1. User-Defined Functions,by mathwork.
  2. Simulink用得多了,不知道sim()函数你又知多少?,by 尘世落尘.
  3. Simulink仿真入门到精通(十) S函数,by 叮叮当当sunny.

Simulink模型支持可变尺寸信号的方法

发表于 2020-04-14 | 更新于 2021-05-19

使用Simulink建模的过程中,需要输入或输出可变尺寸的信号,具体方法主要有三种:

  • 具有不同输入端口的开关或多端口开关块,具有不同大小的固定大小信号,其输出是一个可变大小的信号。

  • 选择器块和起始和结束索引(端口)索引选项。索引端口信号可以指定输入数据信号的不同子区域,这些子区域在模拟过程中产生可变大小的输出信号。

  • 具有为可变大小信号配置的输出端口的S函数块。输出不仅包括信号的值,还包括信号的维数。

参考链接

  1. Variable-Size Signal Basics,by mathworks.
  2. Inspect Variable-Size Signals on Simulink Models,by mathworks.

Simulink中S函数的使用方法

发表于 2020-04-06 | 更新于 2021-05-19

Simulink是The MathWorks公司开发的用于动态系统和嵌入式系统的多领域模拟和基于模型的设计工具,常集成于MathWorks公司的另一产品MATLAB中与之配合使用。

S-函数是系统函数(System Function)的简称,在Simulink中用非图形化的方式来描述一个模块。一个完整的S-函数结构体系包含了描述一个动态系统所需要的全部能力。使用S-函数用户可以向Simulink模型中添加自己的模块,可以自由选择使用MATLAB、C、C++等语言来创建自己的模块。

编写S函数

编写S函数,可以从 Matlab 给的模板S函数文件开始,用户可以在 Matlab 命令窗口中键入:

1
edit sfuntmpl

该模板S函数文件包含了所有的S函数的例程, 包含1个主函数和6个子函数。 在主函数程序使用一个多分支语句 (Switch-case)根据标志将执行流程转移到相应的例程函数。主函数的参数 Flag 标志值是由系统(Simulink 引擎)调用时给出的。

问题处理

参考链接

  1. Simulink之——S函数,by 只是学电的.
  2. 使用level2 M S函数时,设置了0输入就会报错,测试程序见贴,by yfspring.
  3. MATLAB / SIMULINK通信系统建模与仿真实例分析,by 邵玉斌.
  4. Level2-S-function,by auto6329.

飞行仿真中气动参数的生成和计算方法

发表于 2020-04-03 | 更新于 2020-07-26

飞行器仿真一个难点是气动力和力矩系数的生成和计算方法。通常获得气动力和力矩系统的方法主要有:

  • 风洞实验。能够获得精准的气动力和力矩系数,但投资巨大。
  • Fluent类似软件进行仿真计算。
  • Datcom生成。Datacom软件本质是在大量风洞实验数据基础上,通过数值计算粗略生成气动力和力矩系数。

气动力模型是表征气动力和力矩系数与飞行状态、控制输入之间关系的函数。可表示为:

$$C_i=f(H, Ma, α, β, \omega_x, \omega_y,\omega_z, \delta_e,\delta_r,\delta_a)$$

其中,H、Ma、α、β分别为高度、马赫数、攻角、侧滑角;$\omega_x, \omega_y,\omega_z$ 分别为滚转、偏航和俯仰角速度;$\delta_e,\delta_r,\delta_a$ 分别为升降舵、方向舵和副翼舵偏角。

Datcom+使用帮助

Datcom+是Digital Datcom程序的一个扩展,它包含了一些工具,使使用Digital Datcom程序更加容易。这一计划的起源始于1996年,并由Holy Cows,Inc.支持到2010年。

Datcom+Pro是Datcom+的下一代,它已经变得更加用户友好。可视化工具允许您立即看到您的飞机,由数字数据通信程序生成的系数数据绘制在X-Y图上,以便于解释和包含在报告中。此外,您的Datcom+模型现在可以在JSBSim中运行,它是一个完整的6自由度运动方程模型,并提供了执行标准飞行试验机动的飞行试验脚本示例。可惜无法网上无法获得该版本。

下面重点介绍Datcom+的使用方法。

Datcom+输入

Datcom+输入是以“.dcm”为扩展名的文件,具体数据输入格式可参考示例文件“citation.dcm”。该示例文件的设计目的是允许您读取它,并可能理解它,即使Datcom符号可能很难读取和理解。它由以“*”开头的注释行和Datcom命令组成,其中一些命令必须以列1开头,另一些命令以$开头,后跟公共块名,如FLTCON。如果以$开头,则必须以$结尾。常用的名字列表如下:

  • FLTCON-定义飞行条件

  • SYNTHS-定位cg、机翼、水平尾翼和垂直尾翼相对于参考线

  • BODY-定义机体几何体

  • WGPLNF-定义机翼平面形状几何图形

  • HTPLNF-定义水平尾翼几何结构

  • VTPLNF-定义垂直尾翼几何结构

MiG-17 Datcom+ 输入示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
CASEID ----- MIKOYAN-GUREVICH MiG-17 ----- 
$FLTCON NMACH=1.0,MACH(1)=0.6,NALPHA=10.0,ALSCHD(1)=-4.0,-2.0,
0.0,2.0,4.0,6.0,8.0,10.0,12.0,14.0,NALT=1.0,ALT(1)=5000.0,
WT=13395.0,LOOP=1.$
$SYNTHS XCG=11.17,ZCG=0.0,XW=3.63,ZW=0.42,ALIW=1.0,XH=28.73,
ZH=5.24,ALIH=0.0,XV=18.3,ZV=0.0$
$OPTINS SREF=243.0$
$BODY NX=8.0,
X(1)=0.0,0.74,8.35,13.14,19.35,24.41,28.41,30.77,
S(1)=5.19,9.32,16.89,16.89,15.94,11.12,5.85,2.5$
NACA-W-6-66-012
$WGPLNF CHRDTP=7.02,SSPNOP=11.32,SSPNE=13.41,SSPN=15.71,
CHRDBP=8.4,CHRDR=14.0,SAVSI=45.0,SAVSO=45.0,CHSTAT=0.25,
TWISTA=0.0,DHDADI=-3.0,DHDADO=-3.0,TYPE=1.0$
NACA-H-6-66-009
$HTPLNF CHRDTP=1.86,SSPNE=5.42,SSPN=5.43,CHRDR=4.69,SAVSI=45.0,
CHSTAT=0.25,TYPE=1.0$
NACA-V-6-66-009
$VTPLNF CHRDTP=3.76,SSPNE=6.05,SSPN=8.18,CHRDR=12.47,SAVSI=55.0,
CHSTAT=0.25,TYPE=1.0$
DIM FT
BUILD
PLOT
NEXT CASE

F16输入示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
DIM FT
DAMP
DERIV DEG
PART

$FLTCON NMACH=1.0,MACH(1)=0.6,
NALPHA=10.0,ALSCHD(1)=-4.0,-2.0,0.0,2.0,4.0,6.0,8.0,10.0,12.0,14.0,
NALT=1.0,ALT(1)=5000.0,
WT=17400.0,LOOP=2.$
$OPTINS SREF=300.0,BLREF=30.0$
$SYNTHS XCG=27.60,ZCG=0.0,
XW=19.63,ZW=0.69,ALIW=0.0,
XH=35.10,ZH=0.69,ALIH=0.0,
XV=33.86,ZV=0.0$
$BODY NX=7.0,
X(1)= 0.00, 2.52,15.51,16.76,24.95,41.83,42.75,
R(1)= 0.07, 0.13, 3.19, 3.15, 2.54, 1.80, 1.64,
ITYPE=1.0, METHOD=1.0$
NACA-W-6-4A-204
$WGPLNF CHRDR=15.30, CHRDTP=3.6,
SSPNE=12.69, SSPN=14.79,
SAVSI=45.0,
CHSTAT=0.0, TWISTA=0.0,
DHDADI=-1.5,
TYPE=1.0$

NACA-F-4-0012
$SYMFLP FTYPE=2.0, NDELTA=9.0,
DELTA(1)=0.0,5.0,10.0,15.0,20.0,25.0,30.0,35.0,40.0,
PHETE=0.0522, PHETEP=0.0391,
CHRDFI=2.40, CHRDFO=1.30,
SPANFI=3.50, SPANFO=12.00,
NTYPE=1.0$
CASEID FLAPS: ----- General Dynamics F-16A Block 15(+) -----
SAVE
NEXT CASE

$ASYFLP STYPE=4.0, NDELTA=9.0,
DELTAL(1)=-32.0,-20.0,-10.0,-5.0, 0.0, 5.0, 10.0, 20.0, 32.0,
DELTAR(1)= 32.0, 20.0, 10.0, 5.0, 0.0,-5.0,-10.0,-20.0,-32.0,
SPANFI=12.05, SPANFO=14.79,
PHETE=0.05228,
CHRDFI=1.35, CHRDFO=0.74$
CASEID AILERONS: ----- General Dynamics F-16A Block 15(+) -----
SAVE
NEXT CASE

NACA-H-4-0010
$HTPLNF CHRDR=9.91, CHRDTP=2.62,
SSPNE=5.77, SSPN=9.25,
SAVSI=40.0,
CHSTAT=0.0,
DHDADI=-15.0,
TYPE=1.0$
$SYMFLP FTYPE=5.0, NDELTA=9.0,
DELTA(1)=-32.0,-20.0,-10.0,-5.0, 0.0, 5.0, 10.0, 20.0, 32.0,
PHETE=0.0522, PHETEP=0.0391,
CHRDFI=7.42, CHRDFO=2.62,
SPANFI=3.65, SPANFO=9.25,
NTYPE=1.0$

NACA-V-4-0012
$VTPLNF CHRDR=9.64, CHRDTP=3.80,
SSPNE=8.59, SSPN=10.53,
SAVSI=45.0,
CHSTAT=0.0,
TYPE=1.0$

SAVE
CASEID TOTAL: ----- General Dynamics F-16A Block 15(+) -----

AIM-9输入示例

在Missile Datcom的for005.dat文件中输入如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
$FLTCON 
NALPHA=5.00000,
ALPHA=-8.0000,-4.0000,0.0000,4.0000,8.0000,
NMACH=4.00000,
MACH=0.5000,1.5000,2.5000,3.5000,
ALT=5000.0000,$
$REFQ
XCG=1.5000,$
$AXIBOD
TNOSE=CONICAL,
LNOSE=0.28000,
DNOSE=0.13000,
LCENTR=2.69000,
DCENTR=0.13000,$
$FINSET1
SECTYP=NACA,
SSPAN=0.0650,0.2900,
CHORD=0.3000,0.0000,
CFOC=0.2000,0.0000,
XLE=0.2800,0.5700,
NPANEL=4.00000,
PHIF=45.0000,135.0000,225.0000,315.0000,$
$FINSET2
SECTYP=NACA,
SSPAN=0.0650,0.2900,
CHORD=0.6600,0.4600,
XLE=2.2200,2.8800,
NPANEL=4.00000,
PHIF=45.0000,135.0000,225.0000,315.0000,$
NACA-1-6-64-005
NACA-2-4-2204-04
DAMP
PART
PLOT
PRESSURES
SAVE
DIM M
DERIV DEG
CASEID AIM-9
NEXT CASE
CASEID PANEL DEFLECTION
$DEFLCT DELTA1=-5.0,5.0,5.0,-5.0$
SAVE
NEXT CASE
$DEFLCT DELTA1=5.0,-5.0,-5.0,5.0$
SAVE
NEXT CASE
$DEFLCT DELTA1=-10.0,10.0,10.0,-10.0$
SAVE
NEXT CASE
$DEFLCT DELTA1=10.0,-10.0,-10.0,10.0$
SAVE
NEXT CASE

Matlab导入Datcom输出文件

Matlab使用datcomimport函数导入Datcom输出文件数据到工作空间,有可能会出现如下所示警告:

1
2
3
4
> In usafdatcom
In usafdatcom
In datcomimport (line 88)
警告: DATCOM file reader state inconsistent

然后会发现导入的启动系数值无法使用。出现该问题的原因主要有:

  • 计算多迎角多高度飞机气动系数时,应设置LOOP为2.0,而非默认的1.0。

参考链接

  1. Missile Datcom,by beihang.
  2. Datcom,by holycows.
  3. DATCOM使用介绍,by wenku.
  4. United States Air Force Stability and Control Digital DATCOM,by wikipedia.
  5. Missile Datcom,by wikipedia.
  6. 操稳特性快速评估及其在飞机设计中的应用,by 张帅.
  7. MISSILE DATCOM使用教程_LIppt课件,by 雅芳.
  8. datcom 计算导弹气动参数,by 一路向北884.

设计模式之状态模式

发表于 2020-03-28 | 更新于 2021-11-20

最近研究红外探测器建模仿真时,了解到它有多种工作状态,在不同工作状态下有不同的探测能力,很适合用设计模式中的状态模式进行建模仿真。因此,学习一下设计模式中行为型模式之状态模式。

定义

在很多情况下,一个对象的行为取决于一个或多个动态变化的属性,这样的属性叫做状态,这样的对象叫做有状态的(stateful)对象,这样的对象状态是从事先定义好的一系列值中取出的。当一个这样的对象与外部事件产生互动时,其内部状态就会改变,从而使得系统的行为也随之发生变化。

在UML中可以使用状态图来描述对象状态的变化。

状态模式(State Pattern) :允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其别名为状态对象(Objects for States),状态模式是一种对象行为型模式。

有限状态机(英语:finite-state machine,缩写:FSM)又称有限状态自动机(英语:finite-state automation,缩写:FSA),简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学计算模型。

状态存储关于过去的信息,就是说:它反映从系统开始到现在时刻的输入变化。转移指示状态变更,并且用必须满足确使转移发生的条件来描述它。动作是在给定时刻要进行的活动的描述。有多种类型的动作:

  • 进入动作(entry action):在进入状态时进行
  • 退出动作(exit action):在退出状态时进行
  • 输入动作:依赖于当前状态和输入条件进行
  • 转移动作:在进行特定转移时进行

Moore状态机:输出仅仅与当前状态有关;

Mealy状态机:输出不仅取决于当前状态,还和输入有关;

结构

状态模式包含如下角色:

  • Context: 环境类
  • State: 抽象状态类
  • ConcreteState: 具体状态类

参考链接

  1. 软件设计模式简介,by jackhuang.
  2. 图说设计模式-状态模式,by me115.
  3. 有限状态机,by wikipedia.
  4. 理解状态机,by 纸上浅谈.
  5. 深入浅出理解有限状态机,by 我是云峰小罗.
  6. JavaScript与有限状态机,by ruanyifeng.
  7. Moore状态机和Mealy状态机的区别,by Reborn Lee.
  8. C++各类设计模式及实现详解,by linux.

自动控制原理笔记

发表于 2020-03-16 | 更新于 2020-10-11

记录自动控制原理的核心概念、方法。

闭环控制

闭环控制系统

图1 闭环控制系统

图1所示闭环反馈控制系统包括了三种类型的输入信号和一个输出信号$Y(s)$,其中输入信号包括参考输入$R(s)$、干扰信号$T_d(s)$和测量误差$N(s)$。定义偏差信号,即跟踪误差信号为

$$E(s)=R(s)-Y(s) \tag{1}$$

令$H(s)=1$,则图1所示闭环系统的输出$Y(s)$为

$$Y(s)=\frac{G_c(s)G(s)}{1+G_c(s)G(s)}R(s)+\frac{G(s)}{1+G_c(s)G(s)}T_d(s)-\frac{G_c(s)G(s)}{1+G_c(s)G(s)}N(s) \tag{2}$$

将式(1)代入式(2),则跟踪误差信号$E(s)$为

$$E(s)=\frac{1}{1+G_c(s)G(s)}R(s)-\frac{G(s)}{1+G_c(s)G(s)}T_d(s)+\frac{G_c(s)G(s)}{1+G_c(s)G(s)}N(s) \tag{3}$$

定义开环增益$L(s)$为

$$L(s)=G_c(s)G(s) \tag{4}$$

定义灵敏度函数$S(s)$为

$$S(s)=\frac{1}{1+L(s)} \tag{5}$$

定义补灵敏度函数$C(s)$为

$$C(s)=\frac{L(s)}{1+L(s)} \tag{6}$$

初值定理

在数学分析中,初值定理是将时间趋于零时的频域表达式与时域行为建立联系的定理。令

$$F(s)=\int _{0}^{\infty }f(t)e^dt$$

为 $ƒ(t)$ 的(单边)拉普拉斯变换。初值定理表明

$$\lim _{t\to 0}f(t)=\lim _{s\to \infty }{sF(s)}$$

终值定理

在数学分析中,终值定理(Final Value Theorem, FVT)是将时间趋于无穷时的时域表达式与频域行为建立联系的许多定理之一。终值定理允许直接对频域表达式取极限来计算时域行为,无需先转换到时域表达式再取极限。

在数学上,如果

$$\lim _{t\to \infty }f(t)$$

有一个有限极限,那么

$$\lim _{t\to \infty }f(t)=\lim _{s\to 0}{sF(s)}$$

其中 $F(s)$ 为 $f(t)$ 的(单边)拉普拉斯变换。

增益裕度

增益裕度(gain margin, GM)是衡量系统稳定程度的一种方法。

相位裕度

相位裕度(phase margin, PM)是另一种衡量系统稳定程度的方法。

参考链接

  1. 一阶系统和二阶系统,了解一下!!!,by 软软不软.
  2. 终值定理,by wikipedia.
  3. 初值定理,by wikipedia.
  4. 欧拉公式,by wikipedia.
  5. 分部积分法(integration by parts),by 清雅白鹿记.
  6. 如何设计一个运动控制系统,by J Pan.
  7. 如何入门自动控制理论,by J Pan.
  8. 控制器设计怎么做,by 刘扬扬.
  9. 阻尼,by wikipedia.
  10. 相位裕度,by wikipedia.
  11. 波德图,by wikipedia.
  12. 伯德图中的相角裕量和幅值裕量有什么物理意义?,by zhihu.
  13. 现代控制理论线性系统入门(五)设计状态反馈控制器,by zhihu.
  14. simulink怎么用s函数代替微分模块?,by zhihu.
  15. 飞机的纵向增稳是如何实现的,by J Pan.

Matlab_Stateflow_Chart无法初始化向量或数组的解决方法

发表于 2020-03-14

最近在使用Matlab的Stateflow工具箱时,发现无法初始化类型为向量或矩阵的变量。在网上搜索了很久,终于发现类似问题的解决方法,参考链接Why am I unable to initialize the local vector or matrix data in my Stateflow chart?。

具体解决方法是:

  • 定义一个常量,维度与向量变量或矩阵变量一致,设置常量的数值。
  • 使用定义的常量去初始化变量

参考链接

  1. Why am I unable to initialize the local vector or matrix data in my Stateflow chart?,by mathworks.
上一页1…282930…53下一页

Jack Huang

523 日志
67 标签
© 2025 Jack Huang
由 Hexo 强力驱动
|
主题 — NexT.Muse