matlab中文手册-用matlab编程.pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《matlab中文手册-用matlab编程.pdf》由会员分享,可在线阅读,更多相关《matlab中文手册-用matlab编程.pdf(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、用MATLAB编程 用MATLAB编程 流控制流控制 MATLAB有几个流控制结构:if语句 switch语句 for循环 while循环 continue语句 break语句 脚本与函数脚本与函数 MATLAB是功能强大的程序设计语言和交互计算的环境。在MATLAB语言中,包含代码的文件称为M文件。用文本编辑器创建M文件,像使用其它的MATLAB函数或命令一样使用它们。在MATLAB中有两种M-文件:脚本:不需要在其中输入参数或返回输出结果。可以在工作空间运行数据。函数:需要给定输入参数和返回输出结果。函数文件内定义的变量仅在函数文件内部起作用。如果你是新的MATLAB程序员,只要将M文件创
2、建到欲试验的当前目录即可。随着你自己的M文件增多,你可以通过增加MATLAB的搜索路径,把它们放到其他的目录或个人的工具箱。若复制函数名称,MATLAB会执行在搜索路径中先出现的那个函数。查看一个M文件的内容,例如:myfunction.m,使用 type myfunction type myfunction 脚本脚本 当调用一个脚本时,MATLAB会简单地执行文件中找到的命令。脚本可以运行工作空间中存在的数据,或者脚本创建新数据来运行。虽然脚本不能返回输出变量,但是所有创建的变量将保留在工作空间中,供给后面的计算使用。另外,脚本能提供图形输出,就像使用plot函数一样。例如,创建一个叫mag
3、icrank.m的文件,它包含有MATLAB的命令。%Investigate the rank of magic squares r=zeros(1,32);Getting StartedGetting Started创作电影ifGetting StartedGetting Started结构体脚本Getting StartedGetting StartedPage 1 of 21Programming with MATLAB(Getting Started)2010-11-27file:/C:Documents and SettingsfutureLocal SettingsTemphh76
4、7F.htmfor n=3:32 r(n)=rank(magic(n);end r bar(r)输入语句 magicrank 让MATLAB执行这个命令。首先,计算出前30个魔方的秩,然后用柱状图输出结果。文件的命令执行完毕后,变量n和r保留在工作空间里。函数函数 函数是可以定义输入参数或返回输出变量的M文件。M文件和函数的名称必须一致。函数只执行自己工作空间内的变量,对于超越工作范围的变量,你要使用MATLAB命令提示符。rank是一个很好的例子。rank.m文件可以在toolbox/matlab/matfun目录里获得。toolbox/matlab/matfun 可用以下命令查看文件 ty
5、pe rank 以下是文件内容。function r=rank(A,tol)%RANK Matrix rank.%RANK(A)provides an estimate of the number of linearly%independent rows or columns of a matrix A.%RANK(A,tol)is the number of singular values of A 脚本与函数函数Getting StartedGetting StartedPage 2 of 21Programming with MATLAB(Getting Started)2010-11-
6、27file:/C:Documents and SettingsfutureLocal SettingsTemphh767F.htm%that are larger than tol.%RANK(A)uses the default tol=max(size(A)*norm(A)*eps.s=svd(A);if nargin=1 tol=max(size(A)*max(s)*eps;end r=sum(s tol);函数M-文件的第一行以关键字function开头。它给出函数名和变元的顺序。在此情况下,有最多两个输入变元和一个输出变元。下面的几行,到第一个空格或可执行,都是提供帮助文本的注释行
7、。输入以下语句则把这些行输出 help rank 帮助文件的第一行是H1行,当你用lookfor命令或在目录请求帮助时MATLAB会显示出。文件其余部分是定义函数的可执行MATLAB代码。类似第一行的变量r,A和tol,函数体中引入的变量s对于函数也是局部变量;它们在MATLAB工作空间里独立于任何变量。此例说明了MATLAB不同于其他程序语言的一个方面-一个可变的变元数目。有几种方法可以使用rank函数。rank(A)r=rank(A)r=rank(A,1.e-6)许多M-文件都这样工作。若无输出变元提供,结果保存于ans。若第二个输入变元未提供,则函数计算一个默认值。在函数体内,有两个名为
8、nargin和nargout的数量可用,它们告诉你在某特定应用中输入或输出的变元个数。rank函数用nargin,不用nargout。全局变量全局变量 如果你要多于一个函数共用一个简单的变量,简单的处理方法就是把这个变量在所有函数中定义为global全局变量。在命令行做同样的事情,如果你要工作空间访问上述变量。这个全局变量的定义必须出现在变量被应用于一个函数之前。虽然不是要求,但全局变量也最好以大写字母开头,这样可以同其他变量区别出来。举个例子,做一个以falling.m命名的M文件。function h=falling(t)global GRAVITY h=1/2*GRAVITY*t.2;然
9、后交互地输入语句 global GRAVITY GRAVITY=32;y=falling(0:.1:5);这两个变量在函数中表示同一个内容。之后你可以交互地修改GRVITY并获得新的解法,而不用再编辑文档。脚本全局变量Getting StartedGetting Started函数把字符串变元赋给函数Getting StartedGetting StartedPage 3 of 21Programming with MATLAB(Getting Started)2010-11-27file:/C:Documents and SettingsfutureLocal SettingsTemphh7
10、67F.htm把字符串变元赋给函数把字符串变元赋给函数 可以编写认可字符串变元的MATLAB函数,而无须用括号或引号。也就是说,MATLAB把 foo a b c 理解为 foo(a,b,c)然而,当用非引用形式时,MATLAB不能返回变元。例如,legend apples oranges 在一幅图创立一个图例并用字符串apples和oranges作为标签。若想legend命令返回它的输出变元,则必须用引号。legh,objh=legend(apples,oranges);此外,若有任何变元不是字符串时,你都不能用非引号形。用编码建立字符串变元用编码建立字符串变元 可以用引号形式在代码中建立字
11、符串变元。以下例子处理多个数据文件August1.dat,August2.dat,等等。它用函数int2str,该函数把整数变成字符来建立文件名。for d=1:31 s=August int2str(d).dat;load(s)%Code to process the contents of the d-th file end 一条值得注意的注释一条值得注意的注释 在无引号的句法使用上去颇方便的同时,它也可以在不导致MATLAB产生错误的情况下而被不正确的使用。例如,给出一个矩阵A,A=0-6-1 6 2-16-5 20 -10 用eig返回A的特征值。eig(A)ans=-3.0710 -
12、2.4645+17.6008i-2.4645-17.6008i 下面的语句是不允许的,因为A不是字符串,然而MATLAB不会产生错误。eig A ans=65 MATLAB实际上取出与字母A相等的ASCII码数值的特征值(是65)。全局变量eval函数Page 4 of 21Programming with MATLAB(Getting Started)2010-11-27file:/C:Documents and SettingsfutureLocal SettingsTemphh767F.htmeval函数eval函数 eval函数与文本变量一起实现有力的文本宏工具。语句 eval(s)用
13、MATLAB的注释器求表达式的值或执行包含于文本字符串s的语句。前一节的例子也可以在下面的代码中实现,虽然这有点低效率因为它用到完全注释器,而不只是函数调用。for d=1:31 s=load August int2str(d).dat;eval(s)%Process the contents of the d-th file end 向量化向量化 要想MATLAB最高速地工作,重要的是在M-文件中把算法向量化。其他程序语言可能用for或DO循环,MATLAB则可用向量或矩阵运算。下例是创立一个算法表。x=.01;for k=1:1001 y(k)=log10(x);x=x+.01;end 同
14、样代码地向量化翻译是 x=.01:.01:10;y=log10(x);对于更复杂的代码,矩阵化选项不总是那么明显的。当速度重要时,应该想法把算法向量化。预分配预分配 若一条代码不能向量化,你可以通过预分配任何输出结果已保存其中的向量或数组以加快for 循环。例如,这个代码用zeros函数把for循环产生的向量预分配。这使得for循环的执行显著加快。r=zeros(32,1);for n=1:32 r(n)=rank(magic(n);end 上例中若没有使用预分配,MATLAB的注释器利用每次循环扩大r向量。向量预分配排除了该步骤使执行加快。Getting StartedGetting Sta
15、rted把字符串变元赋给函数向量化Getting StartedGetting Startedeval函数预分配Getting StartedGetting StartedPage 5 of 21Programming with MATLAB(Getting Started)2010-11-27file:/C:Documents and SettingsfutureLocal SettingsTemphh767F.htm 函数的句柄函数的句柄 你可以创建任何MATLAB函数的句柄,然后用这些句柄作为函数链接的途径。函数句柄主要用来传递自变量列表给其他函数,用句柄执行函数或求值。在MATLAB中
16、,通过在函数名前加上符号构造函数句柄。下面例子为SIN函数创建一个函数句柄,然后赋值给变量fhandle:fhandle=sin;用MATLAB的fevel函数对函数句柄求值。下面的plot_fhandle函数接收一个函数句柄和数据,然后用feval函数对已经给定初使数据的函数句柄求值:function x=plot_fhandle(fhandle,data)plot(data,feval(fhandle,data)当你用SIN函数句柄调用plot_fhandle函数和后面的变量时,求值结果是正弦波形图象。plot_fhandle(sin,-pi:0.01:pi)函数的函数函数的函数 一种以标
17、量变量的非线性函数为变量的函数称为“函数的函数”,即以函数名为自变量的函数。这类函数包括:求零点 最优化 求积分 常微分方程 MATLAB通过M文件的函数表示该非线性函数。例如,下面是一个简化的humps函数,来源于matlab/demos路径。function y=humps(x)y=1./(x-.3).2+.01)+1./(x-.9).2+.04)-6;在区间0 x 1求此函数的值 x=0:.002:1;y=humps(x);然后作出图象 plot(x,y)向量化函数的句柄Getting StartedGetting Started预分配函数的函数Getting StartedGettin
18、g StartedPage 6 of 21Programming with MATLAB(Getting Started)2010-11-27file:/C:Documents and SettingsfutureLocal SettingsTemphh767F.htm 以上图象表明函数在x=0.6附近有局部最小值。用函数fminsearch可以求出局 部最小值,以及此时x的值。函数fminsearch第一个参数是(需要求出局部最小值的函数的)函数句柄,第二个是参数此时x的近似值。p=fminsearch(humps,.5)p=0.6370 要求出此局部最小值,则 humps(p)ans=11
19、.2528 数值分析家用求积分或积分法来区分定积分的近似值和常微分方程的数值积分。MATLAB的积分程序是quad和quadl。语句 Q=quadl(humps,0,1)计算图象曲线下方的面积得 Q=29.8583 最后,图象说明函数在这区间无零点。故若用下面语句找零点 z=fzero(humps,.5)只能找到区间外的零点。z=-0.1316 函数的句柄包含于MATLAB的程序示范Getting StartedGetting StartedPage 7 of 21Programming with MATLAB(Getting Started)2010-11-27file:/C:Documen
20、ts and SettingsfutureLocal SettingsTemphh767F.htmifif if语句计算逻辑表达式并当表达式为真时执行一组语句。可选的elseif和else关键字规定后面的各组语句是否执行。与if搭配的关键字end结束最后一组语句。所有语句都用这4个关键字描绘,且不必用括号。MATLAB的生成n阶魔方的算法有三种不同情形:n是奇数,n为偶数但不能被4整除,n能被4整除。用下列语句描述。if rem(n,2)=0 M=odd_magic(n)elseif rem(n,4)=0 M=single_even_magic(n)else M=double_even_mag
21、ic(n)end 在此例中,三种情形是互斥的,否则,就执行第一个真条件。重要的是,要明白有关的算子和if语句是如何对矩阵起作用的。当你想检查两个变量是否相等,你或许会用 if A=B,.这是合法的MATLAB代码,当A,B都是标量时执行如你所愿的任务。但当A,B是矩阵时,则A=B并不是测试它们是否相等,而是在哪些位置相等;这样,结果是另一个含有0和1的矩阵,表示元素与元素是否相等。事实上,若A和B不是同尺寸的矩阵,则A=B是错误语句。检查两变量的等同性的正确方法是用isequal函数,if isequal(A,B),.这里有另一个强调这点的例子。若A,B是标量,下面程序一定不会出现意料之外的情
22、形。但对于大多数矩阵对,包括有相互交换列的魔方,对所有元素,无论A B,A B greater elseif A eps*b x=(a+b)/2;fx=x3-2*x-5;if sign(fx)=sign(fa)a=x;fa=fx;else b=x;fb=fx;注意注意 与C语言的switch语句不同的是,MATLAB的switch是不会落空的。如果情形1是真,则其他语句不执行。因此,不需用break语句。ifforGetting StartedGetting Startedswitch和casewhileGetting StartedGetting StartedPage 9 of 21Pro
23、gramming with MATLAB(Getting Started)2010-11-27file:/C:Documents and SettingsfutureLocal SettingsTemphh767F.htm end end x 结果是多项式x3-2x-5的根,即 x=2.09455148154233 在if语句一节提到的有关矩阵比较的注意事项,对while语句也适用。continuecontinue continue语句把控制传给下一个在其中出现的if或while循环的迭代,忽略任何循环体中保留的语句。在嵌套循环中,continue把控制传给下一个for或while循环所嵌套的
24、迭代。下面的例子展示了一个在magic.m文件代码中的计算行数的continue循环,跳过所有空行和注释。continue语句用于前进到magic.m的下一行而不用在每次遇到空行或注释行时都增大。fid=fopen(magic.m,r);count=0;while feof(fid)line=fgetl(fid);if isempty(line)|strncmp(line,%,1)continue end count=count+1;end disp(sprintf(%d lines,count);breakbreak break语句让你提前从for或while语句中离开。在嵌套循环里,bre
25、ak只从最里面的循环离开。这是上节例子的改进。为何用break是好主意呢?a=0;fa=-Inf;b=3;fb=Inf;while b-a eps*b x=(a+b)/2;fx=x3-2*x-5;if fx=0 break elseif sign(fx)=sign(fa)a=x;fa=fx;else b=x;fb=fx;end end x forcontinueGetting StartedGetting StartedwhilebreakGetting StartedGetting StartedPage 10 of 21Programming with MATLAB(Getting Sta
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlab 中文 手册 编程
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内