1、v 命令文件包括两部分:注释文件和程序文件%RANK Number of linearly independent rows or columns.% K = RANK(X) is the number of singular values of X% that are larger than MAX(SIZE(X) * NORM(X) * EPS.% K = RANK(X,tol) is the number of singular values of X that% are larger than tol.% Copyright (c) 1984-94 by The MathWorks,
2、Inc.s = svd(x);if (nargin = 1) tol = max(size(x) * max(s) * eps;endr = sum(s tol);(2).matlab内置函数文件 matlab自定义的函数文件称内置函数文件 调用内置函数的方法:使用函数名并给出相应的入口、出口参数即可。 例如:sin.m函数用type sin查不到。 调用格式:y=sin(2*x) 实际应用中: x=0:2*pi/180:2*pi; y=sin(2*x) plot(x,y)函数m文件的格式: function 返回变量=函数名(输入变量) 注释说明语句段 程序语句段特定规则:1. 函数m文件第
3、一行必须以单词function作为引导词,必须遵循如下形式: function =()2. m文件的文件名必须是 .m。3. 程序中的变量均为局部变量,不保存在工作空间中。 其变量只在函数运行期间有效二、微分方程一般微分方程式描述系统内部变量的变化率如何受系统内部变量和外部激励,如输入,的影响。当常微分方程式能够解析求解时,可用MATLAB的符号工具箱中的功能找到精确解。在本书的后面将介绍该工具箱的一些特点。在微分方程难以获得解析解的情况下,可以方便地在数值上求解。为了说明起见,考虑描述振荡器的经典的范得波(Var der Pol)微分方程。与所有的数值求解微分方程组的方法一样,高阶微分方程式
4、必须等价地变换成一阶微分方程组。对于上述微分方程,通过重新定义两个新的变量,来实现这种变换。令y1=x 且 y2=dy/dx则 dy1/dt=y2根据这个微分方程组,可用MATLAB的函数ode23和ode45求出系统随时间变化的运动情况。调用这些函数时,需要编写一个函数M文件,给定当前时间及y1和y2的当前值,该函数返回上述导数值。MATLAB中,这些导数由一个列向量给出。在本例中,这个列向量为yprime。同样,y1和y2合并写成列向量y。所得函数M文件是:function yprime=vdpol(t , y);% VDPOL(t , y) returns derivatives of
5、the Van der Pol equation:% % x -mu *(1-x 2)*x +x=0 ( = d/dx , = d2/dx2)% let y(1)=x and y(2)=x% then y(1) = y(2)% y(2) = MU*(1-y(1)2)*y(2)-y(1)global MU % choose 0MUglobal MU % define MU as a global variable in the Command WorkspaceMU=2; % set global parameter to desired valuet , y=ode23( vdpol , 0
6、, 30 , 1 ; 0); % to=0 , tf=30 , yo=1 ; 0y1=y( : , 1); % first column is y(1) versus time points in ty2=y( : , 2); % second column is y(2)plot(t , y1 , t , y2 , - )xlabel( Time , Second ) , ylabel( Y(1) and Y(2) )title( Van der Pol Solution for mu=2 )当mu=2时的范得波方程的运动曲线第二章 流程控制与绘图一、流程控制1. For 循环 For循环允
7、许一组命令以固定的和预定的次数重复。For循环的一般形式是: for x = array commands end在for和end语句之间的commands按数组中的每一列执行一次。在每一次迭代中,x被指定为数组的下一列,即在第n次循环中,x=array(:, n)。例如, for n=1:10 x(n)=sin(n*pi/10); end x x = Columns 1 through 7 0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 Columns 8 through 10 0.5878 0.3090 0.0000 换句话,第一语句是说:
8、对n等于1到10,求所有语句的值,直至下一个end语句。第一次通过For循环n=1,第二次,n=2,如此继续,直至n=10。在n=10以后,For循环结束,然后求end语句后面的任何命令值,在这种情况下显示所计算的x的元素。 For循环的其它重要方面是: 1. For循环不能用For循环内重新赋值循环变量n来终止。 n=10; 2. 语句1 :10 是一个标准的MATLAB数组创建语句。在For循环内接受任何有效的MATLAB数组。 data=3 9 45 6; 7 16 -1 5 data = 3 9 45 6 7 16 -1 5 for n=data x=n(1)-n(2) end x =
9、 -4 -7 46 1 3. For循环可按需要嵌套。 for n=1:5 for m=5:-1:1 A(n,m)=n2+m2; end disp(n) 2 3 4 5 A A = 2 5 10 17 26 5 8 13 20 29 10 13 18 25 34 17 20 25 32 41 26 29 34 41 50 4. 当有一个等效的数组方法来解给定的问题时,应避免用For循环。例如,上面的第一个例子可被重写为 n=1:10; x=sin(n*pi/10)两种方法得出同样的结果,而后者执行更快,更直观,要求较少的输入。 5. 为了得到最大的速度,在For循环(While循环)被执行之前
10、,应预先分配数组。例如,前面所考虑的第一种情况,在For循环内每执行一次命令,变量x的大小增加1。迫使MATLAB每通过一次循环要花费时间对x分配更多的内存。为了消去这个步骤,For循环的例子应重写为x=zeros(1,10); % preallocated memory for x x(n)=sin(n*pi/10);现在,只有x(n)的值需要改变。2. While 循环 与For循环以固定次数求一组命令的值相反,While 循环以不定的次数求一组语句的值。While循环的一般形式是: while expression commands只要在表达式里的所有元素为真,就执行while和end
11、语句之间的commands。通常,表达式的求值给出一个标量值,但数组值也同样有效。在数组情况下,所得到数组的所有元素必须都为真。考虑下列例子: num=0;EPS=1; while (1+EPS) EPS=EPS/2; num=num+1; num num = 53 EPS=2*EPS EPS = 2.2204e-016 这个例子表明了计算特殊MATLAB值eps的一种方法,它是一个可加到1,而使结果以有限精度大于1的最小数值。这里我们用大写EPS,因此MATLAB的eps的值不会被覆盖掉。在这个例子里,EPS以1开始。只要(1+EPS)1为真(非零),就一直求While循环内的命令值。由于EPS不断地被2除,EPS逐渐变小以致于EPS+1不大于1。(记住,发生这种情况是因为计算机使用固定数的数值来表示数。MATLAB用16位,因此,我们只能期望EPS接近10-16。) 在这一点上,(1+EPS)1是假(零),于是While循环结束。最后,EPS与2相乘,因为最后除2使EPS太小。3. IF-ELSE-END 结构 很多情况下,命令的序列必须根据关系的检验有条件地执行。在编程语言里,这种逻辑由某种If-E
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1