您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > MATLAB实用技巧精讲之二
数学物理建模与计算机辅助设计Page1第二章MATLAB的数值计算功能1.多项式的运算。2.MATLAB矢量化。3.MATLAB的符号计算功能。数学物理建模与计算机辅助设计Page2MATLAB的数值计算功能:多项式运算•多项式的表示方法1011()nnnnPxaxaxaxa011[,,,,]nnPaaaa例如:输入多项式p(x)=x3-5x2+6x-33p=[1-56-33];poly2sym(p)ans=x^3-5*x^2+6*x-33数学物理建模与计算机辅助设计Page3MATLAB的数值计算功能:多项式运算•求多项式的根–用函数roots求解多项式的根例:求解方程p(x)=2x4-5x3+6x2-x+9的所有根p=[2-56-19];roots(p)ans=1.6024+1.2709i1.6024-1.2709i-0.3524+0.9755i-0.3524-0.9755i数学物理建模与计算机辅助设计Page4MATLAB的数值计算功能:多项式运算•多项式的四则运算(1)加法和减法对于多项式的加法和减法,MATLAB不提供专用的函数。(2)乘法和除法–乘法由函数conv来实现,其使用格式为c=conv(a,b)–除法由deconv实现,其使用格式为d=deconv(a,b)数学物理建模与计算机辅助设计Page5MATLAB的数值计算功能:多项式运算•多项式的乘除运算–乘法由函数conv来实现–除法由deconv实现例:计算两多项式的乘除法pd=[6-195432-4539-792-162];poly2sym(pd)ans=6*x^6-195*x^5+432*x^4-453*x^3+9*x^2-792*x-162d=[3-90-18];poly2sym(d)ans=3*x^2-90*x-18p1=deconv(pd,d)p1=2-56-196543261954324539792162pdxxxxxxx239018dxxx43212569pxxxxx数学物理建模与计算机辅助设计Page6MATLAB的数值计算功能:多项式运算•对多项式求导数–采用函数polyder对多项式求导数,polyder(p)例:p=[6-195432-4539-792-162];poly2sym(p)ans=6*x^6-195*x^5+432*x^4-453*x^3+9*x^2-792*x-162Dp=polyder(p)Dp=36-9751728-135918-792poly2sym(Dp)ans=36*x^5-975*x^4+1728*x^3-1359*x^2+18*x-7926543261954324539792162pxxxxxxx5432369751728135918792dpxxxxxxdx数学物理建模与计算机辅助设计Page7MATLAB的数值计算功能:多项式运算•多项式拟合–多项式拟合用拟合函数polyfit实现,调用格式•polyfit(X,Y,n)X和Y为拟合数据,n为拟合多项式的阶数例:用5阶多项式对[0,π/2]上的正弦函数进行拟合,并图示拟合情况。x=0:pi/20:pi/2;y=sin(x);a=polyfit(x,y,5);x1=0:pi/30:pi*2;y1=sin(x1);y2=a(1)*x1.^5+a(2)*x1.^4+a(3)*x1.^3+a(4)*x1.^2+a(5)*x1+a(6);plot(x1,y1,'b-',x1,y2,'r*');legend('原曲线','拟合曲线')axis([0,7,-1.2,4])数学物理建模与计算机辅助设计Page8MATLAB的数值计算功能:保存与再用•把Matlab工作空间中一些有用的数据长久保存下来的方法是生成mat数据文件save——将工作空间中所有的变量存到matlab.mat文件中savedata将工作空间中所有的变量存到data.mat文件中savedataab将工作空间中a和b变量存到data.mat文件中loaddata——将data.mat记录的变量调入工作空间数学物理建模与计算机辅助设计Page9MATLAB的数值计算功能:Matlab矢量化•何为矢量化–问题尽量使用矩阵表述–避免出现太多(两重或以上)的循环嵌套•矢量化技术的目的在于改善程序的性能例1:有一200×400矩阵datafori=1:200,forj=1:400,ifdata(i,j)0data(i,j)=0;endendendcputime=0.0470data(data0)=0;cputime=0.0160数学物理建模与计算机辅助设计Page10MATLAB的数值计算功能:Matlab矢量化例2:上万个点的计算采用矢量化技术可以大幅度提高运算速度%一般循环编程i=0;fort=0:.01:10000,i=i+1;y(i)=sin(t);end%矢量化编程t=0:.01:10000;y=sin(t);cputime20秒cputime=0.2340秒数学物理建模与计算机辅助设计Page11MATLAB的数值计算功能:Matlab矢量化•使用向量作索引–如果X和V都为向量–X(V)就是[X(V(1)),X(V(2)),...,X(V(n))]例:X=[25811141720232629]V=[426]X(V)就是[X(4)X(2)X(6)],即[11517]数学物理建模与计算机辅助设计Page12MATLAB的数值计算功能:Matlab矢量化•创建和操作矩阵–从向量构建矩阵例1:A=ones(5,5)*10;A=10;A=A(ones(5,5));例2:M=repmat([1:5]',[1,3]);M=111222333444555怎样用repmat生成5×5全10矩阵?乘法是不必要的A=10101010101010101010101010101010101010101010101010数学物理建模与计算机辅助设计Page13MATLAB的数值计算功能:Matlab矢量化•排序、设置和计数–max最大元素–min最小元素–sort递增排序–unique递增排序并且去掉相同元素例1:找出向量中最大元,返回其下标a=[5278912752578];[Y,I]=max(a)Y=525I=7数学物理建模与计算机辅助设计Page14MATLAB的数值计算功能:Matlab矢量化•排序、设置和计数例2:向量元素排序a=[5278912752578];sort(a)ans=2577127889525unique(a)ans=257127889525数学物理建模与计算机辅助设计Page15MATLAB的符号计算功能•1993年之前的符号计算语言:Maple、Mathematic和MathCAD等•1993年Mathworks公司为了解决MATLAB用户对符号计算的需求,从加拿大滑铁卢大学购买了Maple的使用权,并在此基础上开发了符号计算工具箱(SymbolicToolbox)•至此Matlab不仅具有数值运算功能,具有符号计算功能数学物理建模与计算机辅助设计Page16MATLAB的符号计算功能•本部分包含内容–符号表达式、符号矩阵的创建–符号线性代数–因式分解、展开和简化–符号代数方程求解–符号微积分–符号微分方程数学物理建模与计算机辅助设计Page17MATLAB的符号计算功能符号运算与数值运算的区别•数值运算中必须先对变量赋值,然后才能参与运算。•符号运算无须事先对独立变量赋值,运算结果以标准的符号形式表达。符号运算的特点:•运算对象可以是没赋值的符号变量•可以获得任意精度的解–尽管MATLAB7的符号运算功能很强大,但是一门优秀的语言应该能够博采众家之长。因此MATLAB7语言提供了和MAPLE语言的良好接口,通过maple.m和map.m两个专用的M文件来实现。数学物理建模与计算机辅助设计Page18MATLAB符号变量和符号表达式的生成和使用定义基本符号对象的指令有两个:sym,syms。它们的常用使用格式如下:f=sym(arg)%把数字、字符串或表达式arg转换为符号对象f。syms(‘argv1’,‘argv2’,‘argvk’)%把字符arg1,arg2,argk定义为基本符号对象。symsargv1argv2argvk%上述格式的简洁形式。数学物理建模与计算机辅助设计Page19MATLAB符号变量和符号表达式的生成和使用【例】符号常数形成中的差异。a1=[1/3,pi/7,sqrt(5),pi+sqrt(5)]a1=0.33330.44882.23615.3777a2=sym('[1/3,pi/7,sqrt(5),pi+sqrt(5)]')a2=[1/3,pi/7,sqrt(5),pi+sqrt(5)]a3=sym([1/3,pi/7,sqrt(5),pi+sqrt(5)])a3=[1/3,pi/7,sqrt(5),6054707603575008*2^(-50)]a23=a2-a3a23=[0,0,0,pi+5^(1/2)-189209612611719/35184372088832]数学物理建模与计算机辅助设计Page20MATLAB符号变量和符号表达式的生成和使用【例】使用sym函数定义符号表达式2axbxca=sym('a');b=sym('b');c=sym('c');x=sym('x');f=a*x^2+b*x+cf=a*x^2+b*x+c也可以采取整体定义法f=sym('a*x^2+b*x+c')f=a*x^2+b*x+c数学物理建模与计算机辅助设计Page21MATLAB符号变量的生成和使用【例题】用符号计算验证三角等式121212sincoscossinsin()symsfai1fai2y=simple(sin(fai1)*cos(fai2)-cos(fai1)*sin(fai2))y=sin(fai1-fai2)cleary=simple(sin(fai1)*cos(fai2)-cos(fai1)*sin(fai2))???Undefinedfunctionorvariable'fai1'.数学物理建模与计算机辅助设计Page22符号表达式(符号函数)的操作•符号表达式的四则运算symsxyabfun1=sin(x)+cos(y);fun2=a+b;fun1+fun2ans=sin(x)+cos(y)+a+bfun1*fun2ans=(sin(x)+cos(y))*(a+b)fun1/fun2ans=(sin(x)+cos(y))/(a+b)数学物理建模与计算机辅助设计Page23MATLAB符号矩阵的创建–用Matlab函数sym创建矩阵–命令格式:A=sym('[]')–※需用sym函数–※需用''标识注意:数值矩阵A=[1,2;3,4]有效,A=[a,b;c,d]则不识别!例:B=sym('[a,2*b;3*a,0]')B=[a,2*b][3*a,0]这就完成了一个符号矩阵的创建。符号矩阵的每一行的两端都有方括号,这是与Matlab数值矩阵的一个重要区别。数学物理建模与计算机辅助设计Page24MATLAB符号矩阵的创建•用生成子矩阵的方法生成符号矩阵命令格式:A=[‘[]’;‘[]’]【例题】用生成子矩阵的方法生成符号矩阵h1=['[55,ttt]';'[44,1]']???Errorusing==vertcatAllrowsinthebracketedexpressionmusthavethesamenumberofcolumns.h2=['[55,ttt]';'[44,1]']h2=[55,ttt][44,1]•该方法不需要调用sym
本文标题:MATLAB实用技巧精讲之二
链接地址:https://www.777doc.com/doc-8124713 .html