《最新在科学计算中的应用2PPT课件.ppt》由会员分享,可在线阅读,更多相关《最新在科学计算中的应用2PPT课件.ppt(133页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、本章主要内容 MATLAB 基本命令简介 MATLAB 程序设计语言基础 基本数学运算 MATLAB语言流程控制 MATLAB 函数的编写 二维图形绘制 三维图形绘制Mathematica的计算结果的计算结果2Mathematica的计算结果的计算结果3、4Matlab工作环境界面工作环境界面包含一行标题栏、一行菜单栏、一行工具栏、五个工作窗口和一行注释栏。五个工作窗口分别为:发射台( Launch Pad)、工作区( Workspace)、命令历史( Command History)、当前路径( Current Directory)和命令窗口( Command Windows)。 历史命令历
2、史命令 发射台发射台 命令命令 窗口窗口 标题栏标题栏 菜单栏菜单栏 常用工具栏常用工具栏 工作区工作区 当前路径当前路径2.1 MATLAB 基本命令简介 MATLAB 通用命令 Matlab常用的窗口帮助命令常用的窗口帮助命令 help 命令直接输入 help, MATLAB 将列出所有的帮助主题,每个帮助主题对应于 MATLAB搜索路径中的一个目录;help 后加帮助主题,可获得指定帮助主题的帮助信息;help 后加函数名; help 后加命令名,将得到指定命令的用法; demo 命令 helpwin 命令用于打开 MATLAB 的帮助文件窗 lookfor 命令允许用户通过完整的或部分
3、关键字来搜索要查找的内容 who 和 whos 的作用是列出在 MATLAB 工作内存中驻留的变量名 exist 命令用来查找或检查变量和函数的存在性怎样获得详尽的帮助信息(总结)o 首先是首先是MATLABMATLAB窗口中的窗口中的helphelp命令,它最常用、最快,往往命令,它最常用、最快,往往也是最有效的。给出关键字就能找到相应的说明。也是最有效的。给出关键字就能找到相应的说明。HelpHelp命命令简单易用,但是它要求准确给出关键字,如果记忆不准,令简单易用,但是它要求准确给出关键字,如果记忆不准,就很难找到。这时就应该用第二种方案。就很难找到。这时就应该用第二种方案。o Help
4、 DeskHelp Desk:这是:这是MATLABMATLAB的的HTMLHTML格式的帮助文档,有着很好格式的帮助文档,有着很好的组织。可以在命令行键入的组织。可以在命令行键入helpdeskhelpdesk,进入,进入“Matlab Help Matlab Help Desk”Desk”。Help DeskHelp Desk的搜索可以使用不完全关键字,这样即的搜索可以使用不完全关键字,这样即使遇到记忆模糊的情况也可以很快查到。使遇到记忆模糊的情况也可以很快查到。o 前面两种方法所得到的帮助信息常常是不够细致的,需要前面两种方法所得到的帮助信息常常是不够细致的,需要用第三种途径来补充,这就
5、是电子版的使用手册。用第三种途径来补充,这就是电子版的使用手册。MATLABMATLAB里包含了大量关于里包含了大量关于MATLABMATLAB安装、使用、编程以及各种工具安装、使用、编程以及各种工具箱等的电子版手册,全部为箱等的电子版手册,全部为PDFPDF格式格式, ,具有搜索功能,因此具有搜索功能,因此也可以在指定的手册中搜索关键字,使用非常方便。也可以在指定的手册中搜索关键字,使用非常方便。 远程帮助系统远程帮助系统 在在MathWorks公司的主页公司的主页(http:/)上可上可以找到很多有用的信息,国内的一些网站也有丰富的信息资以找到很多有用的信息,国内的一些网站也有丰富的信息资
6、源。源。2.2 MATLAB 程序设计语言基础 MATLAB 语言的变量命名规则命名规则是:(1)变量名必须是不含空格的单个词;(2)变量名区分大小写;(3)变量名最多不超过19个字符;(4)变量名必须以字母打头,之后可以是 任意字母、数字或下划线,变量名中 不允许使用标点符号变量分类:变量分类: 局部变量和全局变量局部变量和全局变量 永久变量(保留常量)永久变量(保留常量)只能在某一函数体内使用,而不能从其他函数和只能在某一函数体内使用,而不能从其他函数和 Matlab工作空间访问的变量,就是工作空间访问的变量,就是局部变量局部变量。在几个函数及在几个函数及Matlab函数中都能使用的变量就
7、是函数中都能使用的变量就是全局全局变量变量。 (全局变量名应尽可能大写,并由(全局变量名应尽可能大写,并由globe声明)声明)Matlab内部的每一个数据元素都是用内部的每一个数据元素都是用双精度数双精度数(double)来表示和存储的。来表示和存储的。变量输出时用户可以用变量输出时用户可以用format命令设置或改变输出命令设置或改变输出格式。格式。短格式短格式(Short):1.3333 0.0000短格式短格式e方式方式(Short e):1.3333e+00 1.2345e-06短格式短格式g方式方式(Short g):1.3333 0.0长格式长格式(Long):1.3333333
8、3333333 0.00000123450000长格式长格式e方式方式(Long e):1.33333333333333e+00 1.2345000000000e-06长格式长格式g方式方式(Long g):1.33333333333333 0.0000012345银行格式银行格式(Bank):1.33 0.00十六进制格式十六进制格式(Hex):3ff555555555 3eb46231abfd71+格式格式(+):+有理数(有理数(Rational):1/3 2469/2000000000MATLAB 的保留常量数学运算符号及标点符号数学运算符号及标点符号(1)MATLAB的每条命令后,若
9、为逗号或无标逗号或无标点点符号,则显示命令的结果;若命令后为分号分号,则禁止显示结果. (2)“%” 后面所有文字为注释. (3) “.”表示续行.数学运算符号及标点符号数学运算符号及标点符号 双精度数值变量 IEEE标准,64位 (占8字节),11指数位,53数值位和一个符号位 double( ) 函数的转换 其他数据类型 uint8( ),无符号8位整形数据类型,值域为0至255,常用于图像表示和处理。(节省存储空间,提高处理速度) int8( ), int16( ), int32( ),uint16( ), uint32( ) 所谓符号计算是指在运算时所谓符号计算是指在运算时,无须事先对
10、无须事先对变量赋值变量赋值,而将所得到结果以标准的符号而将所得到结果以标准的符号形式来表示。形式来表示。 MathWorks公司以公司以Maple的内核作为符的内核作为符号计算引擎(号计算引擎(Engine),依赖),依赖Maple已有已有的函数库,开发了实现符号计算的两个的函数库,开发了实现符号计算的两个工具箱:基本符号工具箱和扩展符号工工具箱:基本符号工具箱和扩展符号工具箱。具箱。 1、sym函数 sym函数的主要功能是创建符号变量,以便进行符号运算,也可以用于创建符号表达式或符号矩阵。用sym函数创建符号变量的一般格式为: x = sym(x) 其目的是将x创建为符号变量,以x作为输出变
11、量名。每次调用该函数,可以定义一个符号变量。(一) 定义符号变量 【例】作符号计算: a,b,x,y均为符号运算量。在符号运算前,应先将a,b,x,y定义为符号运算量15ax byax by a=sym(a); %定义a为符号运算量,输出变量名为a b=sym(b); x=sym(x); y=sym(y); x,y=solve(a*x-b*y-1,a*x+b*y-5,x,y) %以a,b为符号常数,x,y为符号变量即可得到方程组的解: x =3/a y =2/b2、syms函数syms函数的功能与sym函数类似。syms函数可以在一个语句中同时定义多个符号变量,其一般格式为: syms var
12、_list var_props 例:syms a b real syms c positive 符号型数值可采用变精度函数求值 vpa(A), 或 vpa (A,n) vpa(pi)ans = 3.1415926535897932384626433832795 vpa(pi,60) 字符串型数据:用单引号括起来 。 多维数组:是矩阵的直接扩展,多个下标。 单元数组:将不同类型数据集成到一个变量名下面,用表示;例:用Ai,j可表示单元数组A的第i行,第j列的内容。 类与对象:允许用户自己编写包含各种复杂详细的变量,可以定义传递函数。MATLAB支持的其它数据结构ans =3.1415926535
13、8979323846264338327950288419716939937510582097494 直接赋值语句 赋值变量赋值表达式 例: a=pi2 a = 9.8696 例:表示矩阵 B=1+9i,2+8i,3+7j;4+6j 5+5i,6+4i;7+3i,8+2j 1iB = 1.0000 + 9.0000i 2.0000 + 8.0000i 3.0000 + 7.0000i 4.0000 + 6.0000i 5.0000 + 5.0000i 6.0000 + 4.0000i 7.0000 + 3.0000i 8.0000 + 2.0000i 0 + 1.0000iMATLAB 的基本语
14、句结构 函数调用语句返回变量列表函数名(输入变量列表) 例:a,b,c=my_fun(d,e,f,c) 冒号表达式 v=s1:s2:s3 该函数生成一个行向量v,其中s1是起始值, s2是步长(若省略步长为1), s3是最大值。 例:用不同的步距生成 (0,p) 间向量。 v1=0:0.2:piv1 = Columns 1 through 9 0 0.2000 0.4000 0.6000 0.8000 1.0000 1.2000 1.4000 1.6000 Columns 10 through 16 1.8000 2.0000 2.2000 2.4000 2.6000 2.8000 3.000
15、0 v2=0:-0.1:pi %步距为负,不能生成向量,得出空矩阵v2 = Empty matrix: 1-by-0 v3=0:piv3 = 0 1 2 3 v4=pi:-1:0 逆序排列构成新向量v4 = 3.1416 2.1416 1.1416 0.1416 v5=0:0.4:pi,piv5 = 0 0.4000 0.8000 1.2000 1.6000 2.0000 2.4000 2.8000 3.1416MATLAB 以以矩阵矩阵为基本的运算单元,为基本的运算单元,向量向量和标量和标量作为特殊的矩阵处理:作为特殊的矩阵处理:向量向量看作只有看作只有一行或一列的矩阵;一行或一列的矩阵;标
16、量标量看作只有一个元素看作只有一个元素的矩阵。的矩阵。1、 矩阵的构造矩阵的构造a.直接输入直接输入b.利用内部函数产生矩阵利用内部函数产生矩阵c.利用利用M文件产生矩阵文件产生矩阵d.从外部数据文件调入矩阵从外部数据文件调入矩阵A=1,2,3;4,5,6;a. 直接输入直接输入直接输入需遵循以下基本规则:直接输入需遵循以下基本规则:整个矩阵应以整个矩阵应以“ ”为首尾,即整个输入矩阵必须包为首尾,即整个输入矩阵必须包含在方括号中;含在方括号中; 矩阵中,行与行之间必须用分号矩阵中,行与行之间必须用分号“ ;”或或 Enter 键键( 按按 Enter 键)符分隔;键)符分隔; 每行中的元素用
17、逗号每行中的元素用逗号“ ,”或空格分隔;或空格分隔; 矩阵中的元素可以是数字或表达式,但表达式中不矩阵中的元素可以是数字或表达式,但表达式中不可包含未知的变量,可包含未知的变量,MATLAB用表达式的值为该位用表达式的值为该位置的矩阵元素赋值。当矩阵中没有任何元素时,该置的矩阵元素赋值。当矩阵中没有任何元素时,该矩阵被称作矩阵被称作“ 空阵空阵”( Empty Matrix)。)。 A=1,2,3,4;5,6,7,8;9,10,11,12;13,14,15,16 A = 1 2 3 4 5 6 7 8 9 10 11 1213 14 15 16利用表达式输入利用表达式输入 B=1,sqrt(
18、25),9,132,6,10,7*23+sin(pi),7,11,154,abs(-8),12,16B = 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16由向量构成矩阵由向量构成矩阵向量是组成矩阵的基本元素之一。向量元素需要向量是组成矩阵的基本元素之一。向量元素需要用方括号括起来。元素之间用空格和逗号分隔生用方括号括起来。元素之间用空格和逗号分隔生成行向量,用分号隔开生成列向量。可以把行向成行向量,用分号隔开生成列向量。可以把行向量看成量看成1 n 阶矩阵,阶矩阵,把列向量看成把列向量看成n 1 阶矩阵。阶矩阵。向量的构造方法:向量的构造方法: 直接输入向量直接输
19、入向量 利用冒号生成向量利用冒号生成向量 利用利用 linspace/logspace 生成向量生成向量 a=1,2,3,4; x=0:0.5:2;% x=logspace(a,b,n) 生成有生成有 n 个元素的行向量个元素的行向量 x,其元素,其元素起点起点 x(1)=10a,终点,终点 x(n)=10b。 b=logspace(0,2,4)b = 1.0000 4.6416 21.5443 100.0000 x x = 0 0.5000 1.0000 1.5000 2.0000% x=linspace(a,b,n) 生成有生成有 n 个元素的行向个元素的行向量量 x,其元素值在,其元素值
20、在 a、b 之间线性分布。之间线性分布。 y=linspace(0,2,7) y = 0 0.3333 0.6667 1.0000 1.3333 1.6667 2.0000 z=-1 x 3z = -1.0000 0 0.5000 1.0000 1.5000 2.0000 3.0000 u=y;zu = 0 0.3333 0.6667 1.0000 1.3333 1.6667 2.0000 -1.0000 0 0.5000 1.0000 1.5000 2.0000 3.0000b.利用内部函数产生矩阵利用内部函数产生矩阵%compan生成生成x向量的伴随矩阵向量的伴随矩阵 x=2,4,6,8,
21、10 x = 2 4 6 8 10 compan(x)ans = -2 -3 -4 -5 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 % eye 生成单位阵生成单位阵 S=eye(6) S = 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1% ones 生成全部元素为生成全部元素为 1 的矩阵的矩阵 ones(3,4) ans = 1 1 1 1 1 1 1 1 1 1 1 1 F=5*ones(3)F = 5 5 5 5 5 5 5 5 5% zeros 生成全部元素为生成全部
22、元素为0的矩阵的矩阵 Z=zeros(2,4)Z = 0 0 0 0 0 0 0 0% rand 生成均匀分布的随机矩阵生成均匀分布的随机矩阵 R=rand(4) R = 0.9501 0.8913 0.8214 0.9218 0.2311 0.7621 0.4447 0.7382 0.6068 0.4565 0.6154 0.1763 0.4860 0.0185 0.7919 0.4057%生成空阵生成空阵 K= K = c.利用利用M文件产生矩阵文件产生矩阵A=1,2,3,4,5 6,7,8,9,10 11,12,13,14,15 16,17,18,19,2021,22,23,24,25d
23、.从外部数据文件调入矩阵 用load命令输入 用Import 菜单输入 基本语句格式 B=A(v1,v2) v1、 v2分别表示提取行(列)号构成的向量。例: A=1,2,3,4;3,4,5,6;5,6,7,8;7,8,9,0A = 1 2 3 4 3 4 5 6 5 6 7 8 7 8 9 0 B1=A(1:2:end,:) 提取全部奇数行、所有列。B1 = 1 2 3 4 5 6 7 8子矩阵提取 B2=A(3,2,1,2,3,4) 提取3,2,1行、2,3,4列构成子矩阵。 A =B2 = 1 2 3 4 6 7 8 3 4 5 6 4 5 6 5 6 7 8 2 3 4 7 8 9 0
24、 B3=A(:,end:-1:1) 将A矩阵左右翻转,即最后一列排在最前面。B3 = 4 3 2 1 6 5 4 3 8 7 6 5 0 9 8 7矩阵拆分矩阵拆分&子矩阵的提取子矩阵的提取 (1) 利用利用冒号冒号表达式获得子矩阵表达式获得子矩阵 A(:,j)表示取表示取A矩阵的矩阵的第第j列列全部全部元素元素;A(i,:)表示表示A矩阵矩阵第第i行的行的全部全部元素元素;A(i,j)表示取表示取A矩阵矩阵第第i行、第行、第j列的元素。列的元素。 A(i:i+m,:)表示取表示取A矩阵第矩阵第ii+m行的全部元行的全部元素;素;A(:,k:k+m)表示取表示取A矩阵第矩阵第kk+m列的全部列
25、的全部元素,元素,A(i:i+m,k:k+m)表示取表示取A矩阵第矩阵第ii+m行内,行内,并在第并在第kk+m列中的所有元素。列中的所有元素。 矩阵表示 矩阵转置 数学表示 (若A有复数元素,先转置再取各元素共轭复数值,Hermit转置) MATLAB 求解 BA. C=A2.3 基本数学运算矩阵的代数运算 矩阵加减法 C=A+B D=A-B 注意维数是否相等 注意其一为标量的情形 矩阵乘法 数学表示 MATLAB 表示 C=A*B 注意两个矩阵维数相容性 矩阵除法 矩阵左除:AX = B,求 X MATLAB 求解:X=AB 若A为非奇异方阵,则 X=A-1B 最小二乘解(若A不是方阵)
26、矩阵右除:XA = B,求 X MATLAB求解:X=B/A 若A为非奇异方阵,则 X=BA-1 最小二乘解(若A不是方阵) 矩阵翻转 左右翻转 B=fliplr(A) 上下翻转 C=flipud(A) 旋转 90o (逆时针) D=rot90(A) 如何旋转180o? D=rot180(A) ? Undefined function or variable rot180. D=rot90(rot90(A)矩阵乘方 A 为方阵,求 MATLAB 实现: F=Ax,1iji mjba 1,ijni jca 点运算-矩阵对应元素的直接运算数学表示 : MATLAB 实现: C=A.*B例: A=1
27、,2,3;4,5,6;7,8,0; B=A.AB = 1 4 27 256 3125 46656 823543 16777216 1 C=A.*AC = 1 4 9 16 25 36 49 64 0 逻辑变量: 当前版本有逻辑变量 对 double 变量来说,非 0 表示逻辑 1 逻辑运算(相应元素间的运算) 与运算 A&C 或运算 A|C 非运算 A 异或运算 xor(A,C)矩阵的逻辑运算 各种允许的比较关系 , =, , AA = 1 2 3 4 5 6 7 8 0 find(A=5), 大于或等于5元素的下标 ans = 3 5 6 8矩阵的比较运算 i,j=find(A=5);i,j
28、 显示行标,列标ans = A= 3 1 1 2 3 2 2 4 5 6 3 2 7 8 0 2 3 all(A=5) 某列元素全大于或等于5时,相应元素为1,否则为0。ans = 0 0 0 any(A=5) 某列元素中含有大于或等于5时,相应元素为1,否则为0。ans = 1 1 1解析结果的化简与变换MATLAB 实现: s1=simple(s) 从各种方法中自动选择最简格式 s1,how=simple(s) 化简并返回实际采用的化简方法 其中,s为原始表达式,s1为化简后表达式,how为采用的化简方法。 其他常用化简函数(信息与格式可用 help命令得出) collect( ) 合并同
29、类项 expand( ) 展开多项式 factor( ) 因式分解 numden( ) 提取多项式的分子和分母 sincos( ) 三角函数的化简例: syms s; P=(s+3)2*(s2+3*s+2)*(s3+12*s2+48*s+64)P =(s+3)2*(s2+3*s+2)*(s3+12*s2+48*s+64) simple(P) % 一系列化简尝试,得出计算机认为的最简形式ans = (s+3)2*(s+2)*(s+1)*(s+4)3 a,m=simple(P) % 返回化简方法为因式分解方法,用 factor( ) 函数将得同样结果 a = (s + 3)2*(s + 4)3*(
30、s2 + 3*s + 2) ?m =simplify ? expand(P) ans = s7+21*s6+185*s5+883*s4+2454*s3+3944*s2+3360*s+1152 变量替换 其中,f为原表达式,用x1*替换x1得出新的。例:求其 Taylor 幂级数展开 syms a b c d t; % 假设这些变量均为符号变量 f=cos(a*t+b)+sin(c*t)*sin(d*t); % 定义给定函数 f(t) f1=subs(f,a,b,c,d,t,0.5*pi,pi,0.25*pi,0.125*pi,4)f1 = -1.0000*111(,)fsubs f xx*11
31、212(,)nnfsubs fxxxxxx基本数论运算下取整、上取整、四舍五入、离0近方向取整、最简有理数、求模的余数、最大公约数、最小公倍数、质因数分解、判定是否为质数例:对下面的数据进行取整运算 -0.2765, 0.5772, 1.4597, 2.1091, 1.191, -1.6187 A=-0.2765,0.5772,1.4597,2.1091,1.191,-1.6187; floor(A) % 向 -inf 方向取整ans = -1 0 1 2 1 -2 ceil(A) % 向 +inf 方向取整ans = 0 1 2 3 2 -1 round(A) %取最近的整数ans = 0
32、1 1 2 1 -2 fix(A) %向 0 的方向取整ans = 0 0 1 2 1 -1 例:3x3 Hilbert 矩阵,试用 rat() 函数变换 A=hilb(3); n,d=rat(A) 将元素变换成最小有理数,n,d分别为分子、分母矩阵。n = 1 1 1 1 1 1 1 1 1d = 1 2 3 2 3 4 3 4 5 例:1856120,1483720,最大公约数、最小公倍数,质因数分解。 format long m=1856120; n=1483720; gcd(m,n), lcm(m,n)求m,n的最大公约数、最小公倍数。ans = 1.0e+009 * 0.000001
33、96000000 1.40508284000000 factor(lcm(n,m) 对lcm(n,m)进行质因数分解。ans = 2 2 2 5 7 7 757 947 例:1-100间质数 A=1:10; isprime(A) 若向量A中某个整数值为质数,则相应位置为1,其他为零。ans = 0 1 1 0 1 0 1 0 0 0 A=1:100; B=A(isprime(A)B = Columns 1 through 16 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 Columns 17 through 25 59 61 67 71 73 79
34、83 89 97 rem(A,C) %A中元素对C中元素求模得出的余数。 2.4.1 循环结构 for 结构 while 结构2.4 MATLAB 语言流程控制例:用循环求解 s=0;for i=1:100 s=s+i;end s=0; i=1;while (i sum(1:100)ans = 5050例:用循环求解求最小的 m s=0; m=0;while (s tic, s=0; for i=1:100000, s=s+1/2i+1/3i; end; tocelapsed_time = 1.1820 tic, i=1:100000; s=sum(1./2.i+1./3.i); toc 向量
35、化所需时间少elapsed_time = 0.3010 i=1:10;s=1./2.i+1./3.i, ss=sum(1./2.i+1./3.i)s = 0.8333 0.3611 0.1620 0.0748 0.0354 0.0170 0.0083 0.0041 0.0020 0.0010ss = 1.49902.4.2 转移结构例:用循环求解求最大的 m s=0;for i=1:10000 s=s+i; if s10000, break; endend ii = 1412.4.3 开关结构 和 C 语言的区别当开关表达式的值等于某表达式,执行该语句后结束该结构,不用 break当需要在开关
36、表达式满足若干个表达式之一时执行某一程序段,则用单元形式 (用大括号把这些表达式括起来,用逗号分隔)otherwise 语句,不是C语言中的 default(但与之等价)程序的执行结果和各个case顺序无关case 语句中条件不能重复,否则列在后面的条件将不能执行 全新结构(首先试探性执行语句1,若执行过程中有错,将错误信息赋给保留的lasterr变量,并终止这段语句的执行,转而执行语句2。) 应将不保险但快的算法放在语句1,保险的放在语句2;或语句2说明语句1失效原因。2.4.4 试探结构 函数是 MATLAB 编程的主流方法 除了函数外,还可以采用 M-script(M脚本文件) 文件 M
37、-script 适合于小规模运算例:若最大值不为 10000,需修改程序对 m 和 10000 值的设置,不适合于M-script2.5 MATLAB 函数的编写2.5.1 MATLAB 语言的函数的基本结构 nargin, nargout 分别表示输入和返回变量的实际个数,此为MATLAB保留变量,只要进入该函数, MATLAB就将自动生成这两个变量。varargin, varargout 输入、输出变量列表(可变输入输出个数)。例:前面的要求,m, 10000 function m,s=findsum(k) s=0; m=0; while (s m1,s1=findsum(145323)m
38、1 = 539s1 = 145530 无需修改程序 s=0; m=0;while (s1, error(Too many output arguments.); endif nargin=1, m=n; elseif nargin=0 | nargin2 error(Wrong number of input arguments.); endA1=zeros(n,m);for i=1: n for j=1:m A1(i,j)=1/(i+j-1);end, endif nargout=1, A=A1; elseif nargout=0, disp(A1); end help myhilb 产生A
39、=MYHILB(N,M)或A=MYHILB(N); A=myhilb(3,4)A = 1.0000 0.5000 0.3333 0.2500 0.5000 0.3333 0.2500 0.2000 0.3333 0.2500 0.2000 0.1667 A=myhilb(4)A = 1.0000 0.5000 0.3333 0.2500 0.5000 0.3333 0.2500 0.2000 0.3333 0.2500 0.2000 0.1667 0.2500 0.2000 0.1667 0.1429 A=myhilb(3,4,5)? Error using = myhilbToo many
40、input arguments. 例:函数的递归调用:阶乘function k=my_fact(n)if nargin=1, error(输入变量个数错误,只能有一个输入变量); endif nargout1, error(输出变量个数过多); endif abs(n-floor(n)eps | n1 % 如果 n1, 进行递归调用 k=n*my_fact(n-1);elseif any(0 1=n) % 0!=1!=1 k=1;end my_fact(11)ans = 39916800 其实MATLAB提供了求取阶乘的函数factorial(),其核心算法为 prod(1:n),元素乘积,从
41、结构上更简单、直观,速度也更快。 prod(1:11)ans = 39916800 prod(1:3:11)ans = 280 例: conv( ) 可以计算两个多项式的积用 varargin 实现任意多个多项式的积function a=convs(varargin) a=1; for i=1:length(varargin), a=conv(a,varargini); end P=1 2 4 0 5; Q=1 2; F=1 2 3; D=convs(P,Q,F)D = 1 6 19 36 45 44 35 30 poly2sym(D)ans =x7+6*x6+19*x5+36*x4+45*x
42、3+44*x2+35*x+302.5.2 可变输入输出个数 E=conv(conv(P,Q),F) % 若采用 conv() 函数,则需要嵌套调用E = 1 6 19 36 45 44 35 30 poly2sym(E)ans =x7+6*x6+19*x5+36*x4+45*x3+44*x2+35*x+30 G=convs(P,Q,F,1,1,1,3,1,1)G = 1 11 56 176 376 578 678 648 527 315 902.5.3 inline 函数和匿名函数 f=inline(sin(x.2+y.2),x,y)MATLAB 7.0(匿名函数)22( , )sin()f
43、x yxy2.6 二维图形绘制2.6.1 二维图形绘制基本语句构造向量:例:选项为红色点划线且每个转折点用五角星表示r-.pentagram例: x=-pi : 0.05: pi; % 以 0.05 为步距构造自变量向量 y=sin(tan(x)-tan(sin(x); % 求出各个点上的函数值 plot(x,y) plot(x,y,r-.pentagram) x=-pi:0.05:-1.8,-1.801:.001:-1.2, -1.2:0.05:1.2,. 1.201:0.001:1.8, 1.81:0.05:pi; % 以变步距方式构造自变量向量 y=sin(tan(x)-tan(sin(
44、x); % 求出各个点上的函数值 plot(x,y) % 绘制曲线例: x=-2:0.02:2; % 生成自变量向量 y=1.1*sign(x).*(abs(x)1.1) + x.*(abs(x) plot(-2,-1.1,1.1,2,-1.1,-1.1,1.1,1.1)图形元素属性获取与修改 图形中,每条曲线、坐标轴、图形窗口分别是一个对象。可用set( )函数设置对象的属性,用get( )函数获得对象的某个属性。这两个语句在界面编程中特别有用。绘制绘制多根多根二维曲线二维曲线1plot函数的输入参数是函数的输入参数是矩阵形式矩阵形式 (1) 当当x是向量,是向量,y是有一维与是有一维与x同
45、维的矩阵时,同维的矩阵时,则绘制出多根则绘制出多根不同颜色不同颜色的曲线。曲线条数的曲线。曲线条数等于等于y矩阵的另一维数,矩阵的另一维数,x被作为这些曲线被作为这些曲线共同的横坐标。共同的横坐标。 (2) 当当x,y是同维矩阵时,则以是同维矩阵时,则以x,y对应列元素对应列元素为横、纵坐标分别绘制曲线,曲线条数等为横、纵坐标分别绘制曲线,曲线条数等于矩阵的列数。于矩阵的列数。 (3) 对只包含一个输入参数的对只包含一个输入参数的plot函数,当输函数,当输入参数是入参数是实矩阵实矩阵时,则按列绘制每列元素时,则按列绘制每列元素值相对其下标的曲线,曲线条数等于输入值相对其下标的曲线,曲线条数等
46、于输入参数矩阵的列数。参数矩阵的列数。当输入参数是当输入参数是复数矩阵复数矩阵时,则按列分别以元时,则按列分别以元素实部和虚部为横、纵坐标绘制多条曲线。素实部和虚部为横、纵坐标绘制多条曲线。2含多个输入参数的含多个输入参数的plot函数函数调用格式为:调用格式为:plot(x1,y1,x2,y2,xn,yn)(1)当输入参数都为向量时,)当输入参数都为向量时,x1和和y1,x2和和y2,xn和和yn分别组成一组分别组成一组向量对向量对,每一组向量对的每一组向量对的长度可以不同长度可以不同。每一向量。每一向量对可以绘制出一条曲线,这样可以在同一对可以绘制出一条曲线,这样可以在同一坐标内绘制出多条
47、曲线。坐标内绘制出多条曲线。(2)当输入参数有矩阵形式时,配对的)当输入参数有矩阵形式时,配对的x,y按对应列元素为横、纵坐标分别绘制曲线,按对应列元素为横、纵坐标分别绘制曲线,曲线条数等于矩阵的列数。曲线条数等于矩阵的列数。例例 分析下列程序绘制的曲线。分析下列程序绘制的曲线。x1=linspace(0,2*pi,100);x2=linspace(0,3*pi,100);x3=linspace(0,4*pi,100);y1=sin(x1);y2=1+sin(x2);y3=2+sin(x3);x=x1;x2;x3;y=y1;y2;y3;plot(x,y,x1,y1-1)02468101214-
48、2-1.5-1-0.500.511.522.533具有两个纵坐标标度的图形具有两个纵坐标标度的图形在在MATLAB中,如果需要绘制出具有不同纵坐标标中,如果需要绘制出具有不同纵坐标标度的两个图形,可以使用度的两个图形,可以使用plotyy绘图函数。调用绘图函数。调用格式为:格式为:plotyy(x1,y1,x2,y2)其中其中x1,y1对应一条曲线,对应一条曲线,x2,y2对应另一条曲线。对应另一条曲线。横坐标的标度相同横坐标的标度相同,纵坐标有两个,左纵坐标用,纵坐标有两个,左纵坐标用于于x1,y1数据对,右纵坐标用于数据对,右纵坐标用于x2,y2数据对。数据对。例例 用不同标度在同一坐标内
49、绘制曲线用不同标度在同一坐标内绘制曲线y1=0.2e-0.5xcos(4x) 和和y2=2e-0.5xcos(x)。程序如下:程序如下:x=0:pi/100:2*pi;y1=0.2*exp(-0.5*x).*cos(4*pi*x);y2=2*exp(-0.5*x).*cos(pi*x);plotyy(x,y1,x,y2);01234567-0.2-0.100.10.201234567-2-10124图形保持图形保持 hold on/off命令控制是保持原有图形还是刷新原命令控制是保持原有图形还是刷新原有图形,不带参数的有图形,不带参数的hold命令在两种状态之间进命令在两种状态之间进行切换。行
50、切换。例例 采用图形保持,在同一坐标内绘制曲线采用图形保持,在同一坐标内绘制曲线y1=0.2e-0.5xcos(4x) 和和y2=2e-0.5xcos(x)。程序如下:程序如下:x=0:pi/100:2*pi;y1=0.2*exp(-0.5*x).*cos(4*pi*x);plot(x,y1)hold ony2=2*exp(-0.5*x).*cos(pi*x);plot(x,y2);hold off01234567-1.5-1-0.500.511.52例例 在同一坐标内,分别用不同线型和颜色绘制曲线在同一坐标内,分别用不同线型和颜色绘制曲线y1=0.2e-0.5xcos(4x) 和和y2=2e