第二章 低级建模的基础
- 格式:pdf
- 大小:2.92 MB
- 文档页数:33
第二章车辆动力学建模方法及基础理论§2-1 动力学方程的建立方法在车辆动力学研究中,建立系统运动微分方程的传统方法主要有两种:一是利用牛顿矢量力学体系的动量定理及动量矩定理,二是利用拉格朗日的分析力学体系。
本节将对这两种体系作一简单回顾,并介绍几个新的原理。
一牛顿矢量力学体系(1)质点系动量定理质点系动量矢p对时间的导数等于作用于质点系的所有外力F i的矢量和(即主矢),其表达式为:二、分析力学体系分析力学是用分析的方法来讨论力学问题,较适合处理受约束的质点系。
(1)动力学普遍方程动力学普遍方程由拉格朗日(Lagrange)于1760年给出的,方程建立的基本依据是虚位移原理,表示如下:(2-6)(2)拉格朗日方程拉格朗日法的基本思想是将系统的总动能和总势能均以系统变量的形式表示,然后将其代入拉格朗日方程,再对其求偏导数,即可得到系统的运动方程。
拉格朗日方程形式如下:利用此方程推导车辆动力学方程时,因采用广义坐标,从而使描述系统位移的坐标数量大大减少,并可以自动消去无功内力。
但也存在下述问题:①应用拉格朗日方程时,有赖于广义坐标选取得是否得当,而适当地选择广义坐标有时要靠经验;②拉格朗日能量函数对于刚体系统的表达式可能非常复杂,代人拉格朗日方程后要作大量运算。
而对于复杂的车辆系统,写出能量函数的表达式就更加困难。
三、虚功率原理若丹(Jourdain)于1908年推导出另一种形式的动力学普遍方程,其所依据的原理称之为虚功率原理。
虚功率形式的动力学普遍方程为:四、高斯原理1829年,高斯(Gauss)提出动力学普遍方程的又一形式,称为高斯原理,其表达式为:§2-2 非完整系统动力学一、非完整系统动力学简介1894年,德国学者Henz第一次将约束系统分成“完整”和“非完整”两大类,从此开辟了非完整系统动力学(Nonholonomie System)的新领域,如今它已成为分析力学的一个重要分支。
第章建模基础知识建模技术是CAD系统的核心技术,计算机集成制造系统(CIMS)的水平与集成在很大程度上取决于三维几何建模软件系统的功能与水平。
对于现实世界中的物体,从人们的想象出发,利用交互的方式将物体的想象模型输入计算机,计算机以一定的方式将模型存储起来,这个过程称为建模。
即首先研究物体的描述方法,得到一种想象模型(亦即外部模型),它表示了用户所理解的事物及事物间的关系,然后将这种模型转化为用符号或算法表示的形式,最后形成计算机内部的模型。
因此,建模过程就是一个产生、存储、处理、表达现实世界的过程。
在实际的产品设计中,建模可以分为几何建模和特征建模两种类型,分别介绍如下。
1.1 认识几何建模几何建模是指形体的描述和表达是建立在几何信息和拓扑信息基础上的建模。
其主要处理零件的几何信息和拓扑信息。
几何信息一般是指物体在欧氏空间(欧氏几何所研究的空间称欧氏空间,它是现实空间的一个最简单并且相当确切的近似描述)中的形状、位置和大小,一般指点、线、面、体的信息。
拓扑信息则是指物体各分量的数目及其相互间的连接关系。
目前常用的三维几何建模包括线框、表面和实体建模。
1.线框建模线框建模用一系列空间直线、圆弧和点表示形体,并在计算机内部生成相应的三维映像。
通过修改点和边来改变形体的形状。
与该模型相关的数学表达式是直线或曲线方程、点的坐标以及边和点的连接信息。
线框模型描述的是产品的轮廓外形。
在CAD/CAM 软件中,线框模型相当于投影视图中的轴测图,此类投影视图也属于平行投影,且只有一个投影面。
当物体的3个坐标面不与投影方向一致时,则物体平行于3个坐标面的平面的轴测投影在轴测投影面中都得到反映,因此,物体的轴测投影才有较强的立体感。
例如,在Pro/E 的工程图环境中,打开【绘图视图】对话框,并创建轴测图,如图1-1所示。
线框建模所构造的实体模型只有离散的边,而没有边与边的关系,与该模型相关的数学表达式是直线或曲线方程、点的坐标及边和点的连接关系。
数学建模基础
数学建模是指利用数学方法和技巧对实际问题进行抽象和
描述,并通过建立数学模型来研究问题的方法。
数学建模
基础主要包括以下几个方面:
1. 数学知识:数学建模需要掌握一定的数学知识,包括数
学分析、线性代数、概率论与数理统计、微分方程等。
这
些数学知识可以帮助建模者理清问题的结构和逻辑关系,
从而构建合理的数学模型。
2. 数据分析能力:数学建模过程中需要处理和分析大量的
实际数据,包括收集数据、整理数据、统计分析数据等。
因此,建模者需要具备一定的数据分析能力,如数据挖掘、统计分析等。
3. 系统思维能力:数学建模需要从整体上把握问题的本质
和复杂性,涉及到系统思维能力。
建模者需要能够将问题
拆解成多个子问题,并对它们进行分类、分析和优化,最
终求解整个问题。
4. 编程能力:在数学建模中,常常需要使用计算机编程来实现数学模型的求解。
因此,建模者需要具备一定的编程能力,如使用MATLAB、Python等编程语言进行算法实现和数据处理。
5. 创新能力:数学建模是解决实际问题的方法,需要建模者拥有一定的创新能力。
建模者需要能够运用已有的数学理论和方法,创造性地将其应用于实际问题,并提出新的解决方案。
综上所述,数学建模基础包括数学知识、数据分析能力、系统思维能力、编程能力和创新能力等方面。
这些基础能力是进行有效数学建模的必备条件。
数学建模新手“必读教程”第一部分基本知识:一、数学模型的定义现在数学模型还没有一个统一的准确的定义,因为站在不同的角度可以有不同的定义。
不过我们可以给出如下定义:“数学模型是关于部分现实世界和为一种特殊目的而作的一个抽象的、简化的结构。
”具体来说,数学模型就是为了某种目的,用字母、数学及其它数学符号建立起来的等式或不等式以及图表、图象、框图等描述客观事物的特征及其内在联系的数学结构表达式。
一般来说数学建模过程可用如下框图来表明:数学是在实际应用的需求中产生的,要解决实际问题就必需建立数学模型,从此意义上讲数学建模和数学一样有古老历史。
例如,欧几里德几何就是一个古老的数学模型,牛顿万有引力定律也是数学建模的一个光辉典范。
今天,数学以空前的广度和深度向其它科学技术领域渗透,过去很少应用数学的领域现在迅速走向定量化,数量化,需建立大量的数学模型。
特别是新技术、新工艺蓬勃兴起,计算机的普及和广泛应用,数学在许多高新技术上起着十分关键的作用。
因此数学建模被时代赋予更为重要的意义。
二、建立数学模型的方法和步骤1. 模型准备要了解问题的实际背景,明确建模目的,搜集必需的各种信息,尽量弄清对象的特征。
2. 模型假设根据对象的特征和建模目的,对问题进行必要的、合理的简化,用精确的语言作出假设,是建模至关重要的一步。
如果对问题的所有因素一概考虑,无疑是一种有勇气但方法欠佳的行为,所以高超的建模者能充分发挥想象力、洞察力和判断力,善于辨别主次,而且为了使处理方法简单,应尽量使问题线性化、均匀化。
3. 模型构成根据所作的假设分析对象的因果关系,利用对象的内在规律和适当的数学工具,构造各个量间的等式关系或其它数学结构。
这时,我们便会进入一个广阔的应用数学天地,这里在高数、概率老人的膝下,有许多可爱的孩子们,他们是图论、排队论、线性规划、对策论等许多许多,真是泱泱大国,别有洞天。
不过我们应当牢记,建立数学模型是为了让更多的人明了并能加以应用,因此工具愈简单愈有价值。
简述建模的几点基本原理建模是一个极其重要的过程,它可以帮助我们更好地理解和描述复杂的系统或问题。
在建模过程中,我们需要遵循一些基本原理,以确保我们所建模型的准确性和可靠性。
本文将简述建模的几点基本原理。
一、建模目标明确在建模之前,我们需要确定建模的目标和对象。
建模的目标应该是明确的,包括建模的目的、建模的应用和建模的对象。
只有在明确了建模目标之后,我们才能更好地确定建模的范围和内容,从而有效地进行建模。
二、建模数据准确建模的数据来源非常重要,建模数据的准确性直接影响到我们所建模型的准确性和可靠性。
因此,在建模之前,我们需要对建模数据进行仔细的筛选和处理,确保建模数据的准确性和完整性。
同时,我们还需要对建模数据进行合理的分类和归纳,以便更好地进行建模。
三、建模方法合理在建模过程中,我们需要选择合适的建模方法。
不同的建模方法适用于不同的问题和对象。
因此,在选择建模方法时,我们需要根据建模目标和对象的特点,选择合适的建模方法。
同时,我们还需要对所选建模方法进行深入的了解和研究,以确保建模方法的合理性和有效性。
四、建模过程透明建模过程应该是透明的,建模过程中所使用的方法和数据应该能够被其他人理解和重复。
只有在建模过程透明的情况下,我们才能保证所建模型的可靠性和有效性。
因此,在建模过程中,我们需要记录每一步所采取的方法和使用的数据,并将记录公开,以便其他人进行复查和验证。
五、建模结果可靠建模的最终目的是得到可靠的建模结果。
建模结果应该能够真实地反映所建模型的特征和规律。
因此,在得到建模结果之后,我们需要对建模结果进行仔细的分析和评估,以确保建模结果的可靠性和有效性。
同时,我们还需要对建模结果进行合理的解释和说明,以便其他人能够理解和使用建模结果。
综上所述,建模是一个极其重要的过程,我们需要遵循一些基本原则,以确保所建模型的准确性和可靠性。
建模过程需要明确建模目标,使用准确的建模数据,选择合适的建模方法,保持建模过程透明,得到可靠的建模结果。
有关建模的知识点总结一、建模的基本概念1.1 建模的定义建模是把真实世界对象或系统抽象化和理论化的过程,通过数学、逻辑等方法将其描述和分析,以实现对其行为、性能、形态等方面的理解和预测。
1.2 建模的目的建模的目的在于简化和理解复杂的现实世界,通过对现实世界的抽象、描述和分析,帮助人们预测、优化和改进物理系统、信息系统等。
1.3 建模的特点建模具有抽象化、理论化、精炼化、计算化等特点,通过对真实对象或系统的抽象描述和理论化分析,实现对其行为和性能的精确计算和评估。
1.4 建模的意义建模在科学研究、工程实践、商业决策等领域中都具有重要意义,帮助人们理解和预测现实世界中的复杂现象,为决策提供科学依据。
二、建模的方法2.1 数学建模数学建模是利用数学方法描述和分析现实世界中的对象或系统的行为、性能等,通过建立数学模型实现对其预测和优化。
2.2 统计建模统计建模是利用概率统计等方法描述和分析现实世界中的随机现象,通过建立统计模型实现对其规律性的认识和预测。
2.3 计算机建模计算机建模是利用计算机软件和工具对对象或系统进行抽象描述和模拟分析,实现对其行为和性能的计算和仿真。
2.4 仿生建模仿生建模是利用生物学的原理和方法对工程系统进行抽象描述和优化设计,实现对自然界中的智慧和效率的借鉴。
2.5 信息建模信息建模是对信息系统、通信系统等进行抽象化和描述分析,实现对其通信、存储、处理等特性的理解和预测。
2.6 多学科建模多学科建模是利用不同学科的知识和方法对对象或系统进行抽象描述和综合分析,实现对其多方面特性的理解和优化设计。
三、建模工具3.1 数学工具数学工具包括数学模型、微积分、线性代数、概率统计、最优化等,通过这些工具可以对对象或系统进行抽象描述和计算分析。
3.2 计算机工具计算机工具包括建模软件、仿真软件、数据处理工具等,通过这些工具可以对对象或系统进行抽象描述和模拟分析。
3.3 实验设备实验设备包括各种实验仪器、工程设备等,通过这些设备可以对对象或系统进行实验测量和验证分析。
第二章建模方法论2.1 数学模型系统模型的表示方式有许多,而其中数学方式是系统模型的最主要的表示方式。
系统的数学模型是对系统与外部的作用关系及系统内在的运动规律所做的抽象,并将此抽象用数学的方式表示出来。
本节将讨论建立数学模型作用、数学模型与集合及抽象的关系、数学建模的形式化表示、数学模型的有效性与建模形式化、数学模型的分类等问题。
2.1.1 数学建模的作用1、提高认识通信、思考、理解三个层次。
首先,一个数学描述要提供一个准确的、易于理解的通信模式;除了具有清楚的通信模式外,在研究系统的各种不同问题或考虑选择假设时,需要一个相当规模的辅助思考过程;一旦模型被综合成为一组公理和定律时,这样的模型将使我们更好地认识现实世界的现象。
因此,可把现实世界的系统看成是由可观测和不可观测两部分组成。
2、提高决策能力管理、控制、设计三个层次。
管理是一种有限的干预方式,通过管理这种方式人们可以确定目标和决定行为的大致过程,但是这些策略无法制定得十分详细。
在控制这一层,动作与策略之间的关系是确定的,但是,由于控制中的动作仅限于在某个固定范围内进行选择,所以仍然限制了干预的范围。
在设计层,设计者可以在较大程度上进行选择、扩大或代替部分现有的现实,以满足设计者的希望。
因此,可把现实世界的系统看成是由可控制和不可控制两部分组成。
3---统实际系统不可观部分不可控部分可观部分 可控部分目标:提高认识 目标:提高干预能力图 2.2 根据目标建立系统2.1.2 集合、抽象与数学模型抽象过程是建模工程的基础。
由于建模和集合论都是以抽象为基础,集合论对于建模工程是非常有用。
1、集合:有限集合无限集合,整数集合I,实数集合R ,正整数集合I +,非负整数集合I 0+=I +U{0},}{0,0∞=++∞ I I 是非负整数加符号∞而成的集合。
与其类似,R +,R 0+和+∞,0R 则表示实数的相应集合。
叉积是集合基本运算:令A 和B 是任意集合,则A ×B={(a,b ),a ∈A,b ∈B}。
第二章:低级建模的基础2.1顺序操作和并行操作顺序操作和并行操作,是新手们很容易混乱的一个重点。
但是为了将低级建模发挥到极限,这一点必须好好的理解。
Verilog HDL语言,虽然不同与其他高级语言的优秀结构性,但是作为硬件描述语言的它,最大的优势是并行操作。
顺序操作有如“步骤”概念,如果上一个行为没有完成,下一个行为就没有执行的意义。
而并行操作最为不同的是,两个行为都是独立执行,互不影响。
那么,我们从一个典型的实验“流水灯实验”,在具体上来理解它们的不同之处。
下图是两种以不同操作方式建立的“流水灯实验”。
1)点亮第一个LED,延迟一段时间。
2)点亮第二个LED,延迟一段时间。
3)点亮第三个LED,延迟一段时间。
4)点亮第四个LED,延迟一段时间。
5)重复第一个步骤。
从上面看来,我们明白“流水灯效果的产生”主要是以“顺序的方式”执行5个步骤。
这可能是人类自然的思维方式吧,人类真的是奇怪的动物,虽然人类的大脑是并行操作的,但是人类的思维方式比较偏向“顺序操作”。
为什么呢?如果引用现实中的实例,如果四个LED失去了“指挥者”,那么它们就罢工了!因为它们失去“执行发号”的第二方,这样的情况就如同上面内容如果没有了“1”,“2”,“3”,“4”,“5”的数目字,那么你又如何看懂“流水灯如何产生呢?”换一句话说,“顺序操作”的代表往往都有一个“指挥者”或者名为“控制器”东西的存在,执行着“工作的次序(步骤)”。
我相信很多学习FPGA的朋友都有学过单片机。
学习单片机的时候,可能是C语言或者汇编语言的关系,所以很多朋友在不知不觉中的情况习惯了“顺序操作”这样的概念。
新手们常常忽略了,FPGA有存在着“顺序操作”和“并行操作”的概念。
如果打从一开始就忽略了它们,往后的日子很难避免遇见瓶颈。
那么换成是“并行操作”的流水灯是如何的呢?结果我们从实验中理解...实验一:永远的流水灯。
这一个实验,我们要以上图作为基础,建立一个并行操作的流水灯模块。
扫描频配置定为100Hz,而每一个功能模块在特定的时间内,将输出拉高。
示意图如下:从上图我们可以看到,功能模块1在时间的第一个1/4拉高输出,功能模块2在时间的第二个1/4拉高输出,其余的两个功能模块也是以此类推。
所以在一个固定的时间周期内(10ms),每一个功能模块所占的时间都是2.5ms。
实验一源码:实验一说明:注:实验文件为路径./Experiment01/之下。
建模过程请参考“实验一配置”。
led0_module.v,led1_module.v,led2_module.v,led3_module.v,的源码都是大同小异。
第12行是10ms计数器的常量声明。
第16~24行是一个计数器,计数器计数范围为10ms。
而在28~36行是决定4个功能模块的不同之处。
led0_module.v功能模块是在时间的第一个1/4拉高输出。
led1_module.v功能模块是在时间的第二个1/4拉高输出。
led2_module.v功能模块是在时间的第三个1/4拉高输出。
led3_module.v功能模块是在时间的第四个1/4拉高输出。
而top.v是顶层模块,用来组织这四个功能模块。
实验一总结:从实验的结果看来利用“并行操作”实现的流水灯,在现实的肉眼中和“顺序操作”没有任何两样。
但是从“理解上”就有很大的差别。
led0_module.v功能模块是在时间的第一个1/4拉高输出。
led1_module.v功能模块是在时间的第二个1/4拉高输出。
led2_module.v功能模块是在时间的第三个1/4拉高输出。
led3_module.v功能模块是在时间的第四个1/4拉高输出。
上面的内容表示了,4个功能模块是独立操作的。
由于输出在时间上不同,在肉眼中才会看到流水灯的效果。
用现实的角度去思考的话,宛如有四个局内人,无不关系,各自只是按照自己的节奏完成自己的工作。
在局外人的眼中,他们如同有默契般,不需要“指挥者”也能完成任务。
在这里说一点局外话。
“并行操作”的建模程度虽说猥琐。
但是在理解上非常适合“FPGA+Verilog HDL”的口味。
平常我们在设计程序的时候,在无意识中使用了“顺序操作”的思维,如果“并行操作”也可以无意识般的使用,那么程序设计,会出现许多“可能性”。
2.2倾向并行操作在2.1章理解了"顺序操作"和“并行操作”的区别之后,这一章我们要讨论并且习惯“并行操作”的思考。
上图是一个组合模块,里边包含了两个功能模块。
一是对闪耀灯控制的功能模块,二是对流水灯控制的功能模块。
假设我要利用“顺序操作”实现如图的功能模块。
实际上是怎样的一个效果呢?我们以“C语言”作为“顺序操作”的代表,来分析一下过程。
.While(1)//大循环{Flash_Funct();//闪耀功能模块Run_Funct();//流水灯功能模块}如果按照上面的代码,程序一开始就会先执行闪耀功能模块(Flash_Funct()),然后再执行流水灯功能模块(Run_Funct())。
但是在现实中,由于控制器的扫描速度很快快,使得人类的肉眼看到错觉“两个模块并行执行着”。
事实上,无论控制器的扫描速度怎么快,也是会存在着“上一步延迟”。
亦即Run_Funct()要执行前,必须等待Flash_Funct()执行完毕,Flash_Funct()要重复执行,必须等待Run_Funct()执行完毕。
除此之外,在“理解上”,人类的思维也非常习惯化的以“顺序”的方式去理解上面的代码。
1.执行Flash_Funct();2.执行Run_Funct();3.重复步骤1.如此一来我们明白了一个道理,“顺序操作”不能满足上图组合模块的功能要求。
module top_module (......);flash_module U1//功能模块1实例化(......);run_module U2//功能模块2实例化(......);endmodule上面内容是Verilog HDL 语言的实例化过程。
在建立实例U1和U2,我们只要确保连接正确而已。
在前面说过"并行操作"的功能模块都是独立执行。
在“设计上”,编辑flash_module 和run_module 的工作都是“分开进行”,而在“理解上”两个实例都是“独立执行”。
换一句话说,上图的组合模块非常适合使用“并行操作”来建模。
不同于“顺序操作”,要实现上图的组合模块,除非依靠“高频扫描”或者“任务调度程序”以外,但是无论怎么“依靠”什么,都不是真正意义上的“并行操作”。
实验二:闪耀灯和流水灯功能模块执行频率资源占用闪耀灯功能模块flash_module.v10hz (100ms)一位LED 流水灯功能模块run_module.v 3.3Hz (300ms)三位LED实验二主要是建立如上图的功能模块。
乘着这个实验的时机,来解释一下,一个长久以来美丽的误会。
扫描频率?闪耀频率?闪耀频率是指一个LED开和关说的周期时间。
实验二中的flash_module所制定的输出如上。
扫描频率是指一次完成流水灯动作所的时间周期。
实验二中的run_module所制定的扫描输出如上。
回忆以前,记得我在入门单片机的时候,实现的流水灯实验,可能是入门的关系吧?我过分在乎肉眼中所看到的效果,而忘记了这些重要的信息。
估计很多人也是吧?但是经过前面2.1章和2.2章的实验创作,要我明白“小小的实验,大大的道理”的道理。
原来流水灯实验,不仅是经典,而且包含了很多的知识。
有时候做人太注重着外面的世界,不小心之间忘记了心里的世界。
实验二源码:实验二完成框图:实验二说明:注意:详细信息请参考“./Experiment02”下的原项目。
建模过程请参考建模视频“video_exp02”。
配置过程请参考“实验二配置”flash_module.v是一个10hz,50%占空比输出的功能模块。
说得简单点就是定时开关...代码比较简单。
run_module.v是一个3.3hz扫描频率的流水灯,采用“控制模块”形式编写。
16~24行是1ms的计数器。
28~36行是基于count1的100ms的计数器。
40~52行是3Bit的移位操作,45行表示每间隔100微妙发生一次移位操作。
48行,判断移位末期。
而51行是移位的代码。
mix_module.v是组合模块,代码很容易明白。
自己看着明白吧。
实验二结论:无论是实验二结果,还是理解上的思维,或者设计上的方向。
“并行操作”完全符合实验二的要求。
所以:思维倾向“并行操作”对,VerilogHDL+FPGA理解或者设计是非常重要。
2.3Verilog HDL不是编程””是“建模建模””不是““编程在初次接触Verilog HDL语言的时候,网上很多朋友都说它和C语言很相似?但是对于这个问题,我真的头疼很久!如果说Verilog HDL与C语言不同,但是是什么地方不同,我却有说不出的感觉。
单片机是一种已经完成的硬件,但是单片机没有“灵魂”,c语言给单片机“灌输灵魂”,单片机才能舞动起来。
c语言就是扮演这样的一个角色。
不同的是,Verilog HDL语言是一种富有“形状”的语言,它可以描述单片机的任何部分。
如UART资源,定时器资源等。
“建模”这一词是指,使用“硬件描述语言”去建立某个资源模块。
如果说c语言可以使用“编程”一词,那么Verilog HDL语言使用“建模”这一词更适合不过了。
从理解上,C语言,我们可以使用“代码”的形式去理解“编程”,如:函数的概念,参数的概念,局部全局的概念等。
但是“代码的形式”却完全不适合“Verilog HDL语言”。
既然“代码的形式”不适合“Verilog HDL语言”,那么“Verilog HDL语言”又该用“什么”去看待?前面我已经说过,“Verilog HDL语言”是一种富有“形状”的语言。
Verilog HDL语言的“建模”更应该有形象和更有具体感。
如果以笔者的角度去了解“建模”......笔者每次在设计之前,都喜欢将一个一个模块画在纸上,然后再使用连线的方式去完成一个设计。
从这一点,我们可以知道笔者是从“图形”去完成设计的准备。
换一句话说,笔者是以“形状”的形式作为设计的理解基础。
以“代码”的形式去理解Verilog HDL语言的设计,到底有多大问题?从网上的众多求救贴中,就可以理解这一点。
笔者不是完全否定这样的理解形式,毕竟“代码”是语言的基础,而且建模的完整性,都需要“代码级”的微调。
笔者只想告诉一个事实而已。
如果着手以“形状”的去理解Verilog HDL语言,以“建模”的去完成Verilog HDL语言的设计。
在感觉上Verilog HDL+FPGA是“可所触及”,是一种“实实在在”的感觉,不相等于“编程”时的那种“抽象感”。