第4章Matlab的其他函数库课件_第1页
第4章Matlab的其他函数库课件_第2页
第4章Matlab的其他函数库课件_第3页
第4章Matlab的其他函数库课件_第4页
第4章Matlab的其他函数库课件_第5页
已阅读5页,还剩104页未读 继续免费阅读

下载本文档

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

文档简介

第1节数据分析数据库

4.1.1基本的数据分析基本数据处理功能是按列进行,行向则表示数据的不同的样本。P63表例data=[154498367;158998175;1551006886;145637596;145637596;...141556575;155566485;147898777;1479654100;145607667]std(标准差)指各列中N个元素与该列平均值的平方和开方trapz(求积分)梯形法求积分近似求元素和4.1.2用于场论的数据分析cradient求二维场和三维场的近似梯度del2求二维场和三维场的拉普拉斯算子cross两个相量的矢量积(叉乘)cot两个相量的数量积(点乘)4.1.3用于随机数据分析的函数rand(m,n)产生在0和1之间的m行n列的随机数矩阵randn(m,n)产生正态分布的m行n列随机数矩阵x=rand(1,1000);hist(x)y=randn(1,1000);hist(y,50)4.1.4用于相关分析和傅立叶分析的函数用于信号的时域分析和频域处理。corrcoef给出两个同长信号的相关系数cov(x,y)给出协方差矩阵conv(x,y)给出x,y的卷积Filter(b,a,y)根据输入信号x和线性系统求输出信号的函数X=fft(x,N)求出时域信号x的离散傅立叶变换Xt=0:.001:3;u=sin(300*t)+2*cos(200*t);U=fft(u);plot(abs(U))第2节矩阵的分解与变换(matfun函数库)

4.2.1线性方程组的系数矩阵det(a)求方阵a的行列式rank(a)秩trace(a)矩阵主对角线上元素的和(迹)inv(a)逆阵pinv(a)4.2.2矩阵的分解p68正交分解(qr分解)[q,r]=qr(b)奇异值分解(svd分解)[u,s,v]=svd(b)4.2.3矩阵的特征值分析[e,r]=eig(a)4.2.4特殊矩阵库specmat常用的矩阵函数函数功能det计算矩阵所对应的行列式值inv求矩阵的逆矩阵rank求矩阵的秩eig求特征值和特征向量orth正交化poly求特征多项式lu用高斯消元法所得的系数矩阵qr正交三角矩阵分解第3节多项式函数库(polyfun)一元高次代数多项式Matlab中的表示方法a=[a(1),a(2),…,a(n),a(n+1)]幂次隐含在系数元素离向量右端的元素间隔中例:a(x)=3x3+2x+1则a=[3,0,2,1]4.3.1多项式简介多项式是形如下式的式子:P(x)=a0xn+a1xn-1+…+an-1x+an在MATLAB中,多项式用行向量表示:P=[a0a1a2…an-1an]多项式行向量的构造直接键入,无该次幂则取零用poly(A)命令来生成矩阵A的特征多项式。*如果A是形如[a0a1…an-1an]的向量,由命令poly(A)可生成(x-a0)(x-a1)…(x-an-1)(x-an)所对应的多项式。例:已知向量A=[1–34–80],用此向量构造一多项式并显示结果。A=[1-34-80];PA=poly(A)PA=11132606-2720PAX=poly2sym(PA,'X')PAX=X^3+113*X^2+2606*X-27204.3.2多项式运算多项式的加减运算运算符+-进行加减运算的多项式应该具有相同的阶次,如果阶次不同,低阶的多项式必须用零添补至高阶多项式的阶次。例:求两个多项式a(x)=5x4+4x3+3x2+2x+1和b(x)=3x2+0x+1的和。a=[54321];b=[301];c=a+[00b]c=54622多项式乘法多项式乘法采用conv函数。据上例求积:d=conv(a,b)d项式除法由deconv函数完成,结果包括商和余数两部分。[div,rest]=deconv(d,a)div=301rest=0000000微分提供了微分函数polyder例:求多项式p(x)=2x4-6x3+3x2+0x+7的微分。p=[2-6307];q=polyder(p)q=8-1860pd=poly2sym(q,'x')pd=8*x^3-18*x^2+6*x求根多项式求根可用roots函数。例:求多项式p(x)=2x4-6x3+3x2+0x+7的根。p=[2-6307];x=roots(p)x=1.9322+0.4714i1.9322-0.4714i-0.4322+0.8355i-0.4322-0.8355i求值采用polyval函数可以求出当多项式中的未知数为某个特定值时该多项式的值。例:求上例中x=1时的值。p=[2-6307];polyval(p,1)ans=6常用的多项式函数函数功能roots求多项式的根poly用根构造多项式polyval计算多项式的值polyvalm计算参数为矩阵的多项式的值residue部分分式展开polyfit多项式数据拟合polyder微分conv乘法deconv除法应用举例例1:将式(x-4)(x+5)(x2-6x+9)展开为多项式形式,并求其对应的一元n次方程的根。p=conv([1,-4],conv([15],[1,-6,9]))p=1-5-17129-180px=poly2sym(p,'x')px=x^4-5*x^3-17*x^2+129*x-180x=roots(p)x=-5.00004.00003.00003.0000例2:已知一元四次方程所对应的四个根为-5.00004.00003.00003.0000求这个方程所对应的表达式原型。x=[-5433];p=poly(x);px=poly2sym(p,'x')px=x^4-5*x^3-17*x^2+129*x-180

习题习题6:求解一元六次方程3x6+12x5+4x4+7x3+8x+1=0的根。习题7:求多项式3x6+12x5+4x4+7x3+8x+1=0被(x-3)(x3+5x)除后的结果。习题6:求解一元六次方程3x6+12x5+4x4+7x3+8x+1=0的根。习题7:求多项式3x6+12x5+4x4+7x3+8x+1=0被(x-3)(x3+5x)除后的结果。4.3.3多项式拟合P=polyfit(x,y,n)x,y为是已知的N个数据点坐标的变量,其长度为N,n是用来拟合的多项式的次数,p是求出的多项式的系数,n+1个系数x=0:0.1:1;y=[-0.447,1.978,3.28,6.16,7.08,7.34,7.66,9.56,9.48,9.30,11.2];a1=ployfit(x,y,1);xi=linspace(0,1);yi1=polyval(a1,xi);plot(x,y,'o',xi,yi1,'b'),holdona2=polyfit(x,y,2);yi2=polyval(a2,xi);plot(x,y,'o',xi,yi2,'m');holdona3=polyfit(x,y,3);yi3=polyval(a3,xi);plot(x,y,'o',xi,yi3,'r');holdona9=polyfit(x,y,9);yi9=polyval(a9,xi);plot(x,y,'o',xi,yi9,'c');holdona10=polyfit(x,y,10);yi10=polyval(a10,xi);plot(x,y,'o',xi,yi10,'g');holdon4.3.4多项式插值

如果在有限个数据点内给出函数,那么利用插值的方法就可以找到中间点的近似值。最简单的插值就是对两个相邻数据点进行线性插值。插值函数分段,进行等距离数据点的快速插值。结果为插值后的数据点,插值数据应通过给定的数据点插值方法method为

linear线性cubic三次cubicspline三次样条一维线性插值函数interp1(x,y,xi,’method’)yit1=interp1(x,y,xi);plot(x,y,'o',xi,yit1)yit2=interp1(x,y,xi,'spline');plot(x,y,'o',xi,yit2,'g')spline(x,y,xx)

等同于interp1(x,y,xx,’spline’),但是参数必须是向量。spline(x,y)

返回三次样条插值向量的pp形式,它是函数y=f(x)的近似值。pp是’piecewisepolynomial’的缩写,得到的向量元素包含计算的三次样条系数。这个命令可以被ppval函数使用。二维线性插值函数interp2(x,y,z,xi,yi,’method’)width=1:15;depth=1:3;temps=[8281808284;7963616581;8484828586];di=1:0.2:3;wi=1:0.2:5;tc=onterp2(width,depth,temps,wi,di','cubic');mesh(wi,di,tc)4.3.5线性微分方程的解Y(s)=B(s)/A(s)分解成多个s的一次分式之和(1)由[r,p,k]=residue(b,a)求出极点数组p和留数数组r求反变换第4节函数功能和数值积分函数库(funfun)P4.6表分析绘制函数曲线fplot(’函数名’,[初值x0,终值xf])求函数极值fmin(’函数名’,初值x0,终值xf)求函数过零点fzero(’函数名’,初值x0,终值xf)定积分子程序quad(’函数名’,初值x0,终值xf)S=quad(‘humps’,1,2)求不定积分可以采用循环fori=1:20x(i)=0.1*i;y(i)=quad('humps',0,x(i));endplot(x,y),gridMATLAB中一元函数的积分可以用两个函数来实现:quad

和quadl。函数quad采用低阶的自适应递归Simpson方法,函数quadl采用高阶自适应Lobatto方法,该函数是quad8函数的替代。函数quad的调用格式如下:q=quad(fun,a,b),采用递归自适应方法计算函数fun在区间 上的积分,其精确度为1e-6。q=quad(fun,a,b,tol),指定允许误差,指定的误差tol需大于1e-6。该命令运行更快,但是得到的结果精确度降低。q=quad(fun,a,b,tol,trace),跟踪迭代过程,输出[fcntab-aQ]的值,分别为计算函数值的次数、当前积分区间的左边界、步长和该区间内的积分值。[q,fcnt]=quadl(fun,a,b,...),输出函数值的同时输出计算函数值的次数。任意函数的数值积分MATLAB中提供了用于积分的函数,包括:一元函数的自适应数值积分一元函数的矢量积分二重积分和三重积分这些函数如表所示。函数功能quad一元函数的数值积分,采用自适应的Simpson方法quadl一元函数的数值积分,采用自适应的Lobatto方法quadv一元函数的向量数值积分dblquad二重积分triplequad三重积分二重积分和三重积分MATLAB中二重积分和三重积分分别由函数dblquad()和函数triplequad()来实现。首先介绍函数dblquad(),该函数的基本格式如下:q=dblquad(fun,xmin,xmax,ymin,ymax),函数的参数分别为函数句柄、两个自变量的积分限,返回积分结果。q=dblquad(fun,xmin,xmax,ymin,ymax,tol),指定积分结果的精度。q=dblquad(fun,xmin,xmax,ymin,ymax,tol,method),指定结果精度和积分方法,method的取值可以是@quadl,也可以是用户自定义的积分函数句柄,该函数的调用格式必须与quad的调用格式相同。triplequad()函数的调用格式和dblquad()基本相同,在调用triplequad()函数时,需要六个参数指定积分限。

任意函数的数值微分对于非刚性方程,可以选择的算法如下:ode45:基于显式Runge-Kutta(4,5)规则求解ode23:基于显式Runge-Kutta(2,3)规则求解ode113:利用变阶Adams-Bashforth-Moulton算法求解微分方程数字解刚性方程的求解方法如下:ode15s:基于数值积分公式的变阶求解算法ode23s:采用二阶改进Rosenbrock公式的算法ode23t:采用自由内插的梯形规则ode23tb:采用TR-BDF2算法,该算法为隐式Runge-Kutta公式,包含两个部分,第一个部分为梯形规则,第二个部分为二阶后向差分。例globalr,r=input('输入r,在0到10间选择2??=')x0=input('x0=0??=');xf=input('xf=30??=');y0=input('y0=[y10;y20]=[1;2]??=')[x,y]=ode45('vdp1',x0,xf,y0);plot(x,y)functionyprime=vdp1(x,y)globalr%r为全局变量,由主程序传送yprime=[y(2);r*(1-y(1).^2).*y(2)-y(1)];%得到一阶方程组第5节字符串函数库

表4.8字符串赋值size(s);abs(s)Setstr(abs(s));dec2hex(abs(s))字符串语句的执行eval

字符串输入输出disp()第6,7,8节字符串处理MATLAB真正强有力的地方在于它的数值处理能力。然而,经常希望操作文本,例如把标号和标题放在图上。在MATLAB里,文本当作特征字符串或简单地当作字符串。字符串内的单引号是由两个连续的单引号来表示。字符串连接可以直接从数组连接中得到。字符串函数eval(string)作为一个MATLAB命令求字符串的值eval(try,catch)blanks(n)返回一个n个零或空格的字符串deblank去掉字符串中后拖的空格feval求由字符串给定的函数值findstr从一个字符串内找出字符串isletter字母存在时返回真值isspace空格字符存在时返回真值isstr输入是一个字符串,返回真值lasterr返回上一个所产生MATLAB错误的字符串strcmp字符串相同,返回真值strrep用一个字符串替换另一个字符串strtok在一个字符串里找出第一个标记类型转换charx=[776584766566];char(x)int2str四舍五入为整数转换为字符串num2str将数字转换为字符串mat2str将矩阵的数据转换为字符串str2num单元结构单元结构:cell把不同属性的数据纳入一个变量中类似于具有下标的矩阵和多维数组,但这些下标不是用圆括号,而是用大括号括起来的。pp=cellstr({'asd''testetet''sfsdfsdfdfgsdgsg''sfdfgfdfgf'})显示内容:pp(1)和pp{1}的区别清空一个单元数据:pp(3)=[]和pp{3}=[]的区别第9节MATLAB的符号计算(p299)数值运算具有简单方便、面向实用的特点,适用于工程实践及科学研究等各个方面,但同时出有一些缺点,比如数值运算所得的解都是工程实际中用到的近似解,它无法得到无误差的最终解,而且在日常生活中,也存在着一些无法用数值运算进行描述的问题,即存在非数值运算问题。引入符号运算就能解决这方面的问题,就像我们平时进行数学公式的推导一样,它允许运算对象和运算过程中出现非数值的符号变量,这为我们进行数据分析提供了有力工具。MATLAB所具有的符号数学工具箱与其它所有工具不同,它适用于广泛的用途,而不是针对一些特殊专业或专业分支。另外,MATLAB符号数学工具箱与其它的工具箱区别还因为它使用字符串来进行符号分析,而不是基于数组的数值分析。符号数学工具箱是操作和解决符号表达式的符号数学工具箱(函数)集合,有复合、简化、微分、积分以及求解代数方程和微分方程的工具。另外还有一些用于线性代数的工具,求解逆、行列式、正则型式的精确结果,找出符号矩阵的特征值而无由数值计算引入的误差。工具箱还支持可变精度运算,即支持符号计算并能以指定的精度返回结果。符号数学工具箱中的工具是建立在功能强大的称作Maple软件的基础上。它最初是由加拿大的滑铁卢(Waterloo)大学开发的。当要求MATLAB进行符号运算时,它就请求Maple去计算并将结果返回到MATLAB命令窗口。因此,在MATLAB中的符号运算是MATLAB处理数字的自然扩展。5.9.1符号变量和符号表达式符号变量的创建利用单引号创建f=‘字符串’例:f=‘sin(w*t)‘

%定义一个正弦函数f=sin(w*t)G=‘(s+1)/(s+2)/(s+3)’

%定义传递函数G=(s+1)/(s+2)/(s+3)E=‘Dy+5*y=t’

%定义微分方程利用sym指令定义例:x=sym('x')x=xa=sym('a')b=sym('b')c=sym('c')符号变量x,a,b,c,分别表示字母x,a,b,c。symsabcx%符号变量x,a,b,c。在定义了符号变量的基础上就可以定义符号表达式了。符号表达式的建立符号表达式是代表数字、函数、算子和变量的MATLAB字符串,或字符串数组。不要求变量有预先确定的值,符号方程式是含有等号的符号表达式。符号算术是使用已知的规则和给定符号恒等式求解这些符号方程的实践,它与代数和微积分所学到的求解方法完全一样。符号矩阵是数组,其元素是符号表达式。MATLAB在内部把符号表达式表示成字符串,以与数字变量或运算相区别;否则,这些符号表达式几乎完全象基本的MATLAB命令表中列有几则符号表达式例子以及MATLAB等效表达式。符号表达式MATLAB表达式'1/(2*x^n)'y='1/sqrt(2*x)''cos(x^2)-sin(2*x)'M=sym('[a,b;c,d]')f=int('x^3/sqrt(1-x)','a','b')利用sym指令创建表达式f=sym('a*x^2+b*x+c')f=a*x^2+b*x+c定义了符号表达式,就可以对表达式进行诸如积分、微分、替换等符号工作。df=diff(f)df=2*a*x+b

nf=int(f)

nf=

1/3*a*x^3+1/2*b*x^2+c*x符号表达式中自变量的确定确定原则①在符号表达式中缺省的独立变量是唯一的,除去i和j的小写字母,不是单词的一部分。②如果没有这种字母,就选择x作为独立变量。③如字符不是唯一的,就选择在字母顺序中最接近x的字母。④如果有相连的字母,就选择在字母表中离x最近的那一个。

实例符号表达式默认自变量a*x^2+b*x+cx1/(4+cos(t))t4*x/yx2*a+bb2*i+4*jx

sin(pi/4)-cos(3/5)

xa*t+s/(u+3)usin(omega)x5.9.2微积分运算极限求极限是微积分的基础,在MATLAB中提供了求表达式极限的函数limit,其基本用法见表。表达式函数格式备注limit(f,x,a)若a=0,且是对x求极限,可简写为limit(f)。limit(f,x,a,’left’)左趋近于alimit(f,x,a,’right’)右趋近于a例:求1/x在0处的三个极限。symsxlimit(1/x,x,0)

%两边趋近ans=NaNlimit(1/x,x,0,‘left’)

%左边趋近ans=-inflimit(1/x,x,0,‘right’)%右边趋近ans=inf可利用极限方法求取函数的导数。其原理公式如下所示:求函数cos(x)的导数。symstxlimit((cos(x+t)-cos(x))/t,t,0)ans=-sin(x)

微分MATLAB提供了函数diff,专用于符号表达式的微分计算。其使用方法如下所示:①diff(f),求f对预设独立变量的一次微分值。②diff(f,t),求f对独立变量t的一次微分值。③diff(f,n),求f对预设独立变量的n次微分值④diff(f,t,n),求f对独立变量t的n次微分值。例:已知求f(x)的微分。symsabcxf=sym('a*x^2+b*x+c');diff(f)

%对默认自变量x求微分。ans=2*a*x+bdiff(f,2)

%对x求二次微分。ans=2*adiff(f,a)

%对a求微分。ans=x^2diff(f,a,2)

%对a求二次微分。ans=0diff(diff(f),a)

%对x和a求微分。ans=2*x微分函数diff也可用于符号矩阵,其结果是对矩阵的每一个元素进行微分运算。例:symsabxD=[a*x,cos(x);b*a,sin(b*x)]D=[a*x,cos(x)][b*a,sin(b*x)]diff(D)ans=[a,-sin(x)][0,cos(b*x)*b]积分运用函数可以求得符号表达式的积分,该函数用以演算函数的积分项,这个函数要找出一符号表达式F使得diff(F)=f。相关的用法如下:①int(f)返回f对预设独立变量的积分值。②int(f,’t’)返回f对独立变量t的积分值。③int(f,a,b)返回f对预设独立变量的积分值,积分区间为[a,b],a和b为数值表达式。④int(f,’t’,a,b)返回f对独立变量t的积分值,积分区间为[a,b],a和b为数值表达式。⑤int(f,’m’,’n’)返回f对预设独立变量的积分值,积分区间为[m,n],m和n为符号表达式。例:已知求f(x)的积分。symsabcxint(f)%表达式f的不定积分,自变量是x。ans=1/3*a*x^3+1/2*b*x^2+c*xint(f,x,0,2)%表达式f在[0,2]的定积分,自变量是x。ans=8/3*a+2*b+2*cint(f,a)

%表达式f的不定积分,自变量是a。ans=1/2*a^2*x^2+b*x*a+c*aint(int(f,a),x)ans=1/6*a^2*x^3+1/2*b*x^2*a+c*a*x与微分函数相似,积分函数int对符号矩阵的运算是对矩阵中的每一个元素进行的。symsabxD=[a*x,cos(x);b*a,sin(b*x)]D=[a*x,cos(x)][b*a,sin(b*x)]int(D)ans=[1/2*a*x^2,sin(x)][b*x*a,-1/b*cos(b*x)]级数求和symsum函数用于级数的求和。该函数的调用格式为:r=symsum(s),自变量为findsym函数所确定的符号变量,设其为k,则该表达式计算s从0到k-1的和;r=symsum(s,v),计算表达式s从0到v-1的和;r=symsum(s,a,b),计算自变量从a到b之间s的和;r=symsum(s,v,a,b),计算v从a到b之间的s的和。例:分别求级数的和。和symsksymsum(1/k,k,1,inf)ans=infsymsum(1/(k*(k+1)),k,1,inf)ans=1Taylor级数函数taylor用于实现Taylor级数的计算。该函数的调用格式为:r=taylor(f),计算表达式f的Taylor级数,自变量由findsym函数确定,计算f的在0的6阶Taylor级数;r=taylor(f,n,v),指定自变量v和阶数n;r=taylor(f,n,v,a),指定自变量v、结束n,计算f在a的级数。例:求sin(x)的前8项展开式。symsxtaylor(sin(x),8)ans=x-1/6*x^3+1/120*x^5-1/5040*x^75.9.3方程求解代数方程MATLAB提供了利用符号表达式求解代数方程的函数:solve(f)

解符号方程式f。例:求一元二次方程的根。symsabcxf=sym('a*x^2+b*x+c')f=a*x^2+b*x+csolve(f)ans=[1/2/a*(-b+(b^2-4*a*c)^(1/2))][1/2/a*(-b-(b^2-4*a*c)^(1/2))]

例:利用上式,对指定变量解方程。solve(f,a)ans=-(b*x+c)/x^2例:对有等号的符号方程求解。solve('1+x=sin(x)')ans=-1.9345632107520242675632614537689例:solve('sin(x)=1/2')ans=1/6*pi对于含有周期函数方程求解时,虽然它本身可能有无穷多个解,但MATLAB只给出零附近的有限几个解。函数solve也可用于求解代数方程组,其用法如下:solve(f1,…,fn)解由f1,….fn组成的代数方程组。例:求方程的解。eq1=sym('x+y+z=10');eq2=sym('x-y+z=0');eq3=sym('2*x-y-z=-4');[x,y,z]=solve(eq1,eq2,eq3)x=2y=5z=3常微分方程MATLAB提供了求解微分方程式的函数:dsolve(‘equation’,’condition’)其中,equation代表常微分方程式,condition为初始条件;如果初始条件没有给出,则给出通解。函数dsovle句法与大多数其它函数有一些不同,方程用字母D来表示求微分,D2,D3等等表示几重微分,并以此来设定方程。任何D后所跟的字母为因变量。求解方程时默认所有这些变量都是对自变量t求导。例:求微分方程的通解。dsolve('Dy=5')ans=5*t+C1dsolve(‘Dy=x’,‘x’)

%求微分方程y’=x的通解,ans=

x为自变量。1/2*x^2+C1dsolve(‘D2y=1+Dy’)

%求微分方程的通解。ans=-t+C1+C2*exp(t)dsolve('D2y=1+Dy','y(0)=1','Dy(0)=0')ans=

%求微分方程的解,加初-t+exp(t)

始条件。该函数还可以用于求解微分方程组。例:[x,y]=dsolve('Dx=y+x,Dy=2*x')x=1/3*C1*exp(-t)+2/3*C1*exp(2*t)+1/3*C2*exp(2*t)-1/3*C2*exp(-t)y=2/3*C1*exp(2*t)-2/3*C1*exp(-t)+2/3*C2*exp(-t)+1/3*C2*exp(2*t)[x,y]=dsolve('Dx=y+x,Dy=2*x','x(0)=0,y(0)=1')x=1/3*exp(2*t)-1/3*exp(-t)y=2/3*exp(-t)+1/3*exp(2*t)已知:两个线性一阶方程,求其通解。 =3f+4g =-4f+3g[f,g]=dsolve('Df=3*f+4*g,Dg=-4*f+3*g')f=exp(3*t)*(cos(4*t)*C1+sin(4*t)*C2)g=-exp(3*t)*(sin(4*t)*C1-cos(4*t)*C2)[f,g]=dsolve('Df=3*f+4*g','Dg=-4*f+3*g','f(0)=0,g(0)=1')f=exp(3*t)*sin(4*t)g=exp(3*t)*cos(4*t)5.9.4符号表达式的运算函数功能symadd(A,B)完成A+B的符号加法老版本symsub(A,B)完成A-B的符号减法老版本symmul(A,B)完成A与B的符号乘法老版本symdiv(A,B)完成A与B的符号乘法老版本sympow(F,n)完成F^n的符号n次方运算老版本numden(F)将F从有理数形式转换成分子分母形式。eval(F)将F以数值式表示numeric(F)2009淘汰sym2poly(F)提取F中的多项式系数并以向量形式表示。poly2sym(c)转换多项式系数向量c为符号多项式例:symsabf1=sym('1/(a-b)');f2=sym('2*a/(a+b)');f3=sym('(a+1)*(b-1)*(a-b)');symmul(f1,f3)ans=(a+1)*(b-1)sympow(f1,2)ans=1/(a-b)^2symadd(f1,f2)ans=1/(a-b)+2*a/(a+b)[n,d]=numden(symadd(f1,f2))n=a+b+2*a^2-2*a*bd=(a-b)*(a+b)p='(1+sqrt(5))/2'p=(1+sqrt(5))/2numeric(p)ans=1.61805.9.5符号表达式的化简一方面有时MATLAB返回的符号表达式难以理解,有许多工具可以使表达式变得更易读懂。另一方面,符号表达式可用许多等价形式来提供。在不同的场合,某种形式可能胜于另一种。MATLAB提供了许多用来简化或改变符号表达式的函数。函数说明参见下页表格。函数功能collect(F)将表达式F中相同幂次的项合并expand(F)将表达式F展开factor(F)将表达式F因式分解simplify(F)利用代数上的函数规则对表达式F进行化简simple(F)尽可能的将F表达式再做简化,目的是使表达式以最少的字表示出来例:symsabf1=sym('(a-1)^2+(b+1)^2+a+b');f2=sym('a^3-1');f3=sym('1/a^4+2/a^3+3/a^2+4/a+5');collect(f1)ans=b^2+3*b+(a-1)^2+1+aexpand(f1)ans=a^2-a+2+b^2+3*bfactor(f1)ans=a^2-a+2+b^2+3*bfactor(f2)ans=(a-1)*(a^2+a+1)simplify(f3)ans=(1+2*a+3*a^2+4*a^3+5*a^4)/a^4函数simple用来求符号表达式或矩阵的最简形式,其格式为simple(F)。该函数会尝试用多种不同化简方法对F进行化简,并显示所有能够化简F的方法,最后返回F的最简形式。如果F是一个矩阵,则返回的结果是整个矩阵的最简形式,而不一定是其中某一个元素的最简形式。simple(f3)simplify:(1+2*a+3*a^2+4*a^3+5*a^4)/a^4radsimp:(1+2*a+3*a^2+4*a^3+5*a^4)/a^4combine(trig):(1+2*a+3*a^2+4*a^3+5*a^4)/a^4factor:(1+2*a+3*a^2+4*a^3+5*a^4)/a^4expand:1/a^4+2/a^3+3/a^2+4/a+5combine:1/a^4+2/a^3+3/a^2+4/a+5convert(exp):1/a^4+2/a^3+3/a^2+4/a+5convert(sincos):1/a^4+2/a^3+3/a^2+4/a+5convert(tan):1/a^4+2/a^3+3/a^2+4/a+5collect(a):1/a^4+2/a^3+3/a^2+4/a+5ans=1/a^4+2/a^3+3/a^2+4/a+5通过上述实例,比较simple(f3)和simplify(f3)可以看出simple使用了多种方法,能够改善simplify的结果,而simplify返回的不一定是最简结果。若只想得到最简形式,则可以使用[r,how]=simple(s)其中,r是符号变量;how是字符串。接上例:f3=sym('1/a^4+2/a^3+3/a^2+4/a+5')f3=1/a^4+2/a^3+3/a^2+4/a+5[r,how]=simple(f3)r=1/a^4+2/a^3+3/a^2+4/a+5how=collect(a)5.5.6sym函数MATLAB提供了将符号表达式变换成数值的函数sym,该函数可获取一个数字参量并将其转换为符号表达式。函数eval(numeric)的功能正好相反,它把一个符号常数(无变量符号表达式)变换为一个数值。函数sym一般用四个参数来控制,它们分别是f,r,e,d,其具体使用下表所示。函数sym不但可以完成单个元素的转换,还可以将数值矩阵转换为符号值矩阵,采用的指令形式为sym(A),其中A为要转化的矩阵,不管原来的元素是何种形式,它都以最接近的形式给出结果。参数作用f返回该符号值的浮点表示r返回该符号值的有理数形式(系统默认)e返回带有机器浮点误差的有理值d返回十进制数值(默认数位长度32位)例:sym(1/3,'f')ans='1.5555555555555'*2^(-2)sym(1/3,'r')ans=1/3sym(1/3,'e')ans=1/3-eps/12sym(1/3,'d')ans=.33333333333333331482961625624739例:A=[0.251/3;sqrt(2),sin(pi/3)]A=

0.25000.33331.41420.8660sym(A)ans=[1/4,1/3][sqrt(2),sqrt(3/4)]5.9.7表达式替换假设有一个以x为变量的符号表达式,并希望将变量转换为y。MATLAB提供一个工具称作subs,以便在符号表达式中进行变量替换。相关的函数使用方法如下:①Subs(s)用赋值函数中的给定值替换符号表达式s中的所有变量。②Subs(s,new)用new替换s中的所有自由变量。③Subs(s,old,new)用符号或数值变量new替换s中的符号变量old。a=5;y=dsolve('Dy=-a*y')y=C1*exp(-a*t)subs(y)ans=C1*exp(-5*t)symsabsubs(a+b,a,4)ans=4+bsubs(cos(a)+sin(b),{a,b},{sym('alpha'),2})ans=cos(alpha)+sin(2)5.9.8符号积分变换符号傅立叶变换符号拉普拉斯变换符号Z变换傅立叶变换傅立叶变换由函数fourier实现,该函数的调用格式为:F=fourier(f),实现函数f的傅立叶变换,如果f的默认自变量为x,则返回f的傅立叶变换结果,默认自变量为w;如果f的默认自变量为w,则返回结果的默认自变量为t;F=fourier(f,v),返回结果为v的函数;fourier(f,v)F(t)=int(f(x)*exp(-i*v*x),x,-inf,inf)F=fourier(f,u,v),f的自变量为u,返回结果为v的函数。fourier(f,u,v)F(v)=int(f(u)*exp(-i*v*u),u,-inf,inf)傅立叶逆变换傅立叶逆变换由函数ifourier实现,该函数的调用格式为:f=ifourier(F),实现函数F的傅立叶逆变换,如果F的默认自变量为w,则返回结果f的默认自变量为x,如果F的自变量为x,则返回结果f的自变量为t;f=ifourier(F,u),实现函数F的傅立叶逆变换,返回结果f为u的函数;f=ifourier(F,v,u),实现函数F的傅立叶逆变换,F的自变量为v,返回结果f为u的函数。例:symstvwxfourier(1/t)ans=i*pi*(Heaviside(-w)-Heaviside(w))fourier(exp(-x^2),x,t)ans=pi^(1/2)*exp(-1/4*t^2)fourier(exp(-t)*sym('Heaviside(t)'),v)ans=1/(1+i*v)

fourier(diff(sym('F(x)')),x,w)ans=i*w*fourier(F(x),x,w)ifourier(w*exp(-3*w)*sym('Heaviside(w)'))ans=1/2/(-3+i*x)^2/piifourier(sym('fourier(f(x),x,w)'),w,x)ans=f(x)symsuifourier(1/(1+w^2),u)ans=1/2*exp(-u)*Heaviside(u)+1/2*exp(u)*Heaviside(-u)符号拉普拉斯变换laplace函数实现符号函数的拉普拉斯变换。该函数的调用格式为:laplace(F),实现函数F的拉普拉斯变换,如果F的默认自变量为t,返回结果的默认自变量为s;如果F的默认自变量为s,则返回结果为t的函数;laplace(F,t),返回函数的自变量为t;laplace(F,t)L(t)=int(F(x)*exp(-t*x),0,inf)laplace(F,w,z),指定F的自变量为w,返回结果为z的函数;laplace(F,w,z)L(z)=int(F(w)*exp(-z*w),0,inf)拉普拉斯逆变换拉普拉斯逆变换由函数ilaplace实现,该函数的调用格式为:F=ilaplace(L),实现函数L的拉普拉斯逆变换,如果L的自变量为s,则返回结果为t的函数,如果L的自变量为t,则返回结果为x的函数;F=ilaplace(L,y),返回结果为y的函数;F=ilaplace(L,y,x),指定L的自变量为y,返回结果为x的函数。symsastwxlaplace(x^5)ans=120/s^6laplace(cos(x*w),w,t)ans=t/(t^2+x^2)laplace(diff(sym('F(x)')))ans=s*laplace(F(x),x,s)-F(0)f=sym('[1/(s-1)]')f=1/(s-1)ilaplace(f)ans=exp(t)符号Z变换Z变换由函数ztrans完成,该函数的用法为:F=ztrans(f),如果f的默认自变量为n,则返回结果为z的函数,如果f为函数z的函数,则返回结果为w的函数;F=ztrans(f,w),返回结果为w的函数;ztrans(f,w)F(w)=symsum(f(n)/w^n,n,0,inf)F=ztrans(f,k,w),f的自变量为k,返回结果为w的函数。ztrans(f,k,w)F(w)=symsum(f(n)/w^k,k,0,inf)Z逆变换Z逆变换由函数iztrans完成,其调用格式为:f=iztrans(F),若F的默认自变量为z,则返回结果为n的函数,如果F是n的函数,则返回结果为k的函数;f=iztrans(F,k),指定返回结果为k的函数;f=iztrans(F,w,k),指定F的自变量为w,返回结果为k的函数。例:symsknwza=ztrans(2^n)a=1/2*z/(1/2*z-1)simplify(a)ans=z/(z-2)b=ztrans(sin(k*n),w)b=-w*sin(k)/(-w^2+2*w*cos(k)-1)c=ztrans(cos(n*k),k,z)c=(z-cos(n))*z/(z^2-2*z*cos(n)+1)d=ztrans(cos(n*k),n,w)d=(cos(k)-w)*w/(-w^2+2*w*cos(k)-1)e=ztrans(sym('f(n+1)'))e=z*ztrans(f(n),n,z)-f(0)*zMAPLE函数的调用maple函数的使用mfun函数的使用maple函数的使用maple是符号工具箱中的一个通用命令,使用它可以实现对MAPLE中大部分函数的调用。其使用格式为:r=maple('statement'),其中statement为符合MAPLE语法的可执行语句的字符串,该命令将sta

温馨提示

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

评论

0/150

提交评论