文档库 最新最全的文档下载
当前位置:文档库 › MATLAB应用之愚见(重庆大学研究生总结,很精彩~~)

MATLAB应用之愚见(重庆大学研究生总结,很精彩~~)

2009-6-22 13:40 t T#1

本人只是蜻蜓点水般接触过matlab,隐隐约约感受到matlab强大而邪恶的力量。在做同样蜻蜓点水般的科研工作时,发现matlab还真能派上用场。下面分享一下本人的一些简单经验。

1. 矩阵运算及“计算器”

对于一个复杂的计算,matlab可以方便实现。比windows自带的计算器要强大,我经常将matlab打开作为简单的“计算工具”,杀鸡用牛刀了O(∩_∩)O~。

关于矩阵运算,这本是matlab的立足法宝。特征向量、特征值、逆矩阵、行列式等均可轻易求出。其中在机械工程方面,应用最为多的便是求解系统动力学方程。刚度矩阵、质量矩阵等,使用matlab求解位移响应正是不二选择。因此,在掌握机械系统动力学基础知识的基础上,原则上可以对任何机械系统构建数学模型,利用matlab求解其动态响应。当然有些系统需要做出简化。

有关矩阵运算,还可应用于系统的固有特性计算。利用振型叠加法等通过matlab可计算系统的固有频率等参数。

2. 绘图功能

Matlab可以对数据进行插值或拟合处理,其中专门提供了曲线拟合工具箱,可以实现不同函数不同类型的数据拟合。估计很多人仍然在使用excel进行数据处理及出图操作,在此我并不否认excel的强大功能,但采用matlab可以显著提高图形可读性及自定义性。

一般matlab的图形格式为.fig,当然可以另存为论文需要的eps格式或tif格式。在此不推荐使用jpg

格式。附上一段国外期刊有关论文用图片要求的话:

Preparation of Electronic Figures for Publication: Although low quality images are adequate for review purposes, print publication requires high quality images to prevent the final product being blurred or fuzzy. Submit EPS (lineart) or TIFF (halftone/photographs) files only. MS PowerPoint and Word Graphics are unsuitable for printed pictures. Do not use pixel-oriented programmes. Scans (TIFF only) should have a resolution of 300 dpi (halftone) or 600 to 1200 dpi (line drawings) in relation to the reproduction size (see below). Please submit the data for figures in black and white or submit a colourwork agreement form. EPS files should be saved with fonts embedded (and with a TIFF preview if possible).

For scanned images, the scanning resolution (at final image size) should be as follows to ensure good reproduction: lineart: >600 dpi; half-tones (including gel photographs): >300 dpi; figures containing both halftone and line images: >600 dpi.

Further information can be obtained at Blackwell Publishing\'s guidelines for figures: https://www.wendangku.net/doc/ff4067452.html,/bauthor/illustration.asp

常用的产生二维图形的命令有plot、plotyy(可以产生两个纵坐标)、ezplot(隐函数作图),三维命令有plot3、surf、mesh等,以及上述命令引申出来的surfl等命令。Contour用来产生等高线,非常适合用于绘制发动机万有特性图。此外还有quiver、slice等命令。具体可在命令区输入help keywords来了解函数详细用法。

图形绘制出来以后,如果要拉伸成论文中要求的尺寸,坐标轴等可能会发生变形,可以配合visio或photoshop等软件对图片坐标轴重新加工,以使其清晰。

关于matlab生成的彩色图片在论文中显示的清晰度问题,请参考拙作

https://www.wendangku.net/doc/ff4067452.html,/topic_show.php?tid=578733

下图是在matlab中生成的并通过visio修正其坐标轴的图片示例。(因附件格式限制,原tif格式已转换为

报告道具

3. matlab的帮助文件一定要利用起来。里面有基本涵盖matlab应用所有方面的例子。比如说FFT,自己冥思苦想的程序实现起来并不如demo中提供的寥寥数句程序好使。又比如里面的差分方程的求解实例无疑对数值分析课程的实践起到有效的借鉴意义。

4. 优化

优化所遇到的数学问题一般可以概括成求解极值问题。Matlab提供了不同问题类型的极值求解方法及命令。当中我认为最常用的是有约束的非线性规划问题求解函数fmincon。实验室曾有师兄通过引入模糊理论采用matlab优化工具箱,以齿轮箱体积最小化为优化目标来选取各级传动比等变量,取得了成功。

附上网友关于fmincon函数的讨论

https://www.wendangku.net/doc/ff4067452.html,/forum/thread-51586-1-1.html

命令格式:

[x,fval,exitflag,output,lambda,grad,hessian] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

如matlab帮助文档中所述,fmincon命令使用的算法对于大规模优化问题和中等问题是有所区分的:Large-Scale Optimization

The large-scale algorithm is a subspace trust region method and is based on the interior-reflective Newton method described in [1] and [2]. Each iteration involves the approximate solution of a large linear system using the method of preconditioned conjugate gradients (PCG)..

Medium-Scale Optimization

fmincon uses a sequential quadratic programming (SQP) method. In this method, the function solves a quadratic programming (QP) subproblem at each iteration. An estimate of the Hessian of the Lagrangian is updated at each iteration using the BFGS formula. A line search is performed The QP subproblem is solved using an active set strategy.

这里试图回答三个问题:

1.什么Large-Scale Optimization,什么是Medium-Scale Optimization?

2.fimcon提供的subspace trust region和sequential quadratic programming方法原理?

3.BFGS公式和线性搜索是什么?

问题1

所谓大规模问题指的是出现在工程,化学等领域中有大量优化变量的问题。由于自变量的维数很高,这样的问题是被分解成多个低维子问题来求解的。Medium-Scale优化问题实际上是matlab自己提出和大规模问题对应的一个概念,就是通常一般的优化算法,如牛顿法,最速下降法之类的处理优化变量不是很多的问题。

问题2

对于大规模问题,fmincon采用了subspace trust region优化算法。这种算法是把目标函数在点x的邻域泰勒展开(x可以认为是人为提供的初始猜测),这个展开的邻域就是所谓的trust region,泰勒展开进行到二阶项为止:

Q(x) = 1/2* +

这时目标函数在某一个局部的特性就可以“看出来了”。在这样的一个邻域里,我们求一个新的点x1,使得目标函数值减小,这个问题相比于原来的问题要简单。然而实际上对于存在非常大规模优化变量的问题,直接对这个子问题的求解仍然是不可忍受的。

同时我们注意到,由于泰勒展开要进行的第二项,这就要求我们能够提供一阶导计算的函数。如果我们不能提供一阶导表达式,二阶导(Hessian矩阵)matlab是无法计算的。所以我们使用fmincon命令而不给一阶导表达式,fmincon会放弃使用大规模算法。

如前所述,原问题转化后的直接求解仍然是无法忍受的,通过进一步近似subspace trust region将这个问题局限在trust region的二维子空间内求解。

序列二次规划方法是将一个带有等式和不等式约束(可以是非线性)的非线性优化问题转化为二次规划问题求解,二次规划问题类似公式(1)形式。具体转化过程可以参考:

https://www.wendangku.net/doc/ff4067452.html,/~adpadu/talks/sqp1.pdf

问题3

对于medium-scale问题,求解二次规划问题涉及到Hessian矩阵。Hessian矩阵的近似计算是通过拟牛顿法得到的,拟牛顿法提供了两个公式可用于Hessian矩阵(或其逆)的迭代:BFGS公式和DFP公式),而初始的Hessian矩阵是任意给的,如给一个单位阵I。

BFGS公式如下:

H(k+1) = H(k) + / - /

总结:

fmincon运行首先检查有无梯度表达提供,如有则选则大规模算法(subspace trust region),由此涉及到Hessian阵的近似计算,由于已提供了梯度的公式,则Hessian阵可以直接通过有限差分计算。但是如果用户直接提供了Hessian计算公式,则直接计算。

如果没有梯度表达式提供,fmincon选则SQP算法,算法中Hessian阵可以通过BFGS迭代,初始Hessian 阵任给。注意BFGS公式中q项是需要计算目标函数梯度得到的。所以Hessian矩阵的近似计算是需要用到有限差分法。

其余函数有fminsearch、fminbnd等函数,具体请查看帮助手册。

5. simulink仿真应用

SIMULINK是一个用来对动态系统进行建模、仿真和分析的软件包,它支持连续、离散及两者混合的线性和非线性系统,也支持具有多种采样频率的系统。在SIMULINK环境中,利用鼠标就可以在模型窗口中直观地“画”出系统模型,然后直接进行仿真。它为用户提供了方框图进行建模的图形接口,采用这种结构画模型就像你用手和纸来画一样容易。它与传统的仿真软件包微分方程和差分方程建模相比,具有更直观、方便、灵活的优点。

多多阅读国内外文献,会总结出这样一条道理:论文中一般会选取数学解析解、有限元或运动动力学仿真解、以及试验结果中的两个或三个进行对比来说明论文结论的有效性。因此simulink作为强大的仿真工具,已经构成了论文写作的左膀右臂,如同有限元软件和动力学仿真软件ADAMS。用simulink不仅可以构建数学模型进行求解,而且可以和有限元软件或adams等运动动力学仿真软件进行联合仿真,以利用simulink 实现对某事物行为的控制过程。曾有同学采用simulink构造PID控制器与adams联合仿真完成了对齿轮箱振动的主动控制,试验结果显示其控制效果非常明显。

本人正要进行车辆动力传动系统加速性能的simulink仿真以评价不同传动系统参数设置的好坏,在此方面,还要多向各位仿真高手请教。

附上一篇simulink仿真的例子:

https://www.wendangku.net/doc/ff4067452.html,/herry_jelly/ ... 7d03f2af5133d6.html

6. 信号处理

有关状态设备监测及故障诊断以及信号处理方面,真人师兄是当之无愧的高手。Matlab可以实现频谱分析,含功率谱分析,相关性分析,加窗操作等。更复杂的小波分析也可以通过matlab来实现。此处本人系外行,还请各路高手前来补充。只是使用过简单的时频转换。在此推荐一个帖子:FFT结果的物理意义https://www.wendangku.net/doc/ff4067452.html,/topic_show.php?tid=568700

7. 上述所窥只是matlab的冰山一角。其它如图像处理、混合编程、GUI设计等内容远超越本人理解能力范围,在此不做叙述,还请高手前来指点。越接触matlab越发现它的能力越大,也越没信心学好它。然虽如此,随着不断的操作和尝试,自身对matlab的驾驭总会越加娴熟。希望朋友们能跨进matlab之门,领了matlab在科研工作中体现出的无穷魅力

tT #6

~~

天外飞仙

sqj1199 tT #15

鲤鱼

发短消息 加为好友 sqj1199 当前离线 UID 66046

帖子

884

精华

阅读权限 50 来自

江苏徐州 在线时间 5 小时

注册时间

2006-9-28

最后登录 2010-4-14

经 验 值 884

美 味 虾 11

注册日期

2006-9-28

最近登陆

2010-4-14

来自 江苏徐州

状态

不知道楼主 是否知道在描点画图时 如果点非常多,再标注时,就会显得标注点很多,应该怎么解决这个问题 报告 道具 认真做事,低调做人!!!

huaijuliu

tT #16

东方圣城

sqj1199

鲤鱼

发短消息

加为好友

sqj1199 当前离线

UID

66046

帖子

884

精华

阅读权限

50

来自

江苏徐州

在线时间

5 小时

注册时间

2006-9-28

最后登录

2010-4-14

经验值 884

美味虾 11

注册日期

2006-9-28

最近登陆

2010-4-14

来自江苏徐州

状态

2009-7-10 11:49

tT #17

huaijuliu wrote:

请问楼上想要标注什么呢?是不是线的类型??

比如下面的图形--,

由于是描点画图,如果用星型标注,就会因为标注点太多而

看不清

怎么样设置才可以用几个点将其走势标注出来就可以了

110.jpg (64.5 KB) 下载次数:160 最后编辑时间:

1970-1-1 08:00

报告道具

认真做事,低调做人!!!

huaijuliu tT #18

清晰的嘛

状态

sqj1199

鲤鱼

发短消息

加为好友

sqj1199 当前离线

UID

66046

帖子

884

精华

阅读权限

50

来自

江苏徐州

在线时间

5 小时

注册时间

2006-9-28

最后登录

2010-4-14

经验值 884

美味虾 11

注册日期

2006-9-28

最近登陆

2010-4-14

来自江苏徐州

状态

2009-7-11 13:31

tT #19

huaijuliu wrote:

你可以少取一些数据啊或者换个线形不可以吗看上图还挺

清晰的嘛

试过你说的方法,不过好像不行

报告道具

认真做事,低调做人!!!

相关文档
相关文档 最新文档