




已阅读5页,还剩52页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
matlab r2014a 基础教程matlab r2014a 快易行(上)前 言matlab与mathematica、maple并称为“3m”,是数学界中三大著名软件,这些软件在数据运算处理上十分强大,备受科研工作者的青睐。同时,matlab与origin也是常见的绘图工具,matlab侧重于图像的计算,origin侧重于图像的表达。另外,在仿真模拟方面,matlab与syness、comsol等在该领域内被大家所推崇。由此可见,matlab是一款功能强大、应用丰富且被广泛认可的科研工具,熟练掌握它有助于提高我们的科研质量。在此之前,我做过关于origin 9.0的“快易行”基础教程,思路是先把握软件的大体脉络,再根据自己的需求学习到边边角角。可是,matlab却不能这样学,为什么呢?解压后的matlab r2014a有8.78g之大,而origin 9.0只有663m,所以即使我们第一步只学主线,也会耗费巨大的时间与精力。同时,学习跨度的增加很容易致使前面学了、后面忘了的尴尬局面,最后导致效果打折,如同古代打战时,切忌粮草供应线过长。所以,在这款软件的学习上,希望大家能够有一条明确的思路,你要用matlab做什么,那我们就学什么,想多学点不是坏事,但猴子摘玉米的故事也是一个警钟。好了,基于此思路,我们暂时就以matlab解决实际问题,计算微分方程并绘制相应图像为例,一步一步地进行学习。这是以前写的一段话,这里同样受用:长话短说,学一款软件有两种方法,一种是拿着“从入门到精通”这类的书慢慢啃,啃完了就精通了,但除了高数我一点一点地啃完,其它的都没成功过。另一种是先入门,几分钟或者个把小时内学会主线,剩下的再慢慢来,没必要全都会,根据自己的需求再学。所以当时就想到了“快易行”这个概念:快速、容易、行得通。讲重点,好上手,实用,复杂点的部分自己再慢慢来,这是本文的宗旨,也希望能达到这样的效果。其实网络上的资源很多,我做的只是一个筛选和加工的工作,找了许多材料,把好的挑出来,呈现给大家那些看一遍就懂的教程,用自己的话整合这些资源。红色是重点,大家阅读的时候请留意一下。下面提到的文本、书籍及视频均来源于网络,仅用于学习与交流,严禁用于其它用途,大家可以自行搜索,如果没找到,请联系我,新浪微博:4麦儿。matlab r2014a 基础教程1matlab r2014a 快易行(上)1前 言1一、基本介绍5二、学习思路5三、基本操作61、认识界面与基本计算62、m文件与常见指令83、变量与赋值104、向量及矩阵的运算134.1 向量的运算134.2 矩阵的运算155、符号变量与微积分165.1 符号变量165.2 极限185.3 求导195.4 求积分205.5 级数求和245.6 泰勒级数展开255.7 微分方程与微分方程组的解256、数据可视化266.1 二维绘图266.2 三维绘图387、图像处理418、多项式419、循环42一、基本介绍在这里,我用的软件是r2014a中文版,首先让我们对matlab有一个结构式的了解,在大的方面,matlab可以分为matlab、simulink以及stateflow三个板块,其中后两者适用于模拟仿真,以后再讲。matlab这部分主要是符号计算、绘图、编程以及它丰富的工具箱(toolbox)功能。然后,然后就介绍完啦。看了很多本书的介绍,好像谁也没怎么说清楚,那就这样吧。自己曾经有过经验,学了一个东西很长时间,却一直只知其一面,不知其千面。大家先有一个总的结构式了解,这样方便我们在后来错综复杂的功能中找到属于自己适合的路径:出门请左拐搜索“matlb有什么用”,顺便,把门关好。二、学习思路接触过数学建模的人基本上都知道有“猎狗追兔”这么个问题,那么我们就以此题为一个学习线索,路线是:学习基本操作-运算编程-绘图。至于对于整个matlab的学习思路,在人民邮电出版社出版的matlab从入门到精通一书中有过介绍,好长的一条主线,可以了解下。另外民间大神总结的学习思路,大家上网找一下,也会搜索到很多,反正在学习的这段时间内,没事网上看看相关花边新闻也是很有用处的。“猎狗追兔”问题有很多种版本,这里取一种:如下图所示,有一只猎狗在b点位置,发现了一只兔子在正东北方距离它250m的地方o处,此时兔子开始以8m/s的速度正向正西北方向,距离为150m的洞口a全速跑去。假设猎狗在追赶兔子的时候,始终朝着兔子的方向全速奔跑。请回答下面的问题:(1)猎狗能追上兔子的最小速度是多少?(2)在猎狗能追上兔子的情况下,猎狗跑过的路程是少?(3)假设猎狗在追赶过程中,当猎狗与兔子之间的距离为30m时,兔子由于害怕导致奔跑速度每秒减半,而狗却由于兴奋奔跑速度每秒增加0.1倍,在这种情况下回答前面两个问题。题目暂且就先放在这里,接下来我们就开始matlab r2014a的基础教程学习。三、基本操作这部分,基本的函数和编程是主要的学习内容。这里提一点,如果你有点编程基础,编程部分扫一扫就行。ok,说了那么多,那我们开始吧。1、认识界面与基本计算首先,打开界面(至于软件哪里下,嘿嘿):1是菜单栏与工具栏,和其它软件的功能差不多;2是当前文件夹,可以在这选取需要的文档;3是工作区,显示细节;4是命令行窗口,这是我们主要的工作区间。页面中各选项的详细功能,一方面同其它软件并没有太大区别,另一方面我们结合着例题来讲。图3.1 matlab主界面每个软件都有自己的输入语言,就是你想让软件做什么,那么你得先对软件做点什么。比如qq里的操作,打开qq就点企鹅,聊天就打字,享受特权就充值,红钻、黄钻、绿钻、紫钻但我们一开始就知道matlab不是一款平民化的软件,虽然它很亲民,所以我们在真正进入这扇大门内之前,先要有一定的基础知识,那就是学习matlab的语言,指导软件按照自己的想法操作进行。因为软件是m开头,所以一般大家称为m语言(不是微软公司的那个,那个好像没什么消息了),这里先举n个例子:1|、在命令行窗口中输入1+1(看见这个符号没,就在这后面,输入法改成英文,这里的运算符号应为半角),然后回车就得到下面的图了,ans即answer的意思,这是最简单的计算,你可以理解为我们常用的计算器(这里介绍个小贴士,在按下回车运行完程序后,再输入“clc”回车,看看有什么效果。哈哈,这个以后会经常用到,也可以在命令行窗口的右上角的倒三角中选择“清空命令行窗口”);2、接下来看看加减乘除幂,分别为+、-、*、/、,两个都是除号,一个是左除,一个是右除,比如63,可以写成6/3,也可以写成36,看看下面的例子25-8(3+1)4,自己动手试试;3、接着我们看看正弦余弦函数,注意这里的角度要化为弧度,sin30应该写成sin(30*pi/180),这里pi指代,看图中的例子tan45+sin60;4、最后说一下sqrt(x)和exp(x)这两种算法,其实它们叫做函数更准确,意思分别指对x开方与自然常数e的指数函数,如下:图3.2 基本运算例子至此,我们学会了matlab最基础的加减乘除幂等运算,多练练手,就熟悉了。其它的运算法则这里就不特别介绍了,碰上了我再讲讲,大家若需要,可以网上搜其使用方法。2、m文件与常见指令正在操作的你可能会遇见下面的一个问题,按下回车键后,我们是不能修改我们已经输入过的式子,大家可能认为输错了就直接“clc”,但以后我们写的程序不说成千上万,十几句、几十句是有的,学过二级的都应该有体会,中间一步错了,难道都得推倒重来吗?大家可以试试下面的例子:a=1,b=a+1,那么b=2。在第二张图里,即使没按回车键,我们依然不能修改a=2这个手误。所以在这里,我们要学会另一项重要的技能,那就是m文件。呼呼,百度一下,好多,我挑个简单点的给大家讲讲。工欲善其事,必先利其器,所以,关于m语言的学习我们先停一下。图3.3 错误示例所谓m文件,就是用matlab语言编写的、可以在matlab中运行的程序。它是以普通文本格式存放的,故可以用任何文本编辑软件进行编辑。matlab提供的m文件编辑器就是程序编辑器。m文件有两种形式,一种称为命令文件(script file),另一种称为函数文件(function file),两种文件的扩展名都是m,这个咱先不用区分,我们现在先只用script file,即脚本文件。挑明了,咱在命令行窗口写东西不能随意修改,那咱就在别的可以修改的位置写,这位置可以在其它软件上,当然matlab也自行提供了相应的编辑功能,写完后导入到小m中运行,不行再回去改呗。那么我们来看看,如何使用m文件。新建:主页-新建脚本,这时会出现一个标题为“untitled”的编辑器页面,我们可以在这个窗口书写我们的命令,接着在工具栏里面找到“运行”,此时软件会提示你先保存,你就重新命个名再保存,接下来就可以运行了。当然运行这部分是在命令行窗进行的,如果发现什么不对,可以马上回编辑器里面修改,然后再继续运行。上面的例子,大家都可试着用这种方式操作。图4.4 m文件说明每个软件都会有自己常用的一些命令,熟练地掌握这些命令能大大提高我们的工作质量,所以在这里说明一下matlab中常用的几个命令:clc:clear all:close allhelp+doc+3、变量与赋值好了,我们继续来学习m语言,这次看看最基础的变量与赋值。我们知道,如果只是单纯地进行数值计算,其实小m在我们手中和一个计算器也没什么差别,所以,我们要学点更高级的,这里就从变量与赋值入手。什么是变量,这里注意它有两个属性,变量名与变量值,你定义一个变量名,比如a,“a”是一个变量名字,但它的意思肯定不是作字母a来使用,我们要将一些数值赋予它,比如a=3,那么这个过程就是对变量的赋值,3也就成为了a的变量值,然后我们接着赋值a=5,a此时就不是3而是5。就像一个饮料瓶,你可以向里面装可乐,也可以装雪碧,但一次只能装一种,想装什么的时候就赋值去吧。当然,这只是最基础的赋值,不过其它的赋值道理也一样。这里提一下,变量名的取法有一定的规则:(1)变量名对大小写敏感;(2)变量名的第一个字符必须为英文字母,其长度不能超过31个字符;(3)变量名可以包含下连字符、数字,但不能包含空格符、标点;(4)变量名不能使用matlab系统预定义的变量,例如ans、inf(无限大)、i、j(虚数单位)等。文中提到的部分资料我会汇成一个文件,私信新浪微博:4麦儿,就可以了。这里大家可以自己试着做些操作,因为比较容易理解,就不一一截图了:1、 a=3+42、 a=1; b=a+1这里注意一点,就是“;”这个分号,我们书写换行时,一般都是要打上一个。下面是我找的一张matlab中标点符号的一览表,大家需要时就瞅瞅。图4.5 matlab标点符号一览表上面是简单的字母赋值,我们知道matlab这个名字是由matrix和laboratory(矩阵实验室)组成的,所以再高级一点的我们就要学习向量(数组)以及矩阵的定义了,其实向量感觉上就是一维矩阵。我们先做个最简单的例子,定义一个1 2 3 4 5这个向量,有两种写法:x=1,2,3,4,5或者是x=1 2 3 4 5,其实就是一个用逗号一个空格,推荐用逗号,以后熟练了再按自己的偏好。这个是行向量,那列向量呢?还是两种方法,我们知道一般换行后要用到分号,所以列向量应该是x=1;2;3;4;5,或者是x=1 2 3 4 5这里为了方便,用空格代表换行键,所以很明显,第一种方法较简单。然而事实是,当我们学习过转置矩阵后,x=1,2,3,4,5这个是不是觉得很nice啊。这里介绍的方法称为直接输入法,其实对于特殊(虽然特殊,但很常见)的向量,我们还有其它的定义法,但根据本文的宗旨,不要一次学太杂,由简到难的学习,所以这里只能先卖个关子,该它上场的时候就会出现了。说了向量,其实就是一维矩阵,那我们定义矩阵就很容易了。矩阵是一个m行n列的元素矩形列阵,其中的元素可以是数字、符号或者是数学式,举个例子x=1,2,3;4,5,6;7,8,9,这里还是注意一下逗号和分号,他们的用法同上,同样逗号也可以用空格代替,下面是截图。有的人可能要问了,为什么最后一个没打“;”,这是因为我们按照顺序先有“”,写完所有的才盖上“”,当只有半个“”时,不加;换行是允许的。 下面介绍几个特殊的矩阵,ones矩阵,ones(n)是全1方阵,one(m,n)是mn的全1矩阵,同理zeros也是一样的。当然,除了0和1,大家千万不要弄出什么twos之类的,别调皮,我试过,不行。最后介绍一个单位矩阵eye(n),因为是单位矩阵,所以就是方阵啦,见下图。好啦,至此,我相信大家应该基本上学会了怎么定义变量、向量以及矩阵了,下一节我们来学习一下向量与矩阵的运算,在草稿上你会运算它们吗?会的话,告诉你,在m上运算更加简单。4、向量及矩阵的运算4.1 向量的运算下面是几个常见的向量运算公式,其实都是一些熟悉的面孔。函数名称说 明a+ba加ba-ba减ba.*ba乘ba./ba左除ba.ba右除ba.na的n方sqrt(a)a的平方length(a)显示向量a的长度表3.4.1 向量的常见函数式子中a、b分别为某个向量,如a=1,2,3,4,5,b=6,7,8,9,10,我这里举个例子,其它的大家请自行操刀解牛: a=1,2,3,4,5; b=6,7,8,9,10; a.*bans = 6 14 24 36 50其实说白了,就是向量中对应元素的加减乘除,当然两个向量维度必须一致,不然,不然就不公平啊。此刻,各位看官是否注意到一点,是的,你注意的是非常重要的一点,在m中,运算向量的乘除幂时,需要在运算符之前加个小点,为什么呢,这里说明一下:图3.4.1 错误说明我们分析一下,软件提示“内部矩阵维度必须一致”,也就是说我们这里不管是向量(说白了就是一维行矩阵或列矩阵)还是矩阵,软件都按照矩阵的算法进行计算,那么a*b这种属于矩阵的算法明显就不适用于向量的乘法(应该是mn与np这种类型),所以为了方便向量的这类运算,软件就开了个绿色通道,自制了一种运算符号,点乘。4.2 矩阵的运算讲完了向量,再来看看矩阵,公式有很多,但都很容易上手,挑自己要用的,用多了就熟练了。这里列一个表,方便大家理解。函数名称说 明a+ba加ba-ba减bc*b常数c乘ba*ba乘bana的n方size(a)显示矩阵a的维度a(i,j)显示矩阵第i行第j列的元素a(i,:)显示矩阵第i行的所有元素a(:,j)显示矩阵第j列的所有元素rot90(a,k)矩阵a逆时针转置k个90fliplr(a)左右翻转矩阵flipud(a)上下翻转矩阵inv(a)逆矩阵pinv(a)伪逆矩阵det(a)方阵行列式的值rank(a)矩阵的秩trace(a)矩阵的迹eig(a)矩阵的特征值v,d=eig(a)矩阵的特征值与特征向量表3.4.2 矩阵的常见函数除此之外,还有诸如指数运算、对数运算以及n多矩阵分解的等等等等,以后碰见再说吧,反正现在学了不用很快也就忘了,先记牢几个基础的吧。至此,我想大家应该学会了向量与矩阵几种常见计算,其实相比手算,已经简单了许多,只要勤加练习就能熟练掌握。5、符号变量与微积分对于微积分,我想大家都不会陌生,那年大一学高数,一个人默默地坐在最后一排,望着黑板哼、哼,这里先结构上说一下我们这一讲的内容,如下:1、符号变量;2、求极限;3、求导数;4、求积分;5、解微分方程。好像就这么多吧,忘了,大概基本上就是全部的了,不是你打我。5.1 符号变量好,我们开工。那么第一个问题来了,微积分里面要先设定变量x和y等等,那是不是与上面的x=1的写法相同呢?答案是否定的,我们这里的变量,你无法一开始就知道x是多少,所以这里需要换一种写法:sym、syms。这里面涉及到数值运算与符号运算的区别,有兴趣的可以自己了解一下。看看符号变量的定义函数:1、sym(x):一次定义一个符号变量;2、syms a b c:一次可以定义多个。下面举几个简单例子:1、 sym(x)2、 sym(x); y=x.2+5(大家擦亮眼睛看看,这里有一个点,为什么呢?是时候该给大家说一说另外两种定义向量的方法了)这里用数组代替向量更生动、贴切一些。我们之前讲过几种向量的定义方法,下面我们来看看另外两种方法:(1)冒号生成法:x=2,4,6,8,10,这里写成x=2:2:10,2和10分别代表最大值与最小值,2是间距。x=2:10,这种写法里省去了间距,软件默认为1,如下图;(2)线性等分法:x=2,4,6,8,10,也可以写成linspace(2,10,5),这里的2和10分别指的是最小值与最大值,5则是指将2到10均分成5个数字,见下图。图3.4.2 冒号生成法与线性等分法说到这,我们提一下为什么要定义数组呢?原来啊,我们在研究函数时,一般都会确定一个定义域,像上面的y=x2+5,我们一般会设定一个定义域,比如2,10,这样我们就可以按照上面的几种方法设定了。既然定义域是数组,那么在写程序时,就要记得要加点哦!3、 syms a b c; f=sym(a+b+c)这里有多种写法,如: syms f a b c; f=a+b+c syms a b c; f=a+b+c写法很多,大家根据习惯来哈。5.2 极限符号变量的定义我们以后会经常遇到,在后面的例题中不断地去体会它。现在我们开始学习极限的写法,这个比较简单,就只有几个公式:1、limx0f(x):limit(f)。这里软件默认函数f对x求其x趋向于0的极限;2、limxaf(x):limit(f,x,a)、limit(f,a)。还是默认对x;3、limx+fx:limit(f,x,+inf)。对x趋向无穷求极限,负无穷为-inf;4、limxa-f(x):limit(f,x,a,left)。这里的x不能省,but i dont know why;5、limxa+f(x):limit(f,x,a,right)。同上。下面是几个例子:图3.4.3 求极限我相信,有人会问,咦,这里没有用点除啊,怎么也能出结果。想一想,聪明的一休哥我们知道定义符号变量后,如果它是数组,那么就得加点,如果它不是数组,是向量呢?目前我们没有在定义后接着写x=-1:1,所以软件并不知道它是什么,因此这里加不加点都可以。但一般情况下,对于函数,我们知道它的定义域是个数组,所以建议还是加个点。5.3 求导关于极限的写法我们已经学完了,按照思路,现在到了求导了,还是只有几个公式:1、diff(f):f对默认变量x求一阶导;2、diff(f,t):f对给定变量t求一阶导;3、diff(f,n):f对默认变量x求n阶导;4、diff(f,t,n):f对给定变量t求n阶导。下面是两个例子: 图3.4.4 求导数上面的例子虽然求了n阶偏导,但是求导的变量没有变,下面来看一个例子:z=x3y4,求d2zdxdy: syms x y z; z=x3*y4; diff(diff(z,x),y)(这里,其实就是一个嵌套连用)求导这部分基本上也就没什么了,下面再看看求积分,当年积分比求导难几个档次,不过,在m中,差距就几秒钟。5.4 求积分求积分有解析解(符号解)和数值解这两种方法,下面就一一道来。解析解获得的解是一些严格的数值、符号、公式之类的,结果精度高;数值解得到的答案是一个接近真实结果的数值。这样说不好懂,上个例子:x2=3,x=就是一个解析解,而x=1.732则是数值解。在实际情况下,有时并不能得到准确的解析解,这时就会采用数值解。下面是符号解的基本写法:1、int(f):f对默认变量求积分;2、int(f,t):f对给定变量t求积分;3、int(f,a,b):f对默认变量在数值区间a,b上求积分;4、int(f,t,a,b):f对给定变量t在数值区间a,b上求积分;5、int(f,m,n):f对默认变量在符号区间m,n上求积分;6、int(f,t,m,n):f对给定变量t在符号区间m,n上求积分;7、int(int(f):二重积分,也是一个嵌套结构。下面看两个例子:数值解的写法是这个式子:integral(f,a,b):其中f是函数句柄,a与b为积分范围。什么是函数句柄,以前没听过啊,这里bing一下:f(x)=x2:f=(x)(x.2)。其中(x)(x.2)就是匿名函数,第一个括号里面是自变量,第二个括号里面是表达式,是函数指针,f=(x)(x.2)表示将匿名函数(x)(x.2)赋值给f,于是f就表示该函数。所以,f(2)=2.2=4,f(1:3)=1:3.2=1 4 9等等。注意这里的点乘。定义匿名函数时也可以调用别的匿名函数,比如: f1=(x,y)(x.2+y.2);(定义了函数x2+y2) f2=(t)(f1(t,2)(定义了函数t2+4)那么函数句柄有什么特别的用处呢?网上找了下,两个,一个是提高运行速度,另一个是使用可以与变量一样方便,这个,额,以后慢慢体会吧。我们还是来看例子吧,就三个例子,对应三种情况:1、 /此处应该有误。 f=(x)3*x.2+1; integral(f,0,1)ans = 2呼呼,依葫芦画瓢就成。2、 (这里说明一下,就是分别求x+1、2x+1.5x+1的积分啦) f=(x)(1:5)*x+1; integral(f,0,1,arrayvalued,true)(这个位置可能没看明白,这里用到了integral(f,a,b,name,value)这种写法,有兴趣大家可以了解一下)ans = 1.5000 2.0000 2.5000 3.0000 3.50003、多重积分二重积分:integral2(f,xmin,xmax,ymin,ymax)三重积分:integral3(f,xmin,xmax,yxin,ymax,zmin,zmax)再来个例子,我们关于积分的部分就学完啦: f=(x,y,z)x+y+z; integral3(f,0,1,0,1,0,1)ans = 1.5000最后说了例子: f=(x)x+y; integral(f,0,1)结果却提示错误,说明integral不能对特定变量求积分,这只是我的猜测。原因可能如前面所说的这是数值解,上例得到的结果含有参数,与本意不合,哈哈,纯属自己瞎蒙的。5.5 级数求和级数理论是分析学的一个分支,它与另一个分支微积分学一起作为基础知识和工具出现在其余各分支中。二者共同以极限为基本工具,分别从离散与连续两个方面,结合起来研究分析学的对象,即变量之间的依赖关系函数。(摘自搜狗百科)所以这里插个队,说一下级数求和的两个公式:1、symsum(expr,var):expr是级数的表达通式,var是自变量,求和值默认为symsum(var+1)-symsum(var);2、symsum(expr,var,a,b): a、b是var的取值范围,求和值就为symsum(b)-symsum(a)。长话短说,两个例子就能说明问题:1、i=1ni sym(i); symsum(i)ans =i2/2 - i/22、x=110x2 sym(x); y=x/2; symsum(y,x,1,10)ans =55/25.6 微分方程与微分方程组的解在高数里面,微分方程的求解根据其自身的形式不同分好几种,每个都有特定的步骤,不算很方便。在matlab中,只用掌握两个个函数dsolve与ode即可,运行help dsolve和help ode先看看说明。和求积分一样,dsolve是求解析解,ode是求数值解,不过ode学起来是真的有点麻烦啊,还是先瞅瞅简单点的:1、s=dsolve(eqn):eqn为方程等式,结果为通解;2、s=dsolve(eqn,cond):cond为边界条件,结果为特定解。这里要先提一下eqn的两种写法,一个例子说明下:y=xy syms y(x);(注意这里的定义写法) y(x)=dsolve(diff(y,x)=x*y) syms y(x) x; y(x)=dsolve(dy=x*y,x)(dy是diff(y,x)的简写,且=变成=,dy=x*y可写成dy-x*y,y(x)可以定义为y,甚至可以省去不写,或者x、y不定义都行啊,写法太多,我有点眩晕)两个结果都为:y(x) = c4*exp(x2/2)说明一下,目前主流的写法是第二种,第一种很好理解,就是微分里面的格式,第二种格式为:dsolve(eqn1,eqn2,cond1,cond2,x):x为自变量,不能省,否则会出现一个参数t。下面看一下加入边界条件: syms y(x); y(x)=dsolve(diff(y,x)=x*y,y(0)=2) dsolve(dy=x*y,y(0)=2,x)(这个应该算最简形式了吧)答案为都2*exp(x2/2)。最后做个练习,了解一下多阶导的写法:y+4y+29y=0y(0)=0y(0)=15 y=dsolve(d2y+4*dy+29*y=0,y(0)=0,dy(0)=15,x); simplify(y)(软件对计算结果的化简其实很糟糕,所以有时加上这一句来对计算结果进行化简)y = 3*sin(5*x)*exp(-2*x)写法上的灵活有助于个体的个性化发展,所以,大家就慢慢培养自己的编程风格吧。学会了如何求单个微分方程,那么微分方程组就手到擒来了。x(t)=yy(t)=-x z=dsolve(dx=y,dy=-x,t) x=z.x(注意一下,求的是z,但最后要把z细分到x与y) y=z.yz = y: 1x1 sym x: 1x1 symx =c5*cos(t) + c4*sin(t)y =c4*cos(t) - c5*sin(t)说明一下,第一步这个还是原来的格式,只是多写几个方程。下面的z.x和z.y,这个网上不同的教程有不同的写法,比较推荐这种,原因大家可以网上搜一搜。ode是专门求微分方程数值解的函数,一共有ode23,ode45等七个葫芦娃兄弟,采用的是runge-kutta算法,大家可以了解一下这个算法。和积分求解一样,实际应用中的微分方程往往比较复杂且难以求出其解析解,于是这里就利用给出的条件,求出在一定精度内符合方程的一系列(x,y)值,绘出其曲线图或者算出一个满足精度的表达式。这里求解的微分方程分为一阶常微分方程与高阶常微分方程,高阶一般先化为一阶再进行运算。这里只对一阶常微分方程作讲解,大家若有更高需求可以网上搜索“matlab ode”或“matlab微分方程数值解”,资料有一些,不过不好看。我这里也有些资料,大家若需要也可以私信我,新浪微博:4麦儿。由于以上种种原因,这里只对ode23和ode45求一阶常微分方程作一些基础性的说明,大家注意了,这里的适用格式是y=f(x,y):1、x,y=ode23(odefun,xspan,y0,options):x为自变量,y为函数值,odefun是对应函数f,xspan是自变量区间,y0是x0对应的函数初始值,options为积分参数;2、x,y=ode45(odefun,xspan,y0,options):同上,区别是ode45的结果比ode23高一些。这里先说件事儿,是关于odefun的写法的。和以前的写法不一样,我们需要学习一下。我们前面讲过如何创建m文件,这里就是写一个m文件,下面是基本步骤:1、function y=myfunction(a,b)(a,b是输入变量,y是输出变量,y和myfunction自己定义名称)2、y=a+2*b(接下来写出y关于a、b的表达式)3、保存函数为fun1(文件名).m4、调用时如z=fun1(文件名)(1,2)注意文件名不能以数字开头。到这里,我们终于可以正式的学习ode函数了,看个例子:y=sinx+yy(0)=1(0x)function dy=fun1(x,y)dy=sin(x)+y保存文件为fun1.m x,y=ode45(fun1,0,2*pi,1);(回车后会出现一系列数值) plot(x,y)运算获得的点是近似值,绘得的曲线是近似曲线,根据曲线找到自己需要的结果,或是转换成一个精度内的表达式。再来看个例子:y=-y+x2+4y+1y(1)=1(1x4)function f=fun2(x,y)f=-y+x2+4*y+1保存文件为fun2.m x,y=ode23(fun2,1,4,1); plot(x,y)至此,我们对微分方程与微分方程组的学习已经结束了,东西很多,大家一点一点的来,勤做笔记。自己对matlab的学习也不深,只能在网上多找些材料,尽量按大家最容易理解的顺序,用较通俗的语言呈现给大家。文中难免会出现一些错误,望大家见谅,如果有什么建议与意见,可以私信我,谢谢。6、数据可视化终于,我们迎来了绘图的这一天,也算是我们当初定的目标的最后一站了,其实学matlab的时间不长,但就是这样慢慢地走来,我们对matlab已经有了一个大概,后面还会提到一点东西,学完了后面的路就是自己慢慢练习着摸索了。感慨的话说早了,我们还是快点进入这一部分吧。这一节大体上分为二个部分,分别是二维绘图、三维绘图,图像处理什么的在下一节。不知道大家有没有origin的使用经历,对比一下,matlab在这方面也是蛮腻害的。6.1 二维绘图在二维绘图函数里面,最基础的便是这plot函数了,我们的学习就从它开始吧。先来看一组关于plot函数的说明:1、plot(y):根据一组(n,y)的点绘制函数图像,n为1、2、3依次对应着不同y值的序号;2、plot(x,y):根据一组(x,y)的点绘制函数图像;3、plot(x,y,s):同上,s是控制图像线型、点标、颜色的字符串。如果没有设置s,线条则为黑色点线。下面讲解几个例子:1、y=x2(-5x5) x=-5:5; y=x.2;(点乘,注意) plot(y)(注意图像x的坐标,对比下一张图x的坐标)2、y=2e-0.5xcos(4x)(0x2) x=0:0.1:2*pi; y=2*exp(-0.5*x).*cos(4*pi*x); plot(x,y)3、x=tsin(3t)y=tsin(t)(0t2) t=0:0.1:2*pi;(注意参数方程的写法) x=t.*sin(3*t); y=t.*sin(t); plot(x,y)蛇精病一样的图到这里,我们已经学会了绘制单根曲线图了,那么如何在同一坐标上绘制多根曲线呢?现在就让我们来get这个技能吧。这个技能其实不难,但要分几个类,所以看起来稍微有点麻烦:1、输入参数为矩阵形式(1)x为1m型,y为nm型 x=1,2,3; y=1,2,3; 4,5,6; 7,8,9; 10,11,12; plot(x,y) 我们来分析一下这个例子,例中y中有4行,每行对应着x就会产生4组数据,结果如图所示,生成了4条颜色不同的曲线。(2)x为nm型,y为nm型 x=1,2,3; 4,5,6; 7,8,9; 10,11,12; y=3,2,1; 6,5,4; 9,8,7; 12,11,10; plot(x,y)看了这个例子,可能大家会有所疑惑,怎么只有3条曲线。这是因为在这种情况下,并不是以行对行来产生数据,而是x的三列数据分别对应y的三列产生三条曲线。(3)y为单个矩阵 y=1,2,3; 3,4,5; 7,8,9; 5,8,9; plot(y)其实这种情况同上面一样,也是按列来画线,只是此处的横坐标为每个y值的下标:1、2、32、输入参数为多个数组调用格式为plot(x1,y1,s1,x2,y2,s2,x3,y3,s3xn,yn,sn)。 x1=linspace(0,2*pi,100); x2=linspace(0,3*pi,100); x3=linspace(0,4*pi,100); y1=1+sin(x1); y2=2+sin(x2); y3=3+sin(x3); plot(x1,y1,x2,y2,x3,y3)3、双y轴图在同一坐标系内作多条曲线我们已经学会了,接下来我们自然地就会问,双y轴图应该怎样作呢?这里要引入一个函数plotyy(x1,y1,x2,y2),还是来看一个例子: x1=0:1:12; x2=0:2:24; x3=0:3:36; y1=x1+1; y2=2*x2+2; y3=3*x3+3; plotyy(x1,y1,x2,y2)我觉得肯定有几个脑洞大开的要问plotyyy可不可以,还有几个异想天开的想问plotxx呢,大家可以拿上面的例子试试。抱着怕被挑刺的态度,我去做了两个实验。实验证明,在这种模式下,plotyyy是不行的,但是,确实有plotyyy这个东西,网上搜索一下“plotyyy”,有相应的说明,这里就不多说了。plotxx也是一样的,需要另外的写法。4、叠图绘制叠图绘制并不是一种新的绘图函数,而是对绘图页面的一种保持和刷新。hold on/off,hold on是保留当前的绘图页面,随后再绘制的图像依然会出现在该页面上;hold off是刷新当前页面,再绘制的图像会显示在一个新的坐标系统之中。一个例子,看完就懂了: x=0:10; y1=x; y2=x.2; y3=x.3; plot(x,y1) hold on plot(x,y2) hold off plot(x,y3)这里一共绘制了3幅图,大家看一下依次画下来的变化:讲完了x和y,我们再来看看s这个东西怎么用。下面是plot(x,y,s)中关于s的一张说明表,后面举了几个例子,非常容易理解。这里提一下,如果不加入s参数,点与点是用直线相连,加了以后就是散点了。颜色、线型、点型一览表符号颜色符号样式符号样式y黄.点-.点划线m紫o圈/v向上/下三角形c青x叉向左/右三角形r红+十字p五角星g绿*星号h六角星b蓝-实线d方形w白-虚线s菱形k黑:点虚线y=x2(-5x5) x=-5:5; y=x.2; plot(x,y,r x=1,2,3,4; pie(x) x=0.1,0.2,0.3; pie(x)大家试一试这个例子,哈哈,所以数组中的数字之和不能小于1。(2)绘制三维饼图将pie(x)换为pie3(x)即可。(3)饼图的说明 x=1,2,3,4; pie(x,优秀,良好,中等,挂科)这是这个葫芦就是这个瓢,简单吧,同样适用于三维绘图。另一个说明就是:pie3(x,explode) x=1,2,3,4; explode=1,1,0,0; pie3(x,explode,优秀,良好,中等,挂科)这里explode的引入是为了单独突出某个选项,突出项不为0。讲了这么多,大家休息消化一下。后面还有几个函数,抄首小诗助助兴:下面,我们来看看对数坐标图的绘制:semilogx(x,y,s):半对数坐标,x轴为对数刻度semilogy(x,y,s):半对数坐标,y轴为对数刻度loglog(x,y,s):全对数坐标,xy轴均为对数刻度再下面是极坐标的说明:polar(theta,rho,s):theta为极角,rho为极径。一个例子就搞定:r=sin()cos() t=0:pi/50:2*pi; r=sin(t).*cos(t); polar(t,r)最后的最后,我们再来看看两个函数,再没有别的了:fplot(fun,limits,tol,linespec):fun是函数名,limits表示定义域区间,tol指相对误差,linespec同s一样。我们看下例子吧:y=cos(1/x)(-1x1) fplot(cos(1./x),-1,1)其实plot函数也能绘制这样的图,为什么会多出一个fplot函数呢?我们知道plot的绘图原理是根据一组点来连线绘制的,而fplot则不同,它是对函数本身的一种绘图,或者说它取的点更加精确,得到的线条更加平滑,不像plot那样有明显的折线痕迹。后来又见到过一个gplot,网上找了下,醉了。函数可以分为显函数和隐函数好吧,大家应该猜出来我要讲什么了,关于如何绘制隐函数,我们的大伊泽plot是个好东西。下面分别是显函数、隐函数和参数方程的命令格式:1、f=f(x):ezplot(f,xmin,xmax),xmin,xmax默认为-2,2;2、f(x,y)=0:ezplot(f,xmin,xmax,ymin,ymax),默认为-2,2;3、x=x(t),y=y(t):ezplot(x,y,tmin,tmax),默认为-2,2; ezplot(x.2,0,10) ezplot(x.2+y.2=9,-5,5) ezplot(t.2,t+1,0,10)都比较容易看懂。6.2 三维绘图和二维作图一样,三维作图中,最基础的函数就是plot3(x,y,z,s),它主要用于绘制三维曲线图。这个函数有两个格式,用法同上面一样:1、plot(x,y,z,s)2、plot(x1,y1,z1,s1,x2,y2,z2,s2,x3,y3,z3,s3)这里大家弄明白只要一个例子:x=sin(t)y=cos(t)z=t sin(t)cos(t)(0x20) t=0:pi/100:20*pi; x=sin(t); y=cos(t); z=t.*sin(t).*cos(t); plot3(x,y,z); title(line in 3-d space); xlabel(x); ylabel(y); zlabel(z); grid on后面是一些关于图像处理的指令,我们马上就会学到的,现在先放出3来来看看。看了曲线图,我们再来看看三维图形中的曲面图怎么画,还是两个函数:mesh(x,y,z,c):绘制三维网格图,c未定义时为点的颜色随z值高度变化而变化;surf(x,y,z,c):绘制三维曲面图,c同上。c怎么用?在讲解之前,我们先要了解x,y=meshgrid(x,y),这是一个网格采样点的函数,什么意思呢。我们知道曲面不同于曲线,它是由于x-y平面上各个点的z值不一致产生的凹凸结果,所以在确定z值之前,我们得先定义x-y平面内的每个点,这就会用到采样点函数,它是有别于直接t=1:2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度农产品网络营销推广服务协议
- 二零二五年度家具板材行业联盟合同
- 二零二五版汽车零部件运输委托合同书
- 二零二五年度清洁能源项目股权收购及运营管理合同
- 二零二五年度储罐清洗与除垢服务合同
- 2025版法人小额贷款借款合同范本
- 2025版临建工程综合管理服务合同
- 二零二五年度高端住宅买卖中介服务合同范本
- 2025版儿童用品全国销售合作框架协议书
- 二零二五年度环保设备生产委托合同范本
- 工程勘察服务成本要素信息(2022版)
- 校园突发事件与应急管理
- 多重耐药菌感染的预防与控制优秀课件
- 商铺销售基础知识培训.(太全了)
- SH/T 0316-1998石油密度计技术条件
- GA 1301-2016火灾原因认定规则
- 质量控制计划
- TTT培训师培训课件(-)
- 学校学生健康体检知识培训课件
- 常用分析质量控制图课件
- 医疗、预防、保健机构的拟聘用证明
评论
0/150
提交评论