Matlab学习笔记.docx_第1页
Matlab学习笔记.docx_第2页
Matlab学习笔记.docx_第3页
Matlab学习笔记.docx_第4页
Matlab学习笔记.docx_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

基础知识重要知识l ; 语句结束,屏蔽显示,提高编译效率l . 分行书写l Size 获取矩阵的尺寸l 0.01 可以简写为 .01l Matlab 中运算表达式中更改优先级的括号()和均可以,但是函数参数中必须要用()l 转置运算法l clc 清屏(命令窗口)l clear 清除变量l % 行注释l Who / whos 查看工作空间变量l Plot 绘图函数X=0:0.1:6;Y=sin(x);Plot(x, y);l 帮助HelpdeskDocHelpwinHelp XXX 索引帮助Lookfor * 内容查找l DiaryDiary filename 命令窗口日志(命令窗口的输出和输入都会被保持到文件中)Diary off 终止日志写入Diray on 重新日志写入l 常用符号+ - * / exp(自然指数)Matlab 搜索路径Path: 查看搜索路径Addpath 增加目录到搜索路径Path2rc 增加当前目录到搜索路径Rmpath 移除matlab中的搜索路径Pathtool 图形化设置搜索路径UserPath 设置启动目录 设置完后要 savepath保持Cd 当前目录(不带参数直接显示当前目录) 也可以像dos命令一样更改当前目录which 命令,它能帮助我们找到正在执行的m文件版本和它的路径(若有多个同名m文件,按照路径搜索顺序返回第一个)。如果用户在MATLAB 提示符后输入一个名字,那么MATLAB 在解释器将按以下顺序寻找这个名字:1. 它先查看这个名字是否是个变量名。如果它是一个变量,MATLAB 将会显示出这个变量的值。2. 然后检查看它是否是内建函数或命令。如果是,则执行对应的函数或命令。3. 检查是不是在当前目录下的一个M 文件。如果是,则执行对应的函数或命令。4. 检查是不是在MATLAB 搜索路径的所有目录下的一个M 文件。如果是,则执行对应的函数或命令。注意:如果首先检测到的是变量名,且这个变量名与MATLAB 的某一个函数或命令同名,那么这个函数或命令将变得无法访问。这是初学者易犯的错误之一。编程隐患如果变量名与MATLAB 中的函数或命令重名,那么这个函数或命令将不能被访问。还有,如果有多个函数或命令重名,那么MATLAB 将会执行在搜索路径中找到的第一个,其他的将不会被执行。对于初学者,这也是一个常见的问题,往往将M 文件的名字与MATLAB 内建函数或命令重名,从而导致函数或命令的不能访问。编程隐患不要创建和MATLAB 内建函数或命令同名的M 文件。数据的显示format 改变默认显示格式当数据重复在命令窗口(The Command Windows)时,整数以整形形式显示,其他值将以默认格式显示。MATLAB 的默认格式是精确到小数点后四位。如果一个数太大或太小,那么将会以科学记数法的形式显示。x = 100.11y = 1001.1z = 0.00010011x = 100.1100y = 1.0011e+03z = 1.0011e-04format 命令 结果 例子format short 保留小数点后4 位(默认格式) 12.3457format long 保留小数点后14 位 12.345678901234567format short e 带有5 位有效数字科学记数法1.2346e+00format short g 总共有5 个数字,可以用科学记数法,也可不用 12.346format long e 带有15 位有效数字科学记数法 1.234567890123457e+001format long g 总共有5 个数字,可以用科学记数法,也可不用 12.3456789012346format bank美元格式 12.35format hex 用16 进制表示 4028b0fcd32f707aformat rat 两个小整数的比 1000/81format compact 隐藏多余的换行符format loose 使用多余的换行符format + 只显示这个数的正负 +disp 显示数据另一种显示数据的方法是用disp 函数。disp 需要一个数组参数,它将值将显示在命令窗口(The Command Windows)中。如果这个数组是字符型(char),那么包含在这个数组中的字符串将会打印在命令窗口(The Command Windows)中。此函数可联合num2str(将一个数转化为字符串)和int2str(将一个整数转化为字符串)来产生新的信息,显示在命令窗口(The Command Windows)中。例如,下面的语句将“the value of pi=3.1416”显示在命令窗口(The Command Windows)中。第一句创建了一个字符型数组,第二句用于显示这个数组。str=the value of pi= num2str(pi); 定义字符数组,数组元素间空格或逗号间隔均可disp(str);the value of pi=3.1416b = 7 8 9; disp(b) 7 8 9fprintf 格式化显示数据用fprintf 函数显示数据是一种十分简便方法。fprintf 函数显示带有相关文本的一个或多个值,允许程序员控制显示数据的方式。 fprintf(the value of pi is %6.2fn, pi) %n别忘了,否则命令提示符紧跟在字符串the value of pi is 3.14 % 后面,很难看fprintf 函数有一个重大的局限性,只能显示复数的实部。当我们的计算结果是复数时,这个局限性将会产生错误。在这种情况下,最好用disp 显示数据。format string 结果%d 把值作为整数来处理%e 用科学记数法来显示数据%f 用于格式化浮点数,并显示这个数%g 用科学记数格式,或浮点数格式,根据那个短,并显示之n 转到新的一行例如,下列语句计算复数x 的值,分别用fprintf 和disp 显示x=2*(1-2*i)3;str=disp: x = num2str(x);disp(str);fprintf(fprintf: x = %8.4fn,x);打印的结果如下disp: x = -22+4ifprintf: x = -22.0000编程隐患fprintf 函数只能复数的实部,所以在有复数参加或产生的计算中,可能产生错误的结果。数据的保存SaveSave filename var1 var2 ascii -append为了与其他程序交互,使用-ascii 为区分,扩展名建议用datMatlab 自己用,不要-ascii, 扩展名自动为mat,跨版本、跨平台matlab互认mat文件Loadload filename -asciiMatlab变量变量名MATLAB 的变量名必须以字母开头,后面可以跟字母,数字和下划线(_).只有前31个字符是有效的;如果超过了31 个字符,基余的字符将被忽略。如果声明两个变量,两变量名只有第32 个字符不同,那么MATLAB 将它们当作同一变量对待。在MATLAB 语言中是区分字母大小的,也就是说,大写字母和小写字母代表的东西是不同的。所以变量NAME,Name,name 在MATLAB 中是不同的。所以已用过的小写变量名与一个新建大写的变量名重名,这时使用时要特别地小心。在一般情况下,我们一律用小写字母来表示。MatLab中变量名一般用小写,名称单词间用下划线 _ 隔开。Double 和 char型两个最常见的变量类型是char 型和double 型。double 型的变量包括由64 位双精度浮点数构成的标量或数组。这种变量可以代表实数,虚数和复数。每个值的实部和虚部的变化范围为正负10-30810308,拥有15 到16 位有效数字。这是基本的数字数据类型。无论什么时侯,你将一个数值赋值于一个变量名,那么MATLAB 将自动建立一个double型变量。例如,下面语句创建了一个以var 为变量名的double 型变量,包含了一个double型的单个元素,存储了复数值(1+i);Var = 1+i;char 型的变量包括由16 位数值构成的标量或数组,每一个16 位数代表一个字符。这个类型的经常用于字符串操作,当一个字符或字符串赋值于一个变量名时,系统会自动建立一个char 型变量。例如,下面的这个语句创建了一个char 型变量comment,并存储了一个字符串在其内。当这个语执行后,系统将会建立一个126 的字符串数组。Comment = That is a character string;变量赋值1用赋值语句初始化变量2用input 函数从键盘输入初始化变量3从文件读取一个数据特殊变量函数 用途pi 有15 个有效值的i,j 代表虚数i( 1 )Inf 这个符号代表无穷大,它一般情况下是除以0 产生的NaN 这个符号代表没有这个数。它一般由数学运算得到的。例如,0 除以0。clock 这个特殊变量包含了当前的年,月,日,时,分,秒,是一个6 元素行向量date 当前的日期,使用的的字符形式,如30-Dec-2007eps 变量名是epsilon 的简写。它代表计算能机辨别的两数之间的最小数ans 常用于存储表达式的结果,如果一个结果没有明确的赋值给某个变量编程隐患不要重定义有意义的预定义变量。否则将后患无穷,制造成出小而难以发现的错误。矩阵(数组)矩阵的定义a = 2; %matlab中所有变量都认为是矩阵(11)b = 1:0.1:2 /向量c=1 2 3 或 c=1, 2, 3 或 c = 1, 2 3 空格或逗号都可以分割元素d = 1 2 3 ; %分号分割矩阵的行4 5 6 ; 7 8 9e = 1, 2, 3 %换行符分割矩阵的行,e为23维矩阵 4, 5 6f = 1, 2, 3, %行尾3后面有个逗号,f仍为23维矩阵 4, 5, 6;G = 1,2,3 ,4, 5 ,6; % 行首4前面有逗号,g仍为23维矩阵 为空数组,没有行,没有列,注意它与元素全为0的数组区别。1,2,3; 4, 5这样的表达式是非法的,因为第一行有3 个元素,第二行有只有2 个元素.H = 0 1+7 g = h(2), h(1)+5 数组可以用表达式初始化当我们创建一个数组时,不是每一个元素都必须定义.如果要定义一个特殊的数组,或只有一个或几个元素没有定义,那么之前的那些元素将会自动创建,并初始化为0.例如,如果数组c 事先没有定义,语句c(2,3)=5 将会创建一矩阵0 0 50 0 0相似地,指定一个值赋予一个存在的数组,但超过了这个数组的大小。例如,假设存在一数组d=1 2,下面这个语句d(4) = 4, 将会制造出数组 d = 1, 2 ,0 4; 注意:对于已定义的矩阵,已有一维向量才可以这样对越界外的位置赋值来扩展矩阵,二维或多维矩阵会报非法操作。矩阵快捷赋值Clone运算符注意:创建的结果 first= target eye(2,3)ans = 1 0 0 0 1 0 eye(3,2)ans = 1 0 0 10 0Input初始化变量 my_val = input(Enter the value: )Enter the value: 23my_val = 23 my_val = input(Enter the value: , s)Enter the value: 25当这个语句被编译时,MATLAB 打印出字符串enter an input value:,然后等待用户回复.如果要只输入一个数,那么只需要直接键入,如果要输入一个数组,则必须带上中括号().不管怎样,当按下回车键时.在窗口输入的任何值都会被储入变量my_val.如果只按下回车键,那么这个变量就存储了一个空矩阵.如果input 函数中有字符s做为它的第二个参数,输入的数据就被当字符串矩阵的元素访问(注意:小括号):d = 1 2 3 ; 4 5 6 ; 7 8 9d(1) 值为1/下标从1开始,0会报错, d(0)和d(10)越界都非法。d(2) 值为4 /matlab中矩阵元素按列存储,d(2)为第二行第一个元素,而不是第一行第二个元素。d(1, 2) 值为5/第一行、第二列的元素sub2ind ind2sub下标值转化为索引值f = 1 2 3 4 5 6 sub2ind(size(f), 2, 2)ans = 4b = 1 2 3 4 5 6 sub2ind(size(b), 2, 2)ans = 4 I J = ind2sub(size(b), 4) /将索引4转换为坐标 中存储行坐标J中存储列坐标I = 2J = 2 I J = ind2sub(size(b), 3 4) / 求索引3和4转换为行、列坐标I = 1 2J = 2 2I J = ind2sub(size(b), 3 4; 5 6) / 同时将 3 4 5 6 转换为行、列坐标I = 1 2 1 2J = 2 2 3 3多维数组c(:, :, 1) = 1 2 3 ; 4 5 6; /注意c的是括号, 还要求c未被定义,否则两个:会从已定义的变量c中获取行、列值,赋值维数不匹配会报错。 c(:, :, 2) = 11 12 13 ; 14 15 16; cc(:,:,1) = 1 2 3 4 5 6c(:,:,2) = 11 12 13 14 15 16 size(c)ans = 2 3 2数组的内存分配一个有m 行和n 列的二维数组包括mn 个元素,这些元素在计算机的内存中将会占有mn 个连续的内存空间。这些数组的元素在内存中是如何排列的呢?MATLAB 以列主导顺序分配数组中的元素。也就是说,内存先分配第一列的元素,然后第二列,第三列,以此类推,直到所有列都被分配完。图2.3 说明43 数组a 的内存分配情况。正如我们所看到的,元素a(1,2)是其实在内存分配的第五个位置。在下一节我们讨论用单一下标访问数组元素和第八章低级I/O 接口,内存分配元素的顺序将变得十分重要。行(row) 列(colum) 页(page) 这种分配方式也适用于多维数组。数组的第一个下标增长最快,第二个仅次之,依此类推,最后一个变化最慢。例如,在一个222 数组中,它的元素在内存中的分配顺序是(1,1,1),(2,1,1),(1,2,1),(2,2,1),(1,1,2),(2,1,2),(1,2,2),(2,2,2)。子数组(end 到行/列尾)你可以选择和使用一个 MATLAB 函数的子集,好像他们是独立的数组一样。在数组名后面加括号,括号里面是所有要选择的元素的下标,这样就能选择这个函数的子集了。例如,假设定义了一个数组arr1 如下arr1 = 1.1 -2.2 3.3 -4.4 5.5那么arr1(3)为3.3,arr1(1 4)为数组1.1 -4.4,arr1(1:2:5)为数组1.1 3.3 5.5.b = 1 2 3 4 5 6 b(:, 1) /:表示行全选,1表示第一列。合起来是第一列(的所有行)ans = 1 4 b(:, 1 2) /第1,2列ans = 1 2 4 5 b(:, 1:2:5) /1:2:5 的结果是1 3 5, 列5越界Index exceeds matrix dimensions. b(:, 1:2:3) /1:2:3的结果是1 3,取1,3列ans = 1 3 4 6又如:a = 1 2 3 4 5 6 7 8 9 a(1 2, 1 2)ans = 1 2 4 5End (到行/列尾) a(2:end, :)ans = 4 5 6 7 8 9子数组在左边的赋值语句的使用只要数组的形(行数和列数)和子数组的形相匹配,把子数组放于赋值语句的左边用来更新数组中的值。如果形不匹配,那么将会有错误产生。例如,下面有一个34 数组定义arr4 = 1 2 3 4 5 6 7 8 9 10 11 12 arr4(1:2, 1 4)ans = 1 4 5 8 arr4(1:2, 1 4) = 20 21; 22 23arr4 = 20 2 3 21 22 6 7 23 9 10 11 12 arr4(1:2, 1 4) = 20 21 22; 23 24 25Subscripted assignment dimension mismatch.编程隐患对于涉及子数组的赋值语句,等号两边的形必须相匹配。否则将会产生错误。用一标量来给子数组赋值位于赋值语句的右边的标量值总是能匹配左边数组的形。这个标量值将会被复制到左边语句中所对应的元素。例如,假设用一个数组arr4 定义如下:arr4 = 1 2 3 4 5 6 7 8 9 10 11 12 arr4(1:2, 1:2)ans = 1 2 5 6 arr4(1:2, 1:2) = 1arr4 = 1 1 3 4 1 1 7 8 9 10 11 12Matlab 的运算标量间的运算 + - * / 数组和矩阵运算运算 MATLAB 形式 注释数组加法 A + B 数组加法和矩阵加法相同数组减法 A B数组减法和矩阵减法相同数组乘法(数乘) A.*B A和B 的元素逐个对应相乘.两数组之间必须有相同的形,或其中一个是标量.矩阵乘法 A*B A和B 的矩阵乘法.A 的列数必须和B 的行数相同.数组右除法 A./B A 和B 的元素逐个对应相除: A(i,j)/B(i,j)两数组之间必须有相同的形,或其中一个是标量.数组左除法 A.B A和B 的元素逐个对应相除: B(i,j)/A(i,j)两数组之间必须有相同的形,或其中一个是标量.矩阵右除法 A/B 矩阵除法,等价于A*inv(B), inv(B)是B 的逆阵矩阵左除法 AB 矩阵除法,等价于inv(A)*B, inv(A)是A 的逆阵数组指数运算 A.B AB 中的元素逐个进行如下运算A(i,j)B(i,j), A(i,j)/B(i,j)两数组之间必须有相同的形,或其中一个是标量.运算优先级1) 括号里的内容先运算,从最里面的括号去运算2) 幂运算,从左向右3) 乘除法,从左向右4) 加减法,从左向右Matlab的内建函数max min 选择性结果,多返回值与数学的函数不同,MATLAB 函数返回一个或多个值给调用函数。max 函数就是这样的一个例子。这个函数一般情况下返回输入向量中的最大值,但是它返回的第二个参数是输入向量中的最大值在向量中的位置。例如,语句maxval = max (1 -5 6 -3)返回的结果为maxval=6,但是要有两个返回值,那么这个函数包括最大所处的位置。maxval index = max (1 -5 6 -3)将会产生结果maxval=6,和index=3.数组作为输入参数许多MATLAB 函数定义了一个或多个标量输入,产生一个输出。例如,语句y=sin(x)计算了x 的正弦,并将结果存储到y 变量中。如果这些函数接受了输入值构成的数组,那么MATLAB 将一一计算出每个元素所对应的值。x=0 pi/2 3*pi/2 2*pi那么语句y=sin(x)将会产生y=0 1 -1 -0.Matlab系统函数函数 描述l 数学函数abs(x) 计算x 的绝对值acos(x) 计算x 的反余弦函数angle(x) 计算复数x的幅角asin(x) 计算x 的反正弦函数值atan(x) 计算x 的反正切函数值atan2(y,x) tan- -2(y/x)cos(x) cosxexp(x) exlog(x)logexvalue,index=max(x) 返回x 中的最大值,和它所处的位置value,index=min(x) 返回x 中的最小值,和它所处的位置mod(x,y)余数sin(x) sinxsqrt(x)x 的平方根 (x可以为负数)tan(x) tanxl rounding(取整)函数ceil(x)fix(x)round(x)l 字符转换函数char(x) 将矩阵中的数转化为字符,矩阵中的元素就不大于127double(x) 将字符串转化为矩阵int2str(x) 将整数x 转化为字符串形式num2str(x

温馨提示

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

评论

0/150

提交评论