控制系统与MATLAB的菜鸟教程(一)为打字方便,以下把MATLAB简称“小麦”偷得半日清闲,来写这个前几天承诺好的东西,如果不出意外,以后每周六就写这么一篇出来,周期不会短也不会太长,毕竟我也在慢慢的学东西,只能从基础的一点点写起,也算给自己的一个复习的机会了,我打算在后面先写一点控制理论的东西,然后用小麦做出来或举些其他的例子,然后留下一些简单问题让大家去做,再然后在下篇里给出解决的方法,很多问题和观点都是基于我个人对控制系统理论与MATLAB的理解,错误和不周是难免的,希望大家多多指正,一些好的,更有效率的实现方法也希望大家能提出来,我们共同提高,讲述风格么,还是轻松和口语化一些,一些术语当然是必须的,但我会尽量说的明白一些,目的让大家能迅速的熟悉小麦以及如何把他应用到我们控制系统的分析设计中去,闲话不多说了,现在开始吧!要从哪里开始呢,我觉得一上来就讲控制理论和小麦有点那个……还是先说一些关于小麦本身比较基本的东西和一些必须要注意的问题,目的是让那些刚刚接触小麦的朋友不至于对我们可爱的小麦产生恐惧,小麦对于学控制的人来讲,就像是手里笔和草纸,它可以帮助你完成一些复杂的计算,可以帮你作图,分析,但请记住,说到底,这个东西就是一个工具,它不能代替你思考,学它的目的是为了更好的研究我们学习的领域,因此不要为学软件而学软件,既然是工具,就必须学以至用。
小麦的最大好处是,编写程序简单得要死,在写算法的时候只需要按我们平常的书写公式的习惯和思考逻辑来写就可以了,而用其他语言,受到语法规则等的限制,对编程不熟悉的人估计会很快疯掉。
关于小麦的历史什么就不说了,强烈建议大家使用用比较新版本的小麦(现在最新的好像是r2007b),这样会给你处理问题带来方便(后面我会举例说明这个问题)。
当你打开小麦界面的时候,会看到有几个窗口,现在讲两个有用的,现在没用到以后再说,一个是command window,你可以在把一些计算啊,画图啊等等的命令一条一条的输入,然后求取结果,呵呵,比如现在我们来解决世界上最简单但最有争议的问题,在命令窗口里输入1+1然后按回车,你可以看到小麦对这个问题所给出的答案。
这里罗嗦一句,在命令窗口里输入命令的时候,可以不必每输入一条命令就按回车执行,可以把好几句话写完后一起运行,那么你想换行的时候,记得要按住“shift”再按回车,否则小麦就会执行上面你写下的所有语句。
(但有的书上写的是按住“ctrl”再回车,难道是我的电脑比较特殊??)第二个窗口叫current directory 这个窗口显示的是你当前路径里的东西(当前路径就是整个界面最上面编辑框里的那段地址路径),这东西有啥用呢,简单的讲就是,你可以直接调用这个当前路径里的文件。
举个例子:比如你可以在当前路径下(current directory窗口里)存放一张jpg格式的图片,名字叫“picture”,然后在命令窗口里直接敲入下面这段代码:复制内容到剪贴板代码:a=imread('picture','jpg');imshow(a);自己试试看能产生什么结果,这句话大家能知道大概是什么意思,就是显示一张图片,但如果你把当前路径改一下,再运行上面的代码,会出现一句鲜红的文字告诉你,兄弟,出错了,“File "picture1" does not exist.”。
呵呵,知道是什么意思了吧!!小麦有一个默认的当前路径,就是一打开小麦的时候上面那个编辑框里指定的路径,有一天我看着不爽,想把它改了,问了论坛里的几位猛人,得到了答案,可以这样做,右键点小麦的快捷方式—属性—快捷方式,在“起始位置”那个编辑框里写上你需要的默认当前路径就OK了,简单吧!要是一个不小心把以上介绍的这两个窗口关了该咋办呢?不要着急,点上面菜单栏里的desktop,在你需要的窗口或界面前面打勾它就出来了。
现在简单的介绍下小麦的文件系统,这里主要介绍一下“m文件”,其他文件以后用到再说,m文件的扩展名“.m”,m文件用来存放和小麦有关的程序代码。
按功能,m文件分两种,一种叫“脚本文件”,其实我也不知道具体的定义,意思就是说,你可以直接运行它得到一个结果,这个结果和你把里面的东西一行行的输入到命令窗口里再一起运行是一样的。
我们来举个例子:还是用上面说到的那个jpg图片,记得指定当前路径,然后我们在current directory窗口里右键新建一个m文件,起个名字叫“show_a_picture”双击之后先把里面写的所有东西都删掉(绿色的是注释,不起作用),输入前面写过的代码:复制内容到剪贴板代码:a=imread('picture','jpg');imshow(a);然后点菜单里的debug—save and run,看一下最后的结果,是不是和前面的一样呢。
第二种叫做“函数文件”,意思就是说你可以通过代码在m文件里定义一个函数,以便我们在需要的时候来调用它,关于自定义函数如果展开来讲,可以说上三天三夜,呵呵,这里简单的说一下,以便大家将来专门看这方面东西的时候会比较容易一些,书写函数的格式大致是这样的:第一行定义输入输出和函数名字复制内容到剪贴板代码:[y1,y2……yn]=fname(x1,x2……xn)所有的x和y都只是一个形式上的参数,是为了描述函数关系的方便,所以叫形参,如果只有一个输出那就不必加中括号了,fname是函数的名字,然后在下面写上这个函数里输入和输出的关系。
我们还是举个简单例子,定义一个峰值为2,宽度为1的矩形脉冲函数:在current directory窗口里新建一个m文件(按我说的做,呵呵),起个名字叫“f”,然后打开它,可以把里面的所有内容删掉:写如下代码:复制内容到剪贴板代码:function y=f(x)if (x>=0)&(x<=1);y=2;elsey=0;end这个函数我想大家能够大致看懂意思,可以在命令窗口中输入f(0.5)或f(2)来调用它,回车察看结果,可以去尝试一下。
关于m文件的命名有两点一定一定要注意,否则会出现一些难以察觉的错误:第一:在给m文件起名字的时候只能用小写字母或下划线,名字里绝对不能用中文或数字以及其他的符号。
第二:如果你的m文件是一个函数,那么文件名字要与你定义的函数名字(包含子函数的写主函数名)一样。
这两点要像公理一样牢牢的记在脑袋里,绝对不能忘记。
接下来的几篇我打算用写代码的方式来对控制系统进行分析与设计,关于强大的simulink会在后面介绍。
本篇的最后我们说一下小麦的帮助系统,一开始学接触小麦的人不喜欢用帮助系统,因为里面的说明都是英文,我觉得大家应该养成有问题去求助help系统的习惯,问题最好还是能自己解决,这样印象会比较深刻,不要碰到不懂的函数和问题就到论坛里问,帮助文件的英文描述语法还是比较简单的,个别词用词霸查一下,用于帮助系统的功能十分强大,我觉得一半以上的问题是可以自己解决的。
比如我们遇到一个陌生的函数,你想知道他是干嘛用的,可以在命令窗口中直接输入:复制内容到剪贴板代码:help (函数名字)然后回车,你会看到出现一些文字,这些东西会非常清楚的告诉你对这个函数的解释以及书写参数的格式,还有一种方式:在小麦界面的右下角有个“start”,这个按钮类似与windows界面里的“开始”,我们能通过它,选择我们在小麦里所有能用到的东西,点击“strat”—“help”,然后在search for 的编辑框里搜索你赶兴趣的东西。
OK!!今天先写到这里吧,罗里罗嗦写了一堆很基本的东西,没有深入的说一些运行机理,因为个人觉得作为小麦在控制系统里的应用,关于操作环境方面,了解和注意这些就足够了,一些关于文件怎么打开,怎么保存什么的和你用过的其他软件一样,这里就不多说了。
呵呵,(是不是应该放到基础版面里去)但还是保持前后的完整吧,不要着急,刚刚接触小麦的朋友,一开始要做的事情就是熟悉小麦,尽量和小麦搞好关系,看看界面,点点菜单,简单计算几个数字熟悉一下操作环境就可以了。
下一篇我还是不打算写控制方面的内容,而是想来个一锅端,把以后能用到的一些计算上的常用操作都介绍清楚,主要就是以下这些内容:数值计算,操作矩阵,符号运算,求解微分方程,分支,选择,循环语句等等。
从第三篇起,我们开始介绍小麦与经典控制理论。
控制系统与MATLAB的菜鸟教程(二)为打字方便,以下把MA TLAB简称“小麦”周六到鸟!!我爱周六!!泡上一杯茶,继续写这个东东……按上次说的,这篇来个一锅端,内容设涉及到数值计算,操作矩阵,符号运算,求解微分方程,基本的编程语句等。
所有例子的运行结果我就不给出答案了,可以自己运行一下,一些代码我在输入的时候难免马虎,望包涵,一些可以自行修改,一些可以提出来,我会尽快修正。
一些需要特别注意的问题我用粉红色的四号字标出,大家务必要记住这些内容。
另:最近本版块看的人很多,但留言的很少,这个……长期下去,我也不知道自己做的工作是好是坏,我不想单纯的为了增加回帖数设置回复限制,写的东西完全开放(上传资料除外)因为我和你们一样都还在学习中,但还是恳请各位回几个帖子,最好能提些意见,也算对我的鼓励或督促,谢谢各位!!!副送自己ps的一张美图给学控制的弟兄们,可以用来做桌面,哈哈,祝大家开心!![本帖最后由阿三于2007-12-12 22:51 编辑] 附件control.rar(165.81 KB)2007-12-12 11:31, 下载次数: 890 搜索更多相关主题的帖子: 控制系统教程matlab菜鸟如果该会员帮助了您,请给TA一个红心哦!红心可帮助TA换取书籍、礼品哦!引用报告评分回复TOP阿三阿三M学校:同进士出身帖子349积分745红心61 个财富602 麦片研究方向院校/公司工作性质Matlab版本在线时间748 小时∙个人空间∙发短消息∙加为好友∙当前离线2#大中小发表于2007-12-8 13:07 只看该作者我们还是按套路先从矩阵开始吧!先来定义一个3阶的矩阵:(这样的矩阵好像叫帕什么矩阵,知道的说一下哈)在小麦的命令窗口中输入如下代码就ok 了:复制内容到剪贴板代码:A=[1,1,1;1,2,3;1,3,6]这里,逗号也可以用空格代替,然后按回车看看会有什么结果继续,现在我想把这个帕什么矩阵的第二行取出来。
可以运行下面的代码:复制内容到剪贴板代码:a=A(2,:)注意,在小麦里,冒号有很多种含义,可以表示很多种运算的方式,这里可以简单的理解为:“全部元素”。
继续,现在我想取出这个矩阵的第三行第二列的元素也就是3,可以运行下面的代码,在输入“a”看结果:复制内容到剪贴板代码:a=A(3,2);继续,现在我要把若干个上面的矩阵拼在一起组成一个大的矩阵,定义的方式和定义数字矩阵的格式一样,只不过是刚才相应位置上的数字变成的矩阵的名字,可以运行下面的代码,看看有什么结果:复制内容到剪贴板代码:[A,A][A,A;A,A][本帖最后由阿三于2007-12-8 13:31 编辑]本帖最近评分记录∙liu_mc财富+1 2011-12-28 08:52∙jiwd_sh财富+1感谢分享!2011-9-4 11:31如果该会员帮助了您,请给TA一个红心哦!红心可帮助TA换取书籍、礼品哦!引用报告评分回复TOP阿三阿三M学校:同进士出3#大中小发表于2007-12-8 13:11 只看该作者现在来介绍生成一些特殊矩阵的生成方式:学线性代数的时候,我们最喜欢的矩阵是0矩阵和单位矩阵是吧!OK,先从他们俩开始先定义个单位矩阵,函数名是“eye()”运行下面的代码生成一个4阶单位矩阵:复制内容到剪贴板身帖子349积分745红心61 个财富602 麦片研究方向院校/公司工作性质Matlab版本在线时间748 小时∙个人空间∙发短消息∙加为好友∙当前离线代码:eye(4);生成0矩阵的函数是“zeros()”运行下面的代码生成一个3行4列的零矩阵:复制内容到剪贴板代码:a=zeros(3,4);注意,可能有的朋友会问:定义零矩阵有什么用呢?定义一个零矩阵在一些时候有着非常重要的作用,比如后面也许我们会说到,对于一些变量,我们一开始不知道它的个数,这个时候就需要我们为这些不知道的东西预先分配存储空间,然后得到一个就存进去一个,这种预先分配存储的空间的动作可以提高程序运行的效率,其实不光是小麦,这种思想也体现在其他的编程语言之中。