MTLAB仿真、建模与函数.doc_第1页
MTLAB仿真、建模与函数.doc_第2页
MTLAB仿真、建模与函数.doc_第3页
MTLAB仿真、建模与函数.doc_第4页
MTLAB仿真、建模与函数.doc_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MTLAB语言教程如果你是个初学者,可以在指令窗键入demo,这可是学习的好帮手。?demol 一旦发现指令不知如何使用时,help命令将告诉你使用。例:?help sinSIN Sine.SIN(X) is the sine of the elements of X.Overloaded methodshelp sym/sin.ml 在MATLAB下进行基本数学运算,只需将运算式直接打入提示号()(但在win98下没有,而在Win2000下为?,这一点请大家学习是注意一下)之後,并按入Enter键即可。例如:(10*19+2/4-34)/2*3ans= 234.7500MATLAB会将运算结果直接存入一变数ans,代表MATLAB运算後的答案,并显示其数值屏幕上。如果在上述的例子结尾加上”;”,则计算结果不会显示在指令视窗上,要得知计算值只须键入该变数值即可l MATLAB可以将计算结果以不同的精确度的数字格式显示,我们可以在指令视窗上的功能选单上的Options下 选 Numerical Format,或者直接在指令视窗键入以下的各个数字显示格式的指令。 format short (这是默认的)MATLAB利用了二个游标键可以将所下过的指令叫回来重覆使用。按下则前一次指令重新出现,之后再 按Enter键,即再执行前一次的指令。而键的功用则是往后执行指令。其它在键盘上的几个键如, Delete, Insert,其功能则显而易见,试用即知无须多加说明。当要暂时执行作业系统(例如Dos)的指令而还要执行MATLAB,可以利用!加上原作业系统的指令,例如 !dir, !format a:。l Ctrl-C(即同时按Ctrl及C二个键)可以用来中止执行中的MATLAB的工作。l 有三种方法可以结束MATLAB1.exit 2.quit 3.直接关闭MATLAB的命令视窗(Command window) MATLAB基本操作1. 变量及其命名规则l l 变量1. 1. 变量名的大小写是敏感。2. 2. 变量的第一个字符必须为英文字母,而且不能超过31个字符。3. 3. 变量名可以包含下连字符、数字,但不能为空格符、标点。预定义的变量ans预设的计算结果的变量名epsMATLAB定义的正的极小值=2.2204e-16pi内建的值inf值,无限大 ()NaN无法定义一个数目 ()i 或 j虚数单位i=j=-1nargin函数输入参数个数nargout函数输出参数个数realmax最大的正实数realmin最小的正实数flops浮点运算次数而键入clear则是去除所有定义过的变量名称。2. MATLAB赋值语句l l 表达式MATLAB书写表达式的规则与“手写算式”差不多相同。如果一个指令过长可以在结尾加上.(代表此行指 令与下一行连续),例如?3*.6ans =183. MATLAB常用数学函数l l 三角函数和双曲函数名称含义名称含义名称含义sin正弦csc余割atanh反双曲正切cos余弦asec反正割acoth反双曲余切tan正切acsc反余割sech双曲正割cot余切sinh双曲正弦csch双曲余割asin反正弦cosh双曲余弦asech反双曲正割acos反余弦tanh双曲正切acsch反双曲余割atan反正切coth双曲余切atan2四象限反正切acot反余切asinh反双曲正弦sec正割acosh反双曲余弦l l 指数函数名称含义名称含义名称含义expE为底的指数log1010为底的对数pow22的幂log自然对数log22为底的对数sqrt平方根l l 复数函数名称含义名称含义名称含义abs绝对值conj复数共轭real复数实部angle相角imag复数虚部l l 圆整函数和求余函数名称含义名称含义ceil向+圆整rem求余数fix向0圆整round向靠近整数圆整floor向-圆整sign符号函数mod模除求余l l 矩阵变换函数名称含义名称含义fiplr矩阵左右翻转diag产生或提取对角阵fipud矩阵上下翻转tril产生下三角fipdim矩阵特定维翻转triu产生上三角Rot90矩阵反时针90翻转l l 其他函数名称含义名称含义min最小值max最大值mean平均值median中位数std标准差diff相邻元素的差sort排序length个数norm欧氏(Euclidean)长度sum总和prod总乘积dot内积cumsum累计元素总和cumprod累计元素总乘积cross外积4. MATLAB系统命令命 令含 义help在线帮助helpwin在线帮助窗口helpdesk在线帮助工作台demo运行演示程序ver版本信息readme显示Readme文件who显示当前变量whos显示当前变量的详细信息clear清空工作间的变量和函数pack整理工作间的内存load把文件调入变量到工作间save把变量存入文件中quit/exit退出MATLABwhat显示指定的matlab文件lookfor在HELP里搜索关键字which定位函数或文件path获取或设置搜索路径echo命令回显cd改变当前的工作目录pwd显示当前的工作目录dir显示目录内容unix执行unix命令dos执行dos命令!执行操作系统命令computer显示计算机类型4. MATLAB语言中的关系与逻辑运算在执行关系及逻辑运算时,MATLAB 将输入的不为零的数值都视为真 (True)而为零的数值则视为否 (False)。 运算的输出值将判断为真者以 1 表示而判断为否者以 0 表示。各个运算元须用在二个大小相同的阵列或是矩阵中的比较l l 关系运算指令含义小于大于=大于等于=等于=不等于?a=1:2:11;?b=2:1:7;?abans =0 0 1 1 1 1?a=bans =0 1 0 0 0 0?a=bans =0 1 1 1 1 1?a-(b4)ans =1 3 5 6 8 10l l 逻辑运算指令含义&逻辑 and|逻辑 or逻辑 not(a6)ans =1 0 0 0 0 1c=a+(a3)|(b5)% x中大于5的元素ans =67869710811 x(4)=100%给x的第四个元素重新给值x =1 2 3 4 5 6 7 84 100 6 7 8 9 10 11 x(3)=% 删除第三个元素x =Columns 1 through 121 4 100 3 6 4 7 5 8 6 9 7Columns 13 through 1510 8 11 x(16)=1% 加入第十六个元素x =Columns 1 through 121 4 100 3 6 4 7 5 8 6 9 7Columns 13 through 1610 8 11 12 2 建立阵列上面的方法只适用于元素不多的情况,但是当元素很多的时候,则须采用以下的方式: x=(0:0.02:1); % 以:起始值=0、增量值=0.0.2、终止值=1的矩阵 x=linspace(0,1,100); % 利用linspace,以区隔起始值=0终止值=1之间的元素数目=100a=%空矩阵a = zeros(2,2)%全为0的矩阵ans =0 00 0 0 ones(3,3) %全为1的矩阵ans =1 1 11 1 11 1 1 rand(2,4);随机矩阵a=1:7, b=1:0.2:5;%更直接的方式c=b a; %可利用先前建立的阵列 a 及阵列 b ,组成新阵列 a=1:1:10; b=0.1:0.1:1; a+b*I%复数阵列ans =Columns 1 through 41.0000 + 0.1000i 2.0000 + 0.2000i 3.0000 + 0.3000i 4.0000 + 0.4000iColumns 5 through 85.0000 + 0.5000i 6.0000 + 0.6000i 7.0000 + 0.7000i 8.0000 + 0.8000iColumns 9 through 109.0000 + 0.9000i 10.0000 + 1.0000i在MATLAB的内部资料结构中,每一个矩阵都是一个以行为主(Column-oriented)的阵列(Array)因此对於矩阵元素的存取,我们可用一维或二维的索引(Index)来定址l l 子矩阵通过一个矩阵产生另一个矩阵的方法(上面已经有例子)假如一个矩阵A则 A(m1:m2 ,n1:n2)2. 矩阵的运算l l 经典的算术运算符。经 典 的 算 术 运 算 符运 算 符MATLAB表达式加+a+b减-a-b乘*a*b除/ 或 a/b或ab幂abl l 前面我们已经把经典的算术运算符告诉大家了,在这里同样也可以使用。 a=1:1:10; b=0:10:90; a+bans =1 12 23 34 45 56 67 78 89 100 a-bans =1 -8 -17 -26 -35 -44 -53 -62 -71 -80 a.*b%注意这里a后加了个“.”ans =0 20 60 120 200 300 420 560 720 900 a/bans =0. 0. 1158 abans =0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 00 1 2 3 4 5 6 7 8 9 b./aans =Columns 1 through 70 5.0000 6.6667 7.5000 8.0000 8.3333 8.5714Columns 8 through 108.7500 8.8889 9.0000 a.bans =Columns 1 through 70 5.0000 6.6667 7.5000 8.0000 8.3333 8.5714Columns 8 through 108.7500 8.8889 9.0000 a.2ans =1 4 9 16 25 36 49 64 81 100说明:在这里特别要注意一下有没有加点“.”之间的区别,这些算术运算符所运算的两个阵列是否需要长度一致。l l 矩阵转置运算通过在矩阵变量后加的方法来表示转置运算?a=1:1:10;?b=0:10:90;?aans =12345678910?c=a+b*i;?cans =1.00002.0000 -10.0000i3.0000 -20.0000i4.0000 -30.0000i5.0000 -40.0000i6.0000 -50.0000i7.0000 -60.0000i8.0000 -70.0000i9.0000 -80.0000i10.0000 -90.0000i3. 矩阵函数l l MATLAB常用数学函数这些数学函数一般都可以作为矩阵函数。a=1:1:10;b=0:10:90;sin(a)ans =Columns 1 through 70.8415 0.9093 0.1411 -0.7568 -0.9589 -0.2794 0.6570Columns 8 through 100.9894 0.4121 -0.5440exp(b)ans =1.0e+039 *Columns 1 through 70.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000Columns 8 through 100.0000 0.0001 1.2204sign(a)ans =1 1 1 1 1 1 1 1 1 1mean(b)ans =45l l 求矩阵的长度的函数?a=10,2,12;34,2,4;98,34,6;?size(a)ans =3 3 3?length(a)ans =3好好的看一下两者之间的区别。l l 矩阵的几种基本变换操作1. 1. 通过在矩阵变量后加的方法来表示转置运算?a=10,2,12;34,2,4;98,34,6;?aans =10 34 982 2 3412 4 62. 2. 矩阵求逆?inv(a)ans =-0.0116 0.0372 -0.00150.0176 -0.1047 0.03450.0901 -0.0135 -0.00453. 3. 矩阵求伪逆?pinv(a)ans =-0.0116 0.0372 -0.00150.0176 -0.1047 0.03450.0901 -0.0135 -0.00454. 4. 左右反转?fliplr(a)ans =12 2 104 2 346 34 985. 5. 矩阵的特征值?u,v=eig(a)u =-0.2960 0.3635 -0.3600-0.2925 -0.4128 0.7886-0.9093 -0.8352 0.4985v =48.8395 0 00 -19.8451 00 0 -10.99436. 6. 上下反转?flipud(a)ans =98 34 634 2 410 2 127. 7. 旋转90度?rot90(a)ans =12 4 62 2 3410 34 988. 8. 取出上三角和下三角?triu(a)ans =10 2 120 2 40 0 6?tril(a)ans =10 0 034 2 098 34 6?l,u=lu(a)l =0.1020 0.1500 1.00000.3469 1.0000 01.0000 0 0u =98.0000 34.0000 6.00000 -9.7959 1.91840 0 11.10009. 9. 正交分解?q,r=qr(a)q =-0.0960 -0.1232 -0.9877-0.3263 -0.9336 0.1482-0.9404 0.3365 0.0494r =-104.2113 -32.8179 -8.09890 9.3265 -3.19410 0 -10.963810奇异值分解?u,s,v=svd(a)u =0.1003 -0.8857 0.45320.3031 -0.4066 -0.86180.9477 0.2239 0.2277s =109.5895 0 00 12.0373 00 0 8.0778v =0.9506 -0.0619 -0.30410.3014 0.4176 0.85720.0739 -0.9065 0.415611求矩阵的范数?norm(a)ans =109.5895?norm(a,1)ans =142?norm(a,inf)ans =138字符串及其处理1. 字符串的基本操作在matlab工作空间中,字符串是以向量形式来存储的,我们把用所包含的内容来表示该字符串。?s=students =student字符串也可以作为矩阵来连接。?s1=whos1 =who?s=s,s1s =studentwho求字符串的长度?length(s)ans =10?size(s)ans =1 1 10长字符串的表示2.字符串函数字 符 串 转 换abs字符串到ASCII转换dec2hex十进制数到十六进制字符串转换fprintf把格式化的文本写到文件中或显示屏上hex2dec十六进制字符串转换成十进制数hex2num十六进制字符串转换成IEEE浮点数int2str整数转换成字符串lower字符串转换成小写num2str数字转换成字符串setstrASCII转换成字符串sprintf用格式控制,数字转换成字符串sscanf用格式控制,字符串转换成数字str2mat字符串转换成一个文本矩阵str2num字符串转换成数字upper字符串转换成大写eval(string)作为一个MATLAB命令求字符串的值blanks(n)返回一个n个零或空格的字符串deblank去掉字符串中后拖的空格feval求由字符串给定的函数值findstr从一个字符串内找出字符串isletter字母存在时返回真值isspace空格字符存在时返回真值isstr输入是一个字符串,返回真值lasterr返回上一个所产生MATLAB错误的字符串strcmp字符串相同,返回真值strrep用一个字符串替换另一个字符串strtok在一个字符串里找出第一个标记l l 这里函数num2str用来把数值转换成字符串,字符串连接用来把所转换的数嵌人到一个字符串句子中。按类似方式,int2str把整数转换成字符串。无论是num2str还是int2str都调用函数sprintf,它用类似C语言语法把数值转换成字符串。请注意函数str2num不能接受用户定义的变量,也不能执行转换过程的算术运算。?s=he is a student;?a=abs(s)a =Columns 1 through 12104 101 32 105 115 32 97 32 115 116 117 100Columns 13 through 15101 110 116?num2str(a)ans =104 101 32 105 115 32 97 32 115 116 117 100 101 110 116?int2str(s)ans =104 101 32 105 115 32 97 32 115 116 117 100 101 110 116l l 函数disp允许不打印它的变量名而显示一个字符串。?disp(s)he is a studentl l 函数find用来找出小写字符的下标值,然后,从小写元素中只减去小写与大写之差,最后,用setstr把求得的数组转换成它的字符串表示。?find(sm)ans =5 9 10 11 14 15l l 函数input能输入一个字符串: x=input( Enter anything , s ) 。这里,在函数input里的附加参量s告诉MATLAB,作为一个字符串,只要把用户输入传送到输出变量,就不需要引号。事实上,如果将引号包括进去,它们就变成返回字符串的一部分。l l 无论fprintf还是sprintf以同样方式处理输入参量,但fprintf把输出送到显示屏或文件中,而sprintf把输出返回到一个字符串中。l l 函数feval与eval类似,但在用法上有更多的限制。feval( fun ,x)求由字符串 fun 给定的函数值,其输入参量是变量x。即feval( fun ,x)等价于求fun(x)值。函数eval,feval的基本用途限在用户创建的函数内。一般地,feval可求出有大量输入参量的函数值,例如,feval( fun , x, y, z) 等价于求fun(x, y, z)值。?feval(sin,s)ans =Columns 1 through 7-0.3216 0.4520 0.5514 -0.9705 0.9454 0.5514 0.3796Columns 8 through 140.5514 0.9454 0.2367 -0.6897 -0.5064 0.4520 -0.0442Column 150.2367?eval(sin(s)ans =Columns 1 through 7-0.3216 0.4520 0.5514 -0.9705 0.9454 0.5514 0.3796Columns 8 through 140.5514 0.9454 0.2367 -0.6897 -0.5064 0.4520 -0.0442Column 150.2367l l 字符串的比较:strcmp(s1,s2)?strcmp(s,he is a student)ans =1l l 检查字符串?isletter(s)ans =Columns 1 through 121 1 0 1 1 0 1 0 1 1 1 1Columns 13 through 151 1 1l l 查找字符串?findstr(s,a)ans =7l l 大小写的变换?upper(s)ans =HE IS A STUDENT?lower(HE IS A STUDENT)ans =he is a studentMATLAB控制语句1. for循环语句For循环允许一组命令以固定的和预定的次数重复。For循环的一般形式是:for 变数 = 矩阵; 运算式; end在for和end语句之间的运算式按数组中的每一列执行一次。在每一次迭代中,x被指定为数组的下一列,即在第n次循环中,x=array(:, n)。?n=0:1:10;?y=n;?for i=1:11y(i)=sin(n(i);end?yy =Columns 1 through 70 0.8415 0.9093 0.1411 -0.7568 -0.9589 -0.2794Columns 8 through 110.6570 0.9894 0.4121 -0.5440l l For循环不能用For循环内重新赋值循环变量n来终止。l l 在For循环内接受任何有效的MATLAB数组。?a=1;?for i=ny=sin(n(a)a=a+1endy =0a =2y =0.8415a =3y =0.9093a =4y =0.1411a =5y =-0.7568a =6y =-0.9589a =7y =-0.2794a =8y =0.6570a =9y =0.9894a =10y =0.4121a =11y =-0.5440a =12l l For循环可按需要嵌套。?for i=1:11for j=1:11y(i)=sin(n(i);n(j)=n(j)*10;endend?yy =Columns 1 through 70 -0.5064 0.9300 -0.8027 -0.1425 -0.9765 -0.5118Columns 8 through 110.8586 -0.9957 0.9917 0.9287?nn =1.0e+012 *Columns 1 through 70 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000Columns 8 through 110.7000 0.8000 0.9000 1.0000l l 为了得到最大的速度,在For循环(While循环)被执行之前,应预先分配数组。建议最好先使用zeros或ones等命令来预先配置所需的内存(即矩阵)大小l l 可以利用break命令跳出for循环1. while循环语句While 循环以不定的次数求一组语句的值。While循环的一般形式是:while 条件式; 运算式; end只要在表达式里的所有元素为真,就执行while和end 语句之间的运算式。通常,表达式的求值给出一个标量值,但数组值也同样有效。在数组情况下,所得到数组的所有元素必须都为真。就是说,只要条件示成立,运算式就会一再被执行。?x = zeros(1,6); % x是一个的零矩阵i = 1;while i 0.5disp(i love you)endi love you如果有两个选择,If-Else-End结构是:if 条件式 运算式 else 运算式end在这里,如果表达式为真,则执行第一组命令;如果表达式是假,则执行第二组命令?if rand(1)0.5disp(i love you)elsedisp(i donot love you)endi donot love you当有多种选择时,可以执行下面的语句:if 条件式 运算式 elseif 条件式 运算式 elseif 条件式运算式最后的这种形式,只和所碰到的、与第一个真值表达式相关的命令被执行;接下来的关系表达式不检验,跳过其余的If-Else-End结构。而且,最后的else命令可有可无。应用:知道了如何用If-Else-End结构来决策,就有可能提出一种合理的方法来跳出或中断For循环和While循环5. switch-case语句一般switch-case语句格式为:switch numcase n1commandcase n2commandcase n3command.otherwisecommandend一旦num为其中的每个值或字符串时,就执行所对应的指令,没有对应时,则执行otherwise后的语句。辅助语句1. 注释语句l l 符号注解是由%起头,也就是说在%之后的任何文字都被视为程式的注解。注解的功能是简要的说明程式的内容,过多的注解在程式中或许没有必要,但是我们写程式时往往用了太少的注解。任何可能产生混淆的地方都应该省用注解,将适量的注解可在往后想了解程式时能节省一些不必要的时间与有看没有懂的痛苦。例如: 4*4 %这是个例子ans =162. 中断语句l l 格式:break终止一个循环语句的执行过程。特别可以利用break命令跳出for,while循环3. 暂停语句格式:pausepause(n)pause是程序暂时停止运行,直到按下回车键,继续执行程序。而pause(n)是中断n秒后,程序自动继续执行。Ctrl-C(即同时按Ctrl及C二个键)可以用来中止执行中的MATLAB的工作。4. 回显语句5. l 格式:echo on/off控制是否在屏幕上回显MATLAB的正在执行的语句。系统默然的状态是echo off这个功能的实现与我们调试程序很有帮助的。MATLAB的输入与输出语句 输入语句o 输入数值?x=input(please input a number:)please input a number:22x = 22o 输入字符串?x=input(please input a string:,s)please input a string:this is a stringx = this is a string 输出语句o 输出显示命令 自由格式 (disp)?disp(23+454-29*4)361?disp(11 22 33; 44 55 66; 77 88 99)11 22 3344 55 6677 88 99?disp(this is a string)this is a string 格式化输出 (fprintf)。fprintf(The area is %8.5fn, area) % 注意输出格式前须有%符号,%跳行符号须有符号The area is 12.56637 % 输出值为8位数含5位小数在这里你如果学过c语言就能很好的理解了。o 错误消息显示命令?error(this is an error)? this is an error 文件操作l l 变量的保存与调用我们可以使用save来将MATLAB工作间的变量保存到文件中,以便以后可以调用这些变量。一般格式:save filename variables从文件中调用变量的格式:load filename variables这里的文件的扩展名为.mat?a=1:1:100;?t=2323;?whos Name Size Bytes Class a 1x100 800 double array t 1x1 8 double arrayGrand total is 101 elements using 808 bytes?save ok a t?a=1;?t=2:0.1:3;?whos Name Size Bytes Class a 1x1 8 double array t 1x11 88 double arrayGrand total is 12 elements using 96 bytes?load ok a t?whos Name Size Bytes Class a 1x100 800 double array t 1x1 8 double arrayGrand total is 101 elements using 808 bytes比较一下前后以及中修改后的差别l l 文件的打开与关闭使用fopen 和fclose可以对普通的文件打开,关闭及处理的功能。格式:fp=fopen(fname,ftype)st=fclose(fp)?fp=fopen(ok.mat,r)fp =3?st=fclose(fp)st = 0l l 文件的输入与输出 1. 1. 不定格式读取a=fread(fp,size)从文件fp中读取数据保存到矩阵a中?a=fread(fp)?whos Name Size Bytes Class a 344x1 2752 double array fp 1x1 8 double array st 1x1 8 double array t 1x1 8 double arrayGrand total is 347 elements using 2776 bytes2指定格式读取a=fscanf(fp,format,size)从句柄fp所指定的文件中,按字符串format所指定的数据格式读取数据,把他们保存到矩阵a中。?str=fscanf(fp,%s)str =3将数据写入文件中。fprintf(fp,format,A,B,)将字符

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论