MATLAB科学计算.ppt

上传人:小飞机 文档编号:5439225 上传时间:2023-07-07 格式:PPT 页数:39 大小:372.50KB
返回 下载 相关 举报
MATLAB科学计算.ppt_第1页
第1页 / 共39页
MATLAB科学计算.ppt_第2页
第2页 / 共39页
MATLAB科学计算.ppt_第3页
第3页 / 共39页
MATLAB科学计算.ppt_第4页
第4页 / 共39页
MATLAB科学计算.ppt_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《MATLAB科学计算.ppt》由会员分享,可在线阅读,更多相关《MATLAB科学计算.ppt(39页珍藏版)》请在三一办公上搜索。

1、第五章 MATLAB科学计算,5.1 符号对象和符号表达式5.2 微积分运算5.3 线性代数运算5.4 数据分析5.55.6 可视化数学分析,5.1 符号对象和符号表达式,5.1.1 符号对象的生成和使用指令格式:f=sym(arg):把表达式arg转换为符号对象f=sym(argn,flagn):把表达式arg转换为flagn格式的符号对象argv=sym(argv,flgv):按flagv指定的要求把表达式argv定义为符号对象argvsyms(argv1,argv2,argvk):把字符arg1,arg2,argk定义为基本符号对象arg是数值及其表达式时,flag可取选项:d:最接近的

2、十进制浮点精确表示e:带估计误差的有理表示f:十六进制浮点表示r:最接近有理表示,缺省设置arg是字符时,flag可取选项:positive:限定argv为正实数符号变量real:限定argv为实数符号变量unreal:argv为非实数符号变量,5.1 符号对象和符号表达式,5.1.2 符号计算中的运算符和基本函数运算符:矩阵运算符:+、-、*、/、数组运算符:.*、./、.、.、.关系运算符:只有=、=函数运算:三角函数、双曲函数及其反函数指数函数、对数函数:只有log,没有log2、log10复数函数:conj、real、imag、abs,没有求相角的指令矩阵代数指令:diag、triu、

3、tril、inv、det、rank、rref、null、colspace、poly、expm、eig、svd特例:U,S,V=svd(A)如果A矩阵含有非常数的自由变量,只能使用S=svd(A)如果A不含有自由变量,U,S,V=svd(A)将可以给出32位精度的数值形式的符号解,5.1 符号对象和符号表达式,5.1.3 识别符号对象类别与自由变量确定识别符号对象类别:符号对象类别识别:class(sym)符号对象大小判别:size(sym)符号大小属性获取:whos sym自由变量确定findsym(expr):确认表达式expr中所有自由符号变量findsym(expr,n):从表达式exp

4、r中确认出靠x最近的N个独立自由变量,5.1 符号对象和符号表达式,5.1.4 符号表达式与符号函数的操作符号表达式的操作:collect(expr,v):对expr表达式中指定的符号对象v的同幂项系数进行合并expand(expr):对expr表达式进行展开factor(expr):对expr表达式进行因式分解horner(expr):把多项式expr分解为嵌套形式n,d=numden(expr):提取表达式expr的分母与分子simplify(expr):对表达式expr进行化简simple(expr):把expr转换为最简形式pretty(expr):以习惯的书写方式显示expr表达式符

5、号函数的操作:g=finverse(f,v):对函数f(v)求反函数g(v)g=finverse(f):对缺省自变量求反函数gfg=compose(f,g,v,w,t):对f(v)和v=g(w)求复合函数fg=f(g(w)fg=compose(f,g):依缺省自变量对f和g求复合函数fg=f(g()缺省自变量由findsym自动确定,5.1 符号对象和符号表达式,5.1.5 置换及其应用自动执行的子表达式置换RS,ssub=subexpr(S,ssub)运用符号变量ssub置换子表达式,重写S为RS被置换的子表达式是机器自动寻找的置换原则与pretty指令相同通用置换指令:RES=subs(E

6、S,old,new):用new置换ES中的old后产生RESRES=subs(ES,new):用new置换ES中的自由变量后产生RESRES=subs(ES):用当前内存中已知值置换ES中所有可能的同名变量后产生RESold可取串表达式、符号变量、元胞数组、数值变量subs指令可以嵌套,5.1 符号对象和符号表达式,5.1.6 符号数值精度控制与计算向双精度数值转换的double指令对符号运算结果采用double指令时所产生的误差是准确的符号结果转换为数值时产生的,而不是整个运算过程中积累而成完全由数值计算所得结果精度较差任意精度的符号数值digits:显示当前采用的数值计算的误差digits

7、(n):设置今后数值计算以n位相对精度进行xs=vpa(x):在digits指定精度下给出x的数值型符号结果xsxsvpa(x,n):在n位相对精度下给出x的数值型符号结果xs,5.1 符号对象和符号表达式,5.1.7 符号对象与其他数据对象间的转换符号、数值、字符串间的转换,数值型符号结果,符号常数,符号表达式,数值,字符串表达式,ASCII码,str2num str2double sscanf,int2str num2str mat2str sprintf,double,vpa,vpa,char,sym,char,double,sym,double,5.1 符号对象和符号表达式,5.1.7

8、 符号对象与其他数据对象间的转换符号多项式、系数向量、字符串多项式转换,符号多项式,数值系数向量,字符串多项式,易读型表达式,poly2str,char,sym,pretty,poly2sym,sym2poly,5.2 微积分运算,5.2.1 极限问题的求解一元函数的极限L=limit(fun,x,x0):求xx0时函数fun的极限L=limit(fun,x,x0,left或right):求xx0时函数fun的单侧极限L=limit(fun):默认x0时求函数fun的极限若x0为,则可以用inf直接表示多元函数的极限:L=limit(limit(f,x,x0),y,y0):求函数xx0,yy0

9、时函数f的极限L=limit(limit(f,y,y0),x,x0):求函数yy0,xx0时函数f的极限如果x0或y0不是确定的值,而是另一个变量的函数,则求极限的次序不可交换数值解法:要求函数f(x)的极限,可以将自变量x用x+eps代入f(x)直接计算如果x为,则同样可以用inf作为x的值直接计算,5.2 微积分运算,5.2.2 函数的导数一元函数的导数:y=diff(fun,x):求函数fun关于x的一阶导数y=diff(fun,x,n):求函数fun关于x的n阶导数多元函数的偏导数:fp=diff(diff(f,x,m),y,n):求函数f的m+n阶混合偏导数fp=diff(diff(

10、f,y,n),x,m):求函数f的m+n阶混合偏导数J=jacobian(y,x):求向量函数y对x的偏导数组成的Jacobi矩阵,5.2 微积分运算,5.2.3 函数的积分积分的解析解:Intf=int(f,v):求f对指定变量v的不定积分Intf=int(f,v,a,b):求f对变量v的定积分a、b分别是定积分的上下限,可以是任何合法表达式多重积分:int(int(f(x,y),y,a,b),x,c,d)交互式近似积分:aint=rsums(fx)fx必须是以x为自变量的一元函数积分在0,1区间上进行数值积分:矩形法、梯形法、Simpson法、Romberg法数值积分指令:q=quadl(

11、fun,a,b,tol,trace,p1,p2,)fun可以是字符串、内联函数、函数句柄A、b是积分的下限和上限,都是确定的数值前三个参数是必须的,后面的参数可以缺省tol是控制绝对误差的标量,缺省为10-6p1,p2等是向被积函数传递的参数S=dblquad(fun,a,b,c,d,tol,method):计算二重积分S=triplequad(fun,a,b,c,d,e,f,tol,method):计算三重积分,5.2 微积分运算,5.2.4 数值导数,3.2 M文件类型与运行机制,3.2.5 P码文件语法分析过程和伪代码一个M文件首次被调用时,MATLAB首先对该M文件进行语法分析,并把生

12、成的相应内部伪代码文件存放在内存中再次调用该M文件时,将直接调用该文件在内存中的P码文件,而不会对原码文件重复进行语法分析P码文件与原码文件有相同的文件名,但扩展名是.pP码文件运行速度高于原码文件如果存在同名的P码和原码文件,那么当该文件名被调用时,被执行的肯定是P码文件P码文件的预生成pcode FunName:在当前目录上生成FunName.ppcode FunName inplace:在FunName.m所在目录上生成FunName.p,3.2 M文件类型与运行机制,3.2.6 MATLAB的搜索过程如果MATLAB在一个文件中遇到指令cow其搜索过程如下:检查cow是否为一个变量名;

13、如果不是,执行下一步检查cow是否内建函数;假如不是,执行下一步检查cow是不是cow所在的M文件中的一个子函数;如果不是,再往下执行检查cow是不是cow所在的M文件中的一个私有函数;假如不是,再往下执行检查cow是不是当前目录上的文件;假如不是,再往下执行检查搜索路径上是否有cow存在MATLAB将使用最先找到的那个cow如果一直找不到cow,MATLAB就给出错误信息,3.3 MATLAB程序控制流,3.3.1 for循环控制结构格式:说明:x:循环变量,依次取array各列commands:循环体重复执行次数由array的列数决定for循环结构可以嵌套array可以是任何合法的MATL

14、AB数组循环不会因为在循环体内对循环变量重新设置新值而中断为了得到高效代码,应尽量提高代码的向量化程度,而避免使用循环结构为了得到高效代码,在循环指令之前应尽量对数组进行预定义,for xarray(commands)end,3.3 MATLAB程序控制流,3.3.2 while循环结构格式:说明:commands:循环体首先检测expression的值,如其为逻辑真,则执行循环体内的命令,直到expression的值为逻辑假时退出循环如果expression的值是数组,则只有在数组中所有元素均为真时才执行循环体while循环与for循环的区别是执行循环体的次数能否预先确定如果expressi

15、on的值为空数组,则MATLAB认为表达式值为假,而不执行循环体,while expression(commands)end,3.3 MATLAB程序控制流,3.3.3 ifelseend分支结构格式:一种选择两种选择多种选择说明表达式有时由多个逻辑子表达式组成,MATLAB将尽可能少地检测这些子表达式的值if指令判决和break指令的配合使用,可以强制终止for循环和while循环,if expression(commands)end,if expression(commands)else(commands)end,if expression1(commands)elseif express

16、ion2(commands)else(commands)end,3.3 MATLAB程序控制流,3.3.4 switch-case结构格式:说明:ex应为标量或字符串检测值testk类型可以是标量或字符串,也可以是元胞数组与C语言不同,在执行完每个case块后,MATLAB会自动跳出switch结构,无需使用break指令,switch ex case test1(commands)case test2 case testk(commands)otherwise(commands)end,3.3 MATLAB程序控制流,3.3.5 try-catch结构格式说明:只有当执行命令组1出现错误后,

17、命令组2才会被执行可调用lasterr函数查询出错原因如果lasterr的运行结果是一个空串,则表明命令组1被成功执行当执行命令组2时又出错,MATLAB将终止该结构,try(commands1)catch(commands2)end,3.3 MATLAB程序控制流,3.3.6 其它常用指令1.return:强制结束执行函数并把控制转出2.input:将控制权“暂时”交给用户v=input(message):将用户键入内容赋给vv=input(message,s):将用户键入内容作为字符串赋给v3.keyboard:将控制权交给键盘用户可以输入各种合法指令用户输入return指令后控制权交还给

18、程序4.v=yesinput(Prompt,Default,Possib)5.pause:暂停执行文件,等待用户按任意键继续6.break:使包含该指令的while、for循环终止7.continue:结束当前循环,开始下一次循环8.error和warning指令:error(message):显示出错信息,终止程序warning(message):显示警告信息,程序继续运行errortrap:错误发生后,程序继续执行与否的双位开关,3.4 函数类型与使用方法,3.4.1 输入输出参数检测检测指令:nargin:在函数体内,用于获取实际输入参数数目nargout:在函数体内,用于获取实际输出参

19、数数目nargin(fun):获取fun指定函数的标称输入参数数目nargin(fun):获取fun指定函数的标称输出参数数目inputname(n):在函数体内使用,给出第n个输入参数的实际调用变量名说明:在函数体内使用nargin、nargout的目的是与程序流控制指令配合,对于不同数目的输入输出参数,函数可以完成不同的任务nargin、nargout、inputname本身都是函数,而不是变量,因此用户不能使用赋值指令对它们进行处理,3.4 函数类型与使用方法,3.4.2 变长度输入输出参数格式varargin:变长度输入参数列表varargout:变长度输出参数列表变长度参数必须放在普

20、通参数之后varargin、varargout本身都是元胞数组,编写M函数文件时,它们每个元胞应当作一个普通输入参数处理M函数文件被调用时,函数输入变量首先依先后次序逐个对应分配给输入参数列表中那些被明确定义的普通输入参数,然后把剩余的输入变量依次逐个分配到varargin元胞数组的元胞中,因此varargin元胞数组的长度取决于分配到的输入变量数varargout的工作机理、规则与varargin相同,function outputs,varargout=funname(inputs,varargin),3.4 函数类型与使用方法,3.4.3 跨空间变量传递跨空间计算串表达式的值evalin

21、(ws,ex):跨空间计算串表达式值ws可取两个值:base和caller当ws取base时,从基本工作空间获得变量值当ws取caller时,从主调函数工作空间获得变量值evalin(ws,ex1,ex2):跨空间计算替代串表达式值先从所在函数空间获取变量值,用eval(exp1)计算原串表达式;若该计算失败,再从ws指定的工作空间获取变量值,再通过eval(ex2)计算替代串表达式跨空间赋值assign(ws,VN,x):跨空间向变量VN赋值,3.4 函数类型与使用方法,3.4.4 主函数和子函数主函数和子函数的定义:MATLAB允许一个M函数文件包含多个函数代码,其中第一个出现的函数称为主

22、函数,该文件中的其他函数称为子函数。保存时所用函数文件名与主函数文件名相同。外部程序只能对主函数进行调用子函数的性质在M函数文件中,主函数的位置不可改变,但子函数的排列次序可以任意改变子函数只能被处于同一文件的主函数或其他子函数调用在M函数文件中,子函数的优先级仅次于内建函数同一文件的主函数、子函数的工作空间彼此独立help、lookfor等指令都不能直接提供关于子函数的任何帮助信息子函数的帮助操作:help primefun/subfun,3.4 函数类型与使用方法,3.4.5 私有函数与重载函数,3.4 函数类型与使用方法,3.4.6 串演算函数,3.4 函数类型与使用方法,3.4.7 函

23、数句柄函数句柄的创建和观察函数句柄创建:利用符号,或利用转换函数str2func被创建句柄的函数文件必须在当前视野范围内如果函数不在当前视野内,所创建的函数句柄无效此时MATLAB既不会发布“出错”信息,也不会警告定义函数句柄时,所指定的函数名不应包括路径信息,也不应该包括扩展名函数句柄内涵观察:functionsfunctions函数只能接受(11)函数句柄数组,并返回一个单构架,包含若干个域,以记录函数的各种信息,3.4 函数类型与使用方法,函数句柄的用法通过函数句柄执行相应函数的计算无效函数句柄,3.4 函数类型与使用方法,3.4.8 嵌套函数在函数体内部定义的函数,包含M文件的基本元素

24、,以end表示结束可以在一个函数内部定义多个嵌套函数,也可以使用多重嵌套函数可以调用自己函数体中的嵌套函数,但不能调用嵌套函数内部更深层次的嵌套函数同级函数可以相互调用,也可以调用比自己低一级的嵌套函数嵌套函数拥有自己的工作空间,但是它有权限访问其所嵌套地方的所有函数的工作空间被主函数赋值的变量可以被主函数中任意一个嵌套函数访问,嵌套函数的变量值也可以被任何包含它的函数访问由嵌套函数返回的变量不包含在外部函数中使用函数句柄可以使得在函数的作用域之外也可以访问这个函数,但是函数的句柄必须在函数作用域内被创建嵌套函数在同一个M文件中与其他函数共享非全局变量,3.4 函数类型与使用方法,3.4.9

25、内联函数与匿名函数,3.4 函数类型与使用方法,3.4.10 函数使用方法,3.5 数据I/O与文件操作,2.3.3 元胞数组内容的调取调取一个元胞:使用圆括号,得到元胞调取一个元胞的内容:使用大括号调取元胞内的子数组同时调取多个元胞内容:deal,2.3 元胞数组及其运算,2.3.4 元胞数组与其它类型的转换把数值数组转换为元胞数组C=num2cell(A,dimN)把dimN指定“维号”方向的数组元素存为C的一个元胞dimN缺省时,默认数组每个元素各存为C的一个元胞把矩阵分解成元胞数组C=mat2cell(B,M,N)把矩阵B转换为元胞数组CM、N的元素数分别决定C的行数和列数M、N的元素

26、值分别决定C中相应位置元胞的行列大小把元胞数组转换为矩阵D=cell2mat(C)进行转换时元胞中的内容要合适,2.4 构架数组及其运算,2.4.1 构架数组的创建和显示直接创建法及显示创建方式:构架名.域名.子域名显示方法:构架名.域名.子域名利用构造函数创建构架数组构造函数structstruct不能直接创建带子域的构架数组子域需要另行创建,2.4 构架数组及其运算,2.4.2 构架数组域中内容的调取和设置前提:事先知道域名调取和设置:FN=fieldnames(S_n):获得构架域名FC=getfield(S_n,S_index,f_name,f_index):获得具体构架域中内容S_n

27、=setfield(S_n,S_index,f_name,f_index,value):设置具体构架域中内容,2.4 构架数组及其运算,2.4.3 构架数组操作深入应用构架数组的扩充和收缩扩充:增加行、列,扩充维数收缩:将某行(列)赋给空值,删除该行(列)增添域和删除域在数组中任何一个构架上增添域,其影响遍及整个构架数组增添子域的操作只影响被操作的具体构架,而不影响整个构架数组删除子域的操作也只影响被操作的具体构架删除域的操作针对整个构架数组实施数值运算操作和函数对构架数组的应用,2.4 结构数组及其运算,2.4.4 构架数组和元胞数组之间的转换构架转换为元胞:函数struct2cell把构架数组的域转换为元胞数组的行元胞数组的第二维对应构架数组的第一维构架数组中的子域仍被作为子构架存放元胞转换为构架:函数cell2struct先决定把元胞的哪一维转换为构架的域要事先给出域名字符串,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号