参加数学建模已经很多年了,算来其中所学多源于网络上各位前辈的无私奉献。饮水当思源,承志以后继。故而添加此分类,用于交流我这些年的心得。心得分为软件和算法两
类,软件可能会包括m atlab/simulin k,maple,mathema ti ca,spss(被收购成了pa sw),ansys,ansoft/maxwell,comsol,p scad,tc,算法可能有GA,NNs。当然,受到专业研究所限,很多时候无法得心应手,献丑于此,只为提醒自己要做到更好。
恰巧,我在自己学校的b bs上申请了相关版面的版主职位,也希望自己能整理出些基础教学,以备后生晚辈们入门。暂时的想法是,先说些simu link的相关知识,因为工科学生最常用的就是这个仿真环境,而其他软件又恰好对他保留了接口,可以说这个软件成为了算法的中心。以后将陆续说些si muli nk不能完成的任务,并推荐能完成这些任务的工具。开始吧——
simulin k可以视作m a tlab下的工具库,matlab版本不断更新,si mulin k也不断更新,当前版本为ma tlab2011b。
首先要明确,simulin k的作用为求解常微分方程(组)!且这是他唯一的作用!也就是说偏微分方程在sim ulink中是无法求解的,需要其他工具或软件作为接口,或者你够牛的,就直接写个有限元的程序。当然,常微分方程是不够的,为适应数字控制电路等离散系统,simulin k可以求解离散的常微分方程,也就是差分方程,略微麻烦,不做重点介绍。
然后来看看si mulink求解常微分方程(组)的方法,首先要把方程写成如下形式:matlab软件怎么使用
y1'=f1(y1,y2,...yn,t)
y2'=f2(,t)
...
yn'=fn(,t)
至于如何写成这种形式,就是降阶了,线性代数里说的很多了,比如y1=y;y2=y1'=y';y3=y2'=y''...需要注意的是,等号右侧不能有导数项,如果等号右边出现了导数项,则说明这个方程需要积分一次。等号右侧可以有积分项,但不推荐出现,可以将出现的积分项作为新的变量,添加一个方程。
有了方程后,就可以连接成如图的形式:
其中的1/s表示积分环节,其输入为等号的左侧,输出为等号左侧的积分,subsyst em表示等号右侧的搭建,此处只画出一个以示意。因此整个方程求解过程的主要工作在于su b syste m 的搭建,其中可能用到的运算符号在s i mulin k的第一个库中都能到,常用的如:加减乘除,矩阵乘法、转置、求逆,三角函数,分段函数,逻辑判断。以后会介绍这些函数的具
体用法。
最后一步就是设置仿真的误差和算法了,ctrl+e,或者菜单栏上可以到sim下con par,其中的ode等等表示算法,如ode45是龙哥库塔四阶(好像是吧,记不清)。还可以设置变步长和定步长,误差容限等等,虽然数学上认为这些算法的计算精度会差很多(一阶和四
阶的差距就是步长的立方啊),但实际中,感觉并不大,小步长的欧拉算法似乎也很可靠。
先说下模块怎么,启动simul i nk的截面后,会有很多库,最常用的当然是第一个名为si mulin k的库了,里面的模块基本都要记熟的,可以直接拖拽放到工作界面。如果是陌生的模块,可以打字搜索,如图所示,然后再拖拽。除了simul ink库以外,另一个常用的库可能就是你的专业了,比如我学ee的,一般常用的就是si mpower了。
然后继续上次说的,simulin k的唯一功能就是求解常微分方程,且都要写出y'=的形
式,等号右边通常会出现哪些计算符号呢?就看看一些常用的吧,如图所示。第一行基本
是每个模块必备的,第二行是加减乘除,第三行是常用函数。
constan t:即常数,输出一个常数,双击可修改该值。
socpe:昵称示波器,可以用来看任一条线上的输出(当然最好是数,别是向量或者矩阵,可能会有麻烦)
intergrator:积分器,这个很熟悉了吧,每个方程写出标准形式后,都要这个的
clock:时间,在求解方程时当做自变量
第二行的各位:就是加减乘除了,都支持矩阵或者向量,矩阵除法就是求逆啦~如果用矩阵或向量形式时,乘除法记得要双击修改下
abs:绝对值
eu:不只是指数函数哦~双击可以修改为平方开根号等等
sin:不只是sin哦,还有cos,arccos等等,记得是弧度制哦~
下面来个简单的例子,比如求解y'=y-x,学过数学的都知道用欧拉方程去求,算个特征根,然后代入初值条件,balabal a一算,出来结果了。在simuli nk里可简单多了,初值条件可以双击i ntergrator,里面有初值选项,这里默认为0,求解自变量从0到10的解,用示波器观察y,运行后得到结果,如图所示。
如果y'=的表达式复杂些,比如下图中的那个,呵呵,我都不知道该怎么写这个式子了,感觉太长了~不过simul ink依然可以求解哦~~~
会这些以后,很多问题都可以解决了,尤其是高等数学里求解微分方程那章的东西,都轻而易举。不过别以为这些就够用了,至少有两个问题没有解决:一个是实际问题
中多有分段函数,分段函数又牵涉逻辑判断;另一个是求解的精度,你知道误差是多大
么?这些问题留着以后再介绍吧~
上两次介绍了si mulin k求解常微分方程的思路,将全部问题归结为y'=等号右侧的搭建,并通过最常用的一些模块弄了一些例子。按照约定,这次会介绍等号右侧含有分段函
数的情况。先看下要用到的模块:
第一行是逻辑判断模块,因为分段函数的结构是:表达式1,条件1;表达式2,条件2...所以逻辑判断模块对应条件。这些模块的意思看名字就知道,双击后,可以把小于等于
改成大于,等于,不等于等等,与运算可以有非,或,异或等等。第二行是一个时能子系统,用法很多,常被初学者成为高级模块,其实远没那么神秘,直接拖出这个模块,不加
任何修改,就能用来搭建分段函数。第三行是两个常用模块,双击后可以修改输入的个数。
先介绍个数学小技巧,这也是分段函数搭建的理论基础,说是理论基础,其实中
学生应该就能理解。看这个表达式就能明白:y=y1 if con1;y2 if con2;y3 others=y1*(if(con1))+y2*(if(con2))+y3*(if(con3)),变形后的等式,由加法、乘法、if三个部分组成,所以才会在介绍模块的时候特别提到加法和乘法两个模块。如果还不明白,可以看个例子,y'=t if t<1;2*t if 1<=t<2;0 others=t*(if(t<1))+2*t*(if(t>=1 and t<2))+0*(if(t>=2)),特别说明,通
常t>=0。如下图所示:
其中与运算,乘法,加法和表达式完全一致,没有半分偷懒。因此可知分段函数的表达,是拆成分段表达式和分段条件两部分的,前者用些常用模块,前两次已经交代过,后者就是与或非。当然,除了以上方法,还有些偷懒的,比如下图中,对(表达式=t,条件=t>0 and t<1)这个分段的搭建:
右上的方法,是最基本的,表达式乘以条件式。左上则是省略了与运算,直接用乘法代替,其实和逻辑运算一致。最下方的方法则用到了使能子系统。至于这三种搭建的结构在运算上是否完全等效,我无法得知,因为simul ink转换成代码形式还有很多东西要设置,但对于工程应用,这些已经足够了。
下一次会介绍矩阵的运算,尤其是如何从元素到矩阵,从向量取元素,并简介下sim-con的设置,及其
对运算时间的影响。
很多时候都要在m atlab画图的时候添加一些公式符号之类的,有一些特殊的字符并不能直接从键盘上输入,比如希腊字母等等。但是有想用,因为这样使图看起来漂亮而且容易理解。
例如:我想输入摄氏度的符号,怎么办咧?
也许你突然想到,摄氏度不就是一个小圆圈加一个大写的C么。
于是就用’T=25^oC’来表示了,一看,多少还算是那么回事,但怎么看怎么有点别扭。
因为o作为上标的时候它不是一个正真的圆圈,最多是个椭圆,并且它体积太大了。
好吧,既然如此,那就用中文输入法打个句号“。”上去,即’T=25^。C’
再看的时候,圆圈到是圆圈了,但还是别扭呢?
那是因为在编码中,中文句号占了两个字符的位置,所以圆圈和C的位置拉得太远,根本看不下去。
行了,告诉你吧
正确的表示方法为:’T=25circC’,这样就好看多了!
下面给出Matl ab中下标及希腊字母的使用方法,还有更多的使用方法可以参考m atlab 帮助
文档中的Tex t Properti es:
下标用_(下划线)
上标用^ (尖号)
希腊字母等特殊字符用加拼音如
αalpha
βbeta
γgamma
ζtheta
ΘTheta
ГGamma
δdelta
ΔDelta
ξxi
ΞXi
εelta
ε epsilon g
δzeta
μmiu
υnu
ηtau
λlamda
ΛLamda
πpi
ΠPi
ζsigma
ΣSigma
θphi
ΦPhi
ψpsi
ΨPsi
χchi
ω ommiga
Ω Ommiga
< leq
> geq
不等于neq
<< ll
>> gg
正负pm
左箭头leftarro w
右箭头rightarrow
上箭头uparrow
上圆圈(度数)circ
例text(2,3,’alpha_2^beta’)
注:可用{}把须放在一起的括起来
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论