版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
BMatlab使用方法简介Matlab的帮助功能非常强大,读者遇到不明白的命令或函数时,可以在命令窗口键入Help命令(或函数)或函数)helpwho.DemoMatlabwhowhos查看内存变量,clc清除命令窗口,clear清除内存.§B.1Matlab中矩阵的创建保存调用1×1的矩阵为标量,称一.Matlab时,最好把所有数据都当作矩阵来看待.中,下面介绍四种常用的产生一个矩阵的方法.§B.1.1手工录入手工录入方法如下:将每行的元素用空格或逗号分隔(;)来标明一行元素的结束用[]将前两步输入的元素列表括起来1我们可以输入如下三个命令>>A=[163213;510118;96712;415141]5,10,11,8;9,6,7,12;4,15,14,1];>>A=[163213;510118;96712;415141];.第三个命令是多行录入矩阵,当矩阵比较大时,明行输入.矩阵元素是表达式时,表达式中变量必须定义或为符号变量.§B.1.2由函数产生矩阵Matlab提供了一些产生特殊矩阵的函数,这里只使用几个常用的函数,更详细的介绍Matlab中自带帮助文件.特殊矩阵函数zeros(m,n)零矩阵ones(m,n)1的矩阵eye(m,n)单位矩阵rand(m,n)均匀分布的随机数矩阵magic(n)n维魔方阵randn(n)n维正态分布的随机数矩阵cell(m,n)空矩阵diag(M)linspace等间距的矢量logspace对数等分的行矢量2生成33零矩阵,使用命令如下(其中箭头代表回车,下面为运算结果).>>A=zeros(3,3)↙A=0 0 00 0 00 0
b a 0 0 0c b a 0 0 示例3生成三对角矩阵0 c b a 0.0 0 c b a 0 0 0 b a这里的abc我们都规定其为符号,不赋予具体数值,因此需要提前声明一下.另外需要构造包括一个元素值全为ba的一行四列矩阵以及一个元素值全为c.然后利用矩阵函数diag将构造好的几个单行矩阵分别放到主对角线上以及次对角上.命令如下:>>symsabc;↙>>v1=b*ones(1,5);↙>>v2=a*ones(1,4);↙>>v3=c*ones(1,4);↙>>A=diag(v1,0)+diag(v2,1)+diag(v3,-1)↙A=[b,a,0,0,0][c,b,a,0,0][0,c,b,a,0][0,0,c,b,a][0,0,0,c,b]Matlab中,可以使用冒号操作符来构建等差数据.这个操作符在构建数列和引用多个矩阵元素时有重要作用.4应用操作符(:)构建数列,输入命令>>1:-1:-5↙ans=1 0 -1 -2 -3 -4 -5§B.1.3使用矩阵编辑器编辑矩阵对于高阶矩阵,Matlab为方便用户查看与修改矩阵提供了矩阵编辑工具,其使用类似表格的图形界面.矩阵编辑器可针对某个变量进行编辑,因为在编辑前需要将矩阵赋值给一个变量,然后右击变量名并点击“OpenSelection”后便将出现编辑界面.如下图:§B.1.4矩阵行列的引用以及修改中可以使用非常简洁直观的语法来引用行向量与列向量,并且对它们进行修改.这是其它高级语言无法比拟的功能.矩阵中的元素引用有以下几种方式:A(i,j) 表示矩阵Aij列上的元素A(:,j) 表示矩阵Ajn行一列的矩阵A(i,:) 表示矩阵Ain列的矩阵A(:) 以一维数组的方式表示矩阵A[] 表示一个空矩阵0 2 2 4 示例5输入矩阵B=4 2 4 2 2 1 3 0列交换.命令如下:>>B=[022442422-130%首先输入矩阵B=022442422-130%提取第一行第三列的值ans2%抽取第二列,结果也是一个矩阵ans22-1%0B=022402420-130下面的命令将第三列与第四列交换,中间用到变量v_tmp3列的值.>>v_tmp=B(:,3);↙>>B(:,3)=B(:4);↙>>B(:,4)=v_tmp↙B=024202240-10366的矩阵BC.命令如下:>>C=B([1,3],[2,4])↙C=2 4-1 0这时再输入>>C(3,3)=3↙C=2 4 0-1 0 00 0 3矩阵C得到了扩充.继续输入>>C(2,:)=[]↙C=2 4 00 0 37拼接矩阵,如将二阶随机矩阵和二阶单位矩阵左右拼接,然后再和24对角矩阵进行上下拼接,命令如下:>>D=[rand(2),ones(2);eye(2,4)]↙D=0.95010.60681.00001.00000.23110.48601.00001.00001.000000001.0000008提取上(下)三角矩阵,命令如下:a=816357a=816357492>>b=tril(a)↙b=800350492ba0类似的函数还有矩阵结构变换函数L=tril(A)L主对角线及以下元素取矩阵A的元素L=tril(A,k)Lk条对角线及以下元素取矩阵A0U=triu(A)U主对角线及以上元素取矩阵A0U=triu(A,k)Uk条对角线及以上元素取矩阵A0B=rot90(A)矩阵A900BB=rot90(A,k)矩阵Ak×900得到BB=fliplr(A)矩阵A左右翻转得到BB=flipud(A)矩阵A上下翻转得到B应等于A的行列数之积.若A3×4m,n2,6等)§B.1.5矩阵的保存和调用.9保存矩阵A并调用.>>savemydata1A%系统将工作空间中的Amydata1.mat文件>>loadmydata1A%mydata1文件中A变量到工作空间savemydata2 mydata2.mat文件loadmydata2w mydata2w变量到工作空间中mydata是使用者给变量文件起的名子,系统会自动沿设定好的路径以“.mat”格式储存文件.§B.2Matlab的变量表达式和初等运算长度<=31分辨大小写注Matlab中有几个变量不能被clear清除,称永久变量,其他变量名最好不要与此同,即ans:当不指明某一语句的计算结果赋给哪个变量时,系统自动将该计算结果赋给ans;eps:计算机能产生的绝对值最小的浮点数;i,j:虚数单位,即-1的平方根;inf,Inf:正无穷大;nan,NaN0/0等运算;Pi:圆周率.变量名=表达式(表达式的运算结果都是一个矩阵)表达式Matlabans上面两种形式,当表达式由分号“;”结束时,变量结果不显示,当表达式由逗号“,”或换行号结束,则将结果显示出来.注如果表达式的值太复杂,一行写不下,可以加上三连点“…”回车,然后接下去再写.如:>>s=1-1/2+1/3-1/4+1/5-1/6+1/7…%注意三个点之前的空格>>-1/8+1/9-1/10+1/11-1/12;可将字符串当作数组或矩阵处理.Matlab中,字符串用单引号括起来,如:>>S=„UseMatlab‟S=UseMatlab注字符串存储在行向量中,每个元素对应一个字符,向量的值为字符对应的ASCII码值.§B2.5矩阵运算符A‟A的转置,如果A是复矩阵,则其运算结果是共轭转置;A+B:矩阵的加运算;A-B:矩阵的减运算;A*B:矩阵相乘,ABAB矩阵维数相容,维数不相容是不可乘的;X=B*A-1,称矩阵的右除;A*X=BX=A-1*B,称矩阵的左除;A^k:矩阵的乘方(1)A为方阵,k为正整数时,表示矩阵Ak次乘积;(2)k为负整数时,表示矩阵A的逆阵的k次乘积;(3)kk=n/mAk次,然后再对结果开k次方;(4)A,B均为矩阵时无意义;A.*BAB的对应元素直接相乘,A和B要有相同的维数;A.\B,A./B:矩阵的点除运算,表示矩阵A和B的对应元素直接相除,AB要有相同的维数;A.^B:矩阵的点乘方,表示要对其元素逐一进行幂运算.§B2.6关系运算符6种关系运算符,用于比较两个同维数的矩阵:<小于<=小于或等于>大于>=大于或等于 ==等于~=不等于关系运算符可以用于检查矩阵的元素是否满足某些条件.两个同维数的矩阵比较的结0,1矩阵,1表示结果为真,0表示结果为假.中,逻辑运算符有:逻辑与.10.|逻辑或. 有一个为非零时;结果为1,否则,结果为0..010.Xor逻辑异或.10.运算"&&"与"&","||"与"|"的区别如下:A&B(1)首先判断A的逻辑值,然后判断B的值,然后进行逻辑与的计算.(2)A和B可以为矩阵(e.g.A=[10],B=[00]).A&&BAA的值为假,就可以判断整个表达式的值为假,就不需要再判断B的值.(2)A和B不能是矩阵,只能是标量."|"与“||”同理.B的值.A是一个计算量较小的函数,B是一个计算量较大的函数,那么首先判断A对减少计算量是有好处的.另外这也可以防止类似被0除的错误,例如flag=denum~=0&&num/denum>10ifflagSomethingendifdenum0的情况.当然,如果你希望在判断的时候,对&或者|.Matlabifwhile语句中的逻辑与和逻辑或都是默认使用short-circuit形式.§B.3Matlab的常用函数§B.3.1关系逻辑函数3-1所示.x为向量时,只有所有元素均不等于零时,y10x为矩阵时,则函数命令只作用于列元素,即对同列元素进行判断.y=any(x)xy1y0x为矩阵时,则函数命令也只作用于列元素,即对同列元素进行判断.3-1关系逻辑函数函数名功 能all(A)判断A001any(A)判断A01isequal(A,B)判断A、B1isempty(A)判断A10isfinite(A)判断A1isinf(A)判断A1isnan(A)判断A的各元素值是否为NAN1isnumeric(A)判断数组A的元素是否全为数值型数组isreal(A)判断数组A1isprime(A)判断A1isspace(A)判断A1find(A)寻找A0元素的下标和值isletter检测字符串中每个字符时否属于英文字母isspace车,制表,换行符等)isstrprop检测字符每一个字符是否属于指定的范围§B.3.2字符串函数3-2字符串处理函数函数功能length(a)获取字符串长度d=strcat(a,c),每个字符串最右边的空格被裁切e=strvcat(a,b,m)连接多行字符串,每行长度可不等,自动把非最长字符串f=char(a,b,m)char连接,空字符串会被空格填满strcmpstrncmp比较两个字符串前n个字符是否相等,若是返回真,否则返回假strcmpistrncmpi比较两个字符串前n个字符是否相等,忽略字母大小写strrep进行字符串替换,区分大小写strfind(str,patten)pattern,返回出现位置,没有出现返回空数组findstr(str1,str2)str1str2置,没有出现返回空数组strmatch(patten,str)str最左侧部分一致strtok(str,char)strchar指定的字符串前的部分和之后的部分blanks(n)n个空格组成的字符串deblank(str)裁切字符串的尾部空格strtrim(str)lower(str)将字符串中的字母转换成小写upper(str)将字符串中的字母转换成大写sort(str)ASCII值对字符串排序num2str将数字转换为数字字符串str2num将数字字符串转换为数字mat2str将数组转换成字符串int2strstr2func从字符串对应的函数名创建一个函数句柄§B.3.3标量函数阵或数组的每一个元素,此功能将用来处理成批数据.建立行矩阵,标量函数作用于矢量的每一个元素.>>x=[1.4,2.5,3.6,4.7,5.8];↙>>y=sin(x)y=0.9854 0.5985 -0.4425 -0.9999 -0.46463-3基本函数库sin正弦cos余弦tan正切asin反正弦acos反余弦atan反正切atan2(x,y)4象限反正切sinh双曲正弦cosh双曲余弦tanh双曲正切acosh反双曲atanh反双曲asinh反双曲sec正割csc余割cot余切asec反正割acsc余割acot反余切sech双曲正割csch双曲余割coth双曲余切asech反双曲正割acsch反双曲余割acoth反双曲余切expe为底的对数log自然对数log22为底的对数log1010为底的对数pow22的幂sqrt方根nextpow22的幂mod(x,m)xm取正余数abs绝对值和复数模值angle相角real实部imag虚部conj共轭复数isreal是实数时为真round四舍五入为整数fix0舍入为整数floor向-∞舍入为整数ceil向∞舍入为整数sign符号函数rem(a,b)a整除b,求余数注未标出变元的为单输入函数>>disp(' x sin(x) cos(x) tan(x) cot(x)'), …↙x=[0:0.1:pi/4]';disp([x,sin(x),cos(x),tan(x),cot(x)])↙xsin(x)cos(x)tan(x)cot(x)001.00000Inf0.10000.09980.99500.1003 9.96660.20000.19870.98010.2027 4.93320.30000.29550.95530.3093 3.23270.40000.38940.92110.4228 2.36520.50000.47940.87760.5463 1.83050.60000.56460.82530.6841 1.46170.70000.64420.76480.8423 1.1872注汉字,第二句,五个列矢量组成一矩阵,无引号,显示该矩阵值.§B.3.4矢量函数.当然也可以作用于矩阵,矢量.3-4.矢量指令函数max最大值mean平均值min最小值median中值sum和prod乘积length长度sort从小到大排列输入命令>>x=rand(1,7),a=max(x),b=median(x),y=sort(x)↙x=0.7468 0.4451 0.9318 0.4660 0.4186 0.8462 0.5252a=0.9318 %最大值b=0.5252 %中值y=0.4186 0.4451 0.4660 0.5252 0.7468 0.8462 0.9318 %从小到大排列§B.3.5矩阵函数3-6分别列出常用矩阵函数和矩阵分解函数.3-5常用矩阵函数函数功能cond(A)求矩阵A的条件数det(A)求方阵A的行列式dot(A,B)矩阵AB的点积eig(A)方阵A的特征值和特征向量norm(A,1)矩阵A1—范数norm(A),norm(A,2)矩阵A2—范数funm(A,′fun′)一般的方阵函数norm(A,inf)矩阵A的无穷大范数norm(A,′fro′)矩阵AF—范数rank(A)矩阵A的秩rcond(A)矩阵A的倒条件数trace(A)矩阵A的迹expm(A)eA的值expm1(A)用PadeeA的值expm2(A)用求TayoreA的值expm3(A)eA(独立特征向量等于矩阵秩)logm(A)求矩阵A的对数sqrtm(A)求矩阵A的平方根矩阵分解函数函数功能cdf2rdf(V,D)复数对角形转换成实数块对角形chol(A)矩阵ACholesky分解eig(A)矩阵A的特征值分解hess(A)矩阵AHessenberg形式lu(A)矩阵ALU分解null(A)由奇异阵分解得出的矩阵A的零空间的标准正交基orth(A)矩阵A行相量的标准正交基pinv(A)求矩阵A的伪逆qr(A)矩阵AQR正交三角形分解qz(A)矩阵AQZ分解,用于广义特征值rref(A)将矩阵A转化为逐行递减的阶梯阵rsf2csf(V,D)实数块对角形转换成复数对角形schur(A)矩阵ASchur分解subspace(A,B)A、B张成的子空间的夹角svd(A)方阵A的奇异值分解13矩阵的三角分解>>a=rand(2)↙a=0.9501 0.60680.2311 0.4860>>[l,u]=lu(a)↙l=1.0000 00.2433 1.0000u=0.9501 0.60680 0.3384§B.4Matlab语句§B.4.1输入输出语句Matlab提供了一些输入和输出语句,允许用户和计算机之间进行数据交换.(一)INPUT输入函数input()函数来进行输入,它的调用格式为:A=input(提示信息,选项);matrixA=>')↙EntermatrixA=>[123;456;789]↙A=1 2 34 5 67 8 9如果在input()函数调用时采用了„s‟选项,则允许用户输入字符串.如:matrixA=>','s')↙EntermatrixA=>Matlab↙A=Matlab(二)DISP输出函数disp(函数,它的调用格式为:disp(A)其中A既可以为字符串,也可以为矩阵.(三)将数值转换成字符串输出int2str函数可以方便地将一个整形数据转换成字符串形式,该函数的调用格式为:int2str(i)如>>Inum=15;↙>>disp(['ThevalueofInumis'int2str(Inum),'!ok'])↙ThevalueofInumis15!ok§B.4.2循环语句while-end循环.(一)for循环语句for循环语句为计数循环语句.如果要反复执行的一组语句的循环次数是已知的或预定义的,就可以使用for循环语句.它的基本格式为:for循环变量=123循环语句组end.12可省略.如:S1=1;S2=0.1;S3=10;forI=S1:S2:S3X(I)=0end注(1)3的值<1Matlab不执行循环内的语句;for和end必须配对使用;forfor必须与一个end配对使用.如:m=3;n=4;fori=1:mforj=1:nA(i,j)=1/(i+j-1);endend(二)while循环语句while循环语句是条件循环语句,它的作用是在一定的逻辑条件控制下,不断地循环执行一条或一组语句,直到逻辑条件不再满足为止.适用于循环次数事先不知道的情况.它的基本格式为:while条件式循环语句组end则跳出循环,向下执行.1100的程序sum=0;i=1;whilei<=100sum=sum+i;i=i+1;end注(1)允许多级嵌套;while和end必须配对使用;for形循环和while形循环也允许相互嵌套.(三)条件控制语句1.if条件转移语句格式一:if条件式条件块语句组end格式二:if条件式1else2end格式三:if11elseif22else3……endbreak语句语句的作用一般是终止循环过程,退出循环体.if语句一起使用.例如,求满足从1开始一直累加到m使其和sum>10000的最小m. 则程序为sum=0;form=1:1000sum=sum+m;if sum>10000break;endenddisp(m)continue语句continue语句后,不再继续执行本次循环的后面内容,而是直接进入下一个循环过程.(四)switch分支语句if-elseif-elseif-…else结构相似.switch表达式case11case22……case表达式notherwise语句组endswitchcase后面的值casecase的值都不同,则执行otherwise下面的语句组.Otherwise语句可以省略,如果省略otherwise,所有case都不满足时跳出分支结构.end必须配对使用.例如,下面的程序可以生成一个三对角矩阵.m=10;n=10;fork=1:mforl=1:nabs(k-l)case0A(k,l)=1;case1A(k,l)=2;otherwiseA(k,l)=0;endendend§B.5Matlab的符号计算§B.5.1符号矩阵的创建与修改sym.(一)符号变量与符号表达式>>f=sym('sin(x)+5x')在这一语句中,fsin(x)+5x为符号标识,符号变量symsyms命令来确定.注(1)符号表达式一定要用''单引号括起来Matlab才能识别,''的内容可以是符号表达式,也可以是符号方程.例如,>>x=sym('x')>>f1=sym('a*x^2+b*x+c')>>f2=sym('a*x^2+b*x+c=0')>>f3=sym('Dy+y^2=1') %微分方程参与运算.syms命令用来建立多个符号量,一般调用格式为:syms12...n“symsxsyms“symxsymx=sym('x')或x=sym('x',’real’)等.(二)符号矩阵的创建sym创建矩阵(symbolic的缩写)命令格式:A=symsym指令定义,需用标识.例如:,2*b;3*a,0]')↙A=[a,2*b][3*a,0].注符号矩阵的每一行的两端都有方括号,这是与Matlab数值矩阵的一个重要区别.用字符串直接创建矩阵法,需保证同一列中各元素字符串有相同的长度. '[3*a,0]']↙A=[a,2*b][3*a,0]用程序创建矩阵n维符号向量xff的梯度.clear;clc;n=2;symsxreal;fori=1:nx(i)=sym(['x',num2str(i)]);endf=x(1)^3+x(2)^2-x(1)*x(2)+3*x(1)-5g=jacobian(f,x)将上述语句保存到test.m文件,并在命令窗口键入test↙,则有结果fx1^3+x2^2-x1*x2+3*x1-5g=[3*x1^2-x2+3, 2*x2-x1]M=3;N=3;fori=1:Mforj=1:NA(i,j)=sym(['a',num2str(i),num2str(j)]);endend>>A=↙[a11,a12,a13][a21,a22,a23][a31,a32,a33]符号矩阵的修改a.直接修改可用光标键找到所要修改的矩阵,直接修改.b.指令修改来修改.例如,,2*b;3*a,0]')↙↙A=[a,2*b][3*a,4*b]c.替换修改,'new','old')来修改.例如,>>A=subs(A,'c','b')↙A=[a,2*c][3*a,4*c]符号矩阵与数值矩阵的转换将数值矩阵转化为符号矩阵函数调用格式:sym(A).例如,>>A=[1/3,2.5;1/0.7,2/5]↙A=0.33332.50001.42860.4000>>B=sym(A)↙B=[1/3,5/2][10/7,2/5]evalA)例如,B=[1/3,5/2]2/5]>>eval(B)↙ans=[.3333,2.500][1.429,.4000]注类似的命令还有double,subs等,有些版本允许numeric.使用前通过help核对具体语法.§B.5.2符号计算(一)查找符号变量findsym(expr)按字母顺序列出符号表达式expr中的所有符号变量,findsym(expr,N)列出exprx最近的N个符号变量,若表达式中有两个符号变量与x的距离相等,码大者优先.,常量pi,i,j不作为符号变量.例如,>>f=sym('2*w-3*y+z^2+5*a');↙>>findsym(f)↙ans=a,w,y,z>>findsym(f,3)↙ans=y,w,z>>findsym(f,1)↙ans=y二)符号表达式的四则运算例如,>>f=sym('2*x^2+3*x-5');g=sym('x^2+x-7');↙>>h=f+g↙h=3*x^2+4*x-12>>f=sym('cos(x)');g=sym('sin(2*x)');↙>>f/g+f*g↙ans=cos(x)/sin(2*x)+cos(x)*sin(2*x)(三)计算极限格式为limit(f,x,a):f(x)当xa的极限limit(f,a):a时的极限limit(f):计算a=0时的极限limit(f,x,a,'right'):计算右极限limit(f,x,a,'left'):计算左极限例如,>>symsxhn;↙>>L=limit((log(x+h)-log(x))/h,h,0)↙L=1/x>>M=limit((1-x/n)^n,n,inf)↙M=exp(-x)(四)计算导数或偏导数格式为g=diff(f,v)fv的导数g=diff(f)f关于默认变量的导数g=diff(f,v,n)fvn阶导数例如,>>symsx;↙>>f=sin(x)+3*x^2;↙>>g=diff(f,x)↙g=cos(x)+6*x格式为R=ones(n,1)(w,v)wvJacobianw为符号单值函数表达式或符号列向量,v为一符号行向量.例如,>>symsxyzuvw;↙>>w=[x*y*z;y;x+z];↙>>v=[x,y,z];↙>>R=jacobian(w,v)↙R=[y*z,x*z,x*y][ 0, 1, 0][ 1, 0, 1]>>b=jacobian(x+u,v)↙b=[1,0,0](六)计算积分格式为int(f,v,a,b):f(v)a到bint(f,a,b):计算关于默认变量的定积分f(v)int(f):计算关于默认变量的不定积分例如,>>f=(x^2+1)/(x^2-2*x+2)^2;↙>>I=int(f,x)↙I=3/2*atan(x-1)+1/4*(2*x-6)/(x^2-2*x+2)>>K=int(exp(-x^2),x,0,inf)↙K=1/2*pi^(1/2)(七)其它常用的符号计算函数factor(f) f进行因式分解pretty(r) rexpand(s) scollect(s) collect(s,v) 按自变量v合并s的同类项simplify(f) 化简f[nd]=numden(s) 对s进行通分symsum(s) 对默认自变量的不定和symsum(s,v) 对自变量v的不定和symsum(s,a,b) ab的有限和taylor(f) 计算f在默认自变量等于0处5阶Taylor展开taylor(f,n,v) 展开taylor(f,n,v,a) 展开compose(f,g) 其中f=f(x),g=g(y)conj(X) 返回符号复数X的共轭复数real(Z) 返回符号复数z的实数部分imag(Z) 返回符号复数z的虚数部分simple(S) 该命令试图找出符号表达式S的代数上的简单形式,返回其中最短的一个.solve(eq) 输入参量eq可以是符号表达式或字符串.若eq是一符号表达式x^2-2*x-1,solve(eq)eqeq=0.horner(P) R.dsolve('eq1,eq2,…','cond1,cond2,…','v') 对给定的常微分方程(组)eq1,eq2,…中指定的cond1,cond2,….求符号解fourier(f) f中的缺省变量xFourier变换形式ifourier(F) 输出参量f=f(x)为缺省变量w的标量符号对象F的逆Fourier积分变换laplace(F) 输出参量L=L(s)为有缺省符号自变量t的标量符号对象F的Laplace变换ilaplace(L) 输出参量F=F(t)为缺省变量s的标量符号对象L的逆Laplace变换jordan(A) 计算矩阵A的Jordan标准形.其中A为一确切已知的符号或数值矩阵latex(S) §B.6Matlab的文件与函数的创建调用MatlabMatlab的命令窗口中逐条输入Matlabm文件.m文件与其他文本文件一样,可以在任何文本编辑器中进打编辑、存储、修改和读取..m.§B.6.1M命令文件.将的命令窗口输入m文件的文件名就可以了.mMab一般是Mabwork中)mpath重新设置路径.另外,mMatlab的内置函数名以及工具箱中的函数重名,以免发生执行错误命令的现象.Matlab对命令文件的执行等价于从命令窗口中顺序执行文件中的所有指令.命令文件Matlab工作空间里的任何变量及数据,命令文件运行过程中产生的所有变量都等工作空间中创建这些变量,因此,任何其他命令文件和函数都可以自由地访.这些变量一旦产生就一直保存在内存中,只有对它们重新赋值,它们的原有值把这些变量从工作空间中删去.Matlab的工作空间窗口中也可以用鼠标选择想要删除的变量,从而将这些变量从工作空间中删除.s中.M-文件.MatlabFileNewM-File,或者edit并回车,都会弹出编辑窗口..在编辑窗口内输入s=0;fork=1:100s=s+k;end.Untitled.mtest,点击“保存”按钮.M文件的调用.Matlab的主界面,在命令窗口输入如下两条命令>>test↙>>s↙5050§B.6.2M函数文件m函数文件是一个特殊的m文件,其格式为:function=函数名(输入变量列表)注释说明语句段函数体语句注(1)这里输入变量的个数以及输出变量的个数是由MATLAB本身提供的两个保留变量nargin和nargout来给出的,它们分别是Numberoffunctioninputarguments和Numberoffunctionoutputarguments输入变量要用逗号隔开,输出变量多于1用户可以借助于help命令显示其中的注释说明语句段.通过这样的方法就可以建立函数文件或者称m函数,其调用方法与Matlab函数的调用方法相同.function字符;命令文件无此要求..0个、1个或多个输入参数和返回值.[func.m,而命令文件无此要求.命令文件的变量在文件执行结束以后仍然保存在内存中而不会丢失,而函数文件的变量仅在函数运行期间有效(除非用global把变量说明成全局变量,否则函数文件中的变量均为局部变量),当函数运行完毕后,这些变量也就消失了.的其他子函数调用.一般函数的调用将该函数的每个语句执行完,达到该函数的结尾处后自动返回主程序,但编写程序时,我们可能遇到程序不能继续的特殊情况,这时,我们可以通过语句return使函数强制返回.例如,functiond=det(A)ifisempty(A)d=1;returnelse...end注调用函数时所用的输入输出变量名并不要求与编写函数文件时所用的输入输出变量名相同,但对应变量的类型要一致.下面通过Schimidt正交化程序来说明m文件的创建以及函数的调用. 在编辑窗口输入如下程序,并保存为Schimidt.functionQ=Schimidt(A)Schimidt正交化通用程序[mn]=size(A);Q=sym(zeros(m,n));forj=1:n以被正交化向量的个数为循环次数beta=sym(A(:,j));fori=1:(j-1)beta_j减去其在前面几列的向量上的投影beta=beta-beta'*Q(:,i)/(Q(:,i)'*Q(:,i))*Q(:,i);endQ(:,j)=beta/sqrt((beta'*beta)) 将正交化后的向量单位化end输入如下命令:>>A=[110;011;101]';Q=simplify(Schimidt(A));pretty(Q)↙Ans=2 6 32 6 3 2 6 3.2 6 3 0 6 30 3 §B.6.3其它创建函数的方法(一)内联函数Minline其格式为inline12,…)例如,可定义数值函数>>f=inline('x^2-3*x+4');>>f(3)ans=4或定义符号函数>>f=sym(inline('x^2-3*x+4'));>>g=diff(f)g=2*x-3内联(inline)MATLAB7inlineM文件,同时又可以像使用一般函数那样调用它.M成,并且只能返回一个变量.x找到,将会使用xg=inline('3')g=Inlinefunction:g(x)=3另外,内联函数inline(二)匿名函数(anonymousfunction)MATLAB7.0和内联函数类似,可以让用户编写简单的函数而不需要创建M文件,因此,匿名函数具有inlineC宏的功能更加强大,可以支持变量替换.fhandle=@(arglist)expression其中fhade(fuctinhandeCExpression>>f=@(x,y)x*x+y*yf=@(x,y)x*x+y*yinline>>f(3,4)ans=25匿名函数可以使用工作空间的变量,例如>>p=2;>>q=3;>>f=@(x,y)x^p+y^qf=@(x,y)x^p+y^q>>f(2,3)ans=31pqq2,则有q=2>>f(2,3)ans=31样的:>>q=2;>>f=@(x,y)x^p+y^qf=@(x,y)x^p+y^q>>f(2,3)ans=13MATLAB(三)函数句柄(@)类型以及可能存在的重载方法.引入函数句柄是为了使feval及借助于它的泛函指令工作更可靠,函数句柄的使用使得函数也可以成为输入变量,并且能很方便的调用,提高函数的fhandle=@function_filename注(1)函数句柄function_handle(@)是一种间接调用函数的方式.(2)语法格式为:handle=@functionname或handle=@(arglist)anonymous_function(functionhandle)是一种能够提供函数间接调用的matlabvalue.你可以通过传递句柄来调用各种其他功能.你也可以将句柄存储到数据结构中备用(例如HandleGraphic回调).句柄是matlab的标准数据类型之一.函数句柄的好处提高运行速度.因为matlab对函数的调用每次都是要搜索所有的路径,从set经常用到的话,使用函数句柄,对你的速度会有提高的.使用可以与变量一样方便.比如说,我再这个目录运行后,创建了本目录的一个而不需要把那个函数文件拷贝过来.因为你创建的functionhandles中,已经包含了路径.feval[y1,..,yn]=feval(F,x1,...,xn)xiyifoofunctionx=foo(a,b)x=a*b;mainfevalfoo,可以有以下几种方式:foo',3,15,feval%这里@foofunctionresult=main(f)result=feval(f,3,10);mainfoo'传入即可main(@foo);(四)syms或字符串创建函数symssubs>>Symsfx>>f=1/(1+x^2);>>subs(f,‘x’,代替x注对于在symssubs是,如果在syms后又被重新定义为其他类型,则必须加单引号,否则不可替换.>>subs(f,’x’,’y^2’)ans=1/(1+(y^2)^2)注该方法的缺点是,由于使用符号运算内核,运算速度会大大降低.subs>>f=’1/(1+x^2>>z=subs(f,’x’,2)>>g=subs(f,’x’,’y^2’)注优点是占用内存最少,定义格式方面自由.缺点是无法对字符进行符号转化.subs(f>>f=’x^2*y’;>>x=2;y=3;subs(f)ans=12§B.7Matlab绘图Matlab提供了一系列的绘图函数,用户不需要过多的考虑绘图的细节,只需要给出一些基本参数就能得到所需图形,这类函数称为高层绘图函数.§B.7.1二维绘图.可以采用不同的坐标系,如直角坐标、对数坐标、极坐标等.(一)绘制二维曲线的基本函数中,最基本而且应用最为广泛的绘图函数为plot. plot函数用于绘制二维平面上的直角坐标曲线图,要提供一组x坐标和对应的y坐标,可以绘制分别以x和y为横、纵坐标的二维曲线. plot函数的调用格式为plot(x,y)其中x,y为长度相同的向量,存储x坐标和y坐标. 例如,>>x=0:pi/100:2*pi;↙>>y=2*exp(-0.5*x).*sin(2*pi*x);↙>>plot(x,y)↙程序执行后,打开一个图形窗口,在其中绘制出相应函数曲线的图形(略).又如,>>t=-pi:pi/100:pi;↙>>x=t.*cos(3*t);↙>>y=t.*sin(t).*sin(t);↙>>plot(x,y)↙这是以参数形式给出的曲线方程,只要给定参数向量,再分别求出x,y向量即可输出曲线.程序执行后,打开一个图形窗口,在其中绘制出相应曲线(略).函数可以包含若干组向量对,每一组可以绘制出一条曲线.plot函数调用格式为:plot(x1,y1,x2,y2,…,xn,yn)例如,>>x=linspace(0,2*pi,100);↙>>plot(x,sin(x),x,2*sin(x),x,3*sin(x))↙x,y曲线条数等于矩阵的列数.>>x=linspace(0,2*pi,100);↙>>y1=sin(x);↙>>y2=2*sin(x);↙>>y3=3*sin(x);↙>>x=[x;x;x]';↙>>y=[y1;y2;y3]';↙>>plot(x,y,x,cos(x))↙x,y都是含有三列的矩阵,它们组成输入参数对,绘制三条曲线,xcos(x)又组成一对,绘制一条余弦曲线.plotplot函数将矩阵的每一列数据作为一条曲线绘制在窗体中.例如,>>A=pascal(5)↙A=1 1 1 1 11 2 3 4 51 3 6 10 151 4 10 20 351 5 15 35 70>>plot(A)线型颜色-实线b线型颜色-实线b蓝色. 点s方块:虚线g绿色o圆圈d菱形-.点划线r红色×叉号∨朝下三角符号--双划线c青色+加号∧朝上三角符号m品红*星号<朝左三角符号y黄色>朝右三角符号k黑色p五角星w白色h六角星.>>x=(0:pi/100:2*pi)';↙>>y1=2*exp(-0.5*x)*[1,-1];↙>>y2=2*exp(-0.5*x).*sin(2*pi*x);↙>>x1=(0:12)/2;↙>>y3=2*exp(-0.5*x1).*sin(2*pi*x1);↙>>plot(x,y1,'k:',x,y2,'b--',x1,y3,'rp');↙plot3组绘图参数,第一组用黑色虚线画出两条包络线,第二组用蓝色双划线画出曲线y,第三组用红色五角星离散标出数据点.plotyy函数,分析.调用格式为:plotyy(x1,y1,x2,y2)x1,y1对应一条曲线,x2,y2对应另一条曲线.横坐标的标度相同,纵坐标有两个,左边x2,y2.(二)绘制图形的辅助操作性更强.图形标注分的含义等,这些操作称为添加图形标注.有关图形标注函数的调用格式为:ttl()xlabel(’x’)ylabel(’y’))legend(12’,…)和ylabel函数分别用于说明图形和坐标轴的名称. text函数是在坐标点(x,y)处添加图形说明.legend函数用于绘制曲线所用线型、颜色或数据点标记图例,.zzlabel函数.字符串中,用/bf,/it,/rm控制字符分别定义黑体、斜体和正体字符,受LaTex字符串控制部分要加大括号{}括起来.例如,text(0.3,0.5,‟theusfulbf坐标控制在绘制图形时,Matlab可以自动根据要绘制曲线数据的范围选择合适的坐标刻度,使得曲线能够尽可能清晰的显示出来.所以,一般情况下用户不必选择坐标轴的刻度范围.但axis函数对其重新设定.其调用格式为axis([xminxmaxyminymaxzminzmax])x、y轴的最小值和最大值选择坐标系范围,绘制出合适的二维曲线.如果给出了全部参数,则绘制出三维图形.axis函数的功能丰富,其常用的用法有:axisequal:纵横坐标轴采用等长刻度axissquare:产生正方形坐标系(默认为矩形)axisauto:使用默认设置axisoff:取消坐标轴axison:显示坐标轴grid命令来控制,gridon/off命令控制画还是不画网格线,不带参数的grid命令在两种之间进行切换.给坐标加边框用box命令控制.grid一样用法图形保持复存在,如果希望在已经存在的图形上再继续添加新的图形,可以使用图形保持命令hold.hold命令在两者之间进行切换.图形窗口分割.分割后的图形窗口由若干个绘图区组成,每一个绘图区可以建立独立的坐标系..Matlabsubplot函数用来将当前subplot函数激活某一区,该区为活动区,所发出的绘图命令都是作用于该活动区域.调用格式:subplot(m,n,p)n.其.每一个绘图区允许以不同的坐标系单独绘制图形.(三)绘制二维图形的其他函数在线性直角坐标系中,其他形式的图形有条形图、阶梯图、杆图和填充图等,所采用的函数分别为:bar(x,y,选项) 选项在单引号中stairs(x,y,选项))fill(x1,y11,x2,y22,…)fill函数按向量元素下标渐增次序依次用直线段连接x,y对应元素定义的数据点.polar函数用来绘制极坐标图,调用格式为:polar(theta,rho,选项)rhoplot函数相似.其调用格式为:semilogx(x1,y11,x2,y2,选项2,…)semilogy(x1,y11,x2,y2,选项2,…)loglog(x1,y11,x2,y22,…)这些函数中选项的定义和plot函数完全一样,所不同的是坐标轴的选取.semilogx函数y轴仍保持线性刻度.semilogysemilogx相反loglog函数使用全对数坐标,x、y轴均采用对数刻度.§B.7.2三维绘图(一)绘制三维曲线的基本函数plot3plot的有关功能扩展到三维空间,可以用来绘制三维曲线.其调用格式为:plot3(x1,y1,z11,x2,y2,z22,…)plot的选项一样.x,y,z.当x,y,z对应列元素绘制三维曲线,曲线条数等于矩阵的列数.例如,t=0:pi/50:2*pi;↙x=8*cos(t);↙y=4*sqrt(2)*sin(t);↙z=-4*sqrt(2)*sin(t);↙plot3(x,y,z,'p');↙title('Linein3-DSpace');↙text(0,0,0,'origin');↙xlabel('X');ylabel('Y');zlabel('Z');grid;↙(二)三维曲面z=f(x,y)xy[a,b]xm份,将[c,d]yn份,由各划分点格坐标矩阵,最后利用有关函数绘图.产生平面区域内的网格坐标矩阵有两种方法:利用矩阵运算生成.x=a:dx:b;y=(c:dy:d)‟;X=ones(size(y))*x;Y=y*ones(size(x));XxyY的每一列都是向量yx的元素个数.meshgrid函数生成;x=a:dx:b;y=c:dy:d;[X,Y]=meshgrid(x,y);x=ymeshgrid(x)绘制三维曲面的函数Matlab提供了mesh函数和surf函数来绘制三维曲面图.mesh函数用来绘制三维网格图,用来绘制三维曲面图,各线条之间的补面用颜色填充.其调用格式为:mesh(x,y,z,c)surf(x,y,z,c)一般情况下,x,y,z是维数相同的矩阵,x,y是网格坐标矩阵,z是网格点上的高度矩阵,c用于指定在不同高度下的颜色范围c省略时,Matlab认为c=z,也即颜色的设定是.xzy轴的坐标,然后绘制三维图形.x,y是yz的行,x,y向量元素的组合构成网格点的x,y坐标,z坐标则取自z矩阵,然后绘制三维曲线.例如,%program1x=0:0.1:2*pi;[x,y]=meshgrid(x);z=sin(y).*cos(x);mesh(x,y,z);title('mesh');pause;%program2x=0:0.1:2*pi;[x,y]=meshgrid(x);z=sin(y).*cos(x);surf(x,y,z);title('surf');pause;%program3x=0:0.1:2*pi;[x,y]=meshgrid(x);z=sin(y).*cos(x);plot3(x,y,z);title('plot3-1');grid;又如,绘制两个直径相等的圆管相交的图形.m=30;z=1.2*(0:m)/m;r=ones(size(z));theta=(0:m)/m*2*pi;x1=r'*cos(theta);y1=r'*sin(theta);%生成第一个圆管的坐标矩阵z1=z'*ones(1,m+1);x=(-m:2:m)/m;x2=x'*ones(1,m+1);y2=r'*cos(theta);%生成第一个圆管的坐标矩阵z2=r'*sin(theta);surf(x1,y1,z1); %绘制竖立的圆管axisequal,axisoffholdonsurf(x2,y2,z2); %绘制平放的圆管axisequal,axisofftitle两个等直径圆管的交线');holdoffmeshc和带meshzmesh类似.不同的是,meshcxy平面上绘z轴方向的等高线,meshzxy平面上绘制曲面的底座.surfc和具有光照效果的曲面surfl.例如,[x,y]=meshgrid(-8:0.5:8);subplot(2,2,1);meshc(x,y,z);title('meshc');subplot(2,2,2);meshz(x,y,z);title('meshz');subplot(2,2,3);surfc(x,y,z);title('surfc');subplot(2,2,4);surfl(x,y,z
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国女装船袜行业市场发展现状及竞争格局与投资前景研究报告
- 半导体关键技术
- 广电中心电视节目演播室灯光设备及幕布防火台账
- 智慧医疗诊断影像AI辅助决策系统
- 2025年芜湖技师学院招聘考试试卷真题
- 2025-2026学年快板教学设计专业简历
- ISO 22634-22019 卷烟.用气相色谱质谱法测定卷烟主流烟气中苯并a芘.第2部分用环己烷作为萃取溶剂的方法标准立项发展报告
- 运城市闻喜县2025-2026学年四年级数学上学期期中学业水平测试模拟试题含答案
- 2026年长期企业管理培训协议书
- 2026年度人工智能算法开发分包合同
- 第二章综合与实践进位制的认识与探究教学设计人教版数学七年级上册
- 四位一体多功能化工单元培训装置操作规程
- DB46∕475-2023 水产养殖尾水排放标准
- 村干部考事业编笔试真题(含答案)
- 2025年药店店员考核题库及答案
- 工业自动化设备调试与运行规范
- GB/T 46082.1-2025气焊设备用安全装置第1部分:阻火器
- 脊柱矫形护理查房课件
- 2025年卫生高级职称面审答辩(卫生管理)历年参考题库含答案详解
- 国家安全教育大学生读本课件高教2025年版讲义合集(绪论+第1章+第2章+第3章+第4章+第5章)
- 用电安全知识培训课件教程
评论
0/150
提交评论