数模往届2013国赛符号计算_第1页
数模往届2013国赛符号计算_第2页
数模往届2013国赛符号计算_第3页
数模往届2013国赛符号计算_第4页
数模往届2013国赛符号计算_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

MATLAB的符号计算所谓符号计算是指在运算时,无须事先对变量赋值,而将所得到结果以标准的符号形式来表示。MathWorks公司以Maple的内核作为符号计算引擎(Engine),依赖Maple已有的函数库,开发了实现符号计算的两个工具箱:基本符号工具箱和扩展符号工具箱。一、符号计算基础一、符号计算基础(一)定义符号变量参与符号运算的对象可以是符号变量、符号表达式或符号矩阵。符号变量要先定义,后引用。可以用sym函数、syms函数将运算量定义为符号型数据。引用符号运算函数时,用户可以指定函数执行过程中的变量参数;若用户没有指定变量参数,则使用findsym函数默认的变量作为函数的变量参数。1、sym函数

sym函数的主要功能是创建符号变量,以便进行符号运算,也可以用于创建符号表达式或符号矩阵。用sym函数创建符号变量的一般格式为:

x=sym(‘x’)其目的是将’x’创建为符号变量,以x作为输出变量名。每次调用该函数,可以定义一个符号变量。一、符号计算基础(一)定义符号变量在MATLAB命令窗口,输入命令:

a=sym('a');b=sym('b');c=sym('c');d=sym('d');%定义4个符号变量w=10;x=5;y=-8;z=11;%定义4个数值变量A=[a,b;c,d]%建立符号矩阵AB=[w,x;y,z]%建立数值矩阵Bdet(A)%计算符号矩阵A的行列式det(B)%计算数值矩阵B的行列式比较符号常数与数值在代数运算时的差别。pi1=sym('pi');k1=sym('8');k2=sym('2');k3=sym('3');%定义符号变量pi2=pi;r1=8;r2=2;r3=3;%定义数值变量sin(pi1/3)%计算符号表达式值sin(pi2/3)%计算数值表达式值sqrt(k1)%计算符号表达式值sqrt(r1)%计算数值表达式值sqrt(k3+sqrt(k2))%计算符号表达式值sqrt(r3+sqrt(r2))%计算数值表达式值【例1】作符号计算:a,b,x,y均为符号运算量。在符号运算前,应先将a,b,x,y定义为符号运算量一、符号计算基础(一)定义符号变量a=sym(‘a’);

%定义‘a’为符号运算量,输出变量名为ay=2/bb=sym(‘b’);x=sym(‘x’);y=sym(‘y”);[x,y]=solve(a*x-b*y-1,a*x+b*y-5,x,y)%以a,b为符号常数,x,y为符号变量即可得到方程组的解:x=3/ay=2/b一、符号计算基础(一)定义符号变量【例2】已知一复数表达式z=x+i*y,试求其共轭复数,并求该表达式与其共轭复数乘积的多项式。为了使乘积表达式x^2+y^2非负,这里,把变量x和y定义为实数。x=sym(‘x’,’real’);y=sym(‘y’,’real’);一、符号计算基础(一)定义符号变量z=x+i*y;%定义复数表达式conj(z);%求共轭复数expand(z*conj(z))%求表达式与其共轭复数乘积的多项式ans=x^2+y^2若要去掉’x’的属性,可以使用下面语句

x=sym(‘x’,’unreal’)将’x’创建为纯格式的符号变量。一、符号计算基础(一)定义符号变量2、syms函数syms函数的功能与sym函数类似。syms函数可以在一个语句中同时定义多个符号变量,其一般格式为:

symsarg1arg2…argN用于将arg1,arg2,…,argN等符号创建为符号型数据。一、符号计算基础(一)定义符号变量一、符号计算基础(一)定义符号变量syms函数的一般调用格式为:symsvar1var2…varn

函数定义符号变量var1,var2,…,varn等。用这种格式定义符号变量时不要在变量名上加字符分界符('),变量间用空格而不要用逗号分隔。一、符号计算基础(一)定义符号变量用两种方法建立符号表达式。在MATLAB窗口,输入命令:U=sym('3*x^2+5*y+2*x*y+6')%定义符号表达式Usymsxy;%建立符号变量x、yV=3*x^2+5*y+2*x*y+6%定义符号表达式V2*U-V+6%求符号表达式的值计算3阶范得蒙矩阵行列式的值。设A是一个由符号变量a,b,c确定的范得蒙矩阵。命令如下:symsabc;U=[a,b,c];A=[[1,1,1];U;U.^2]%建立范得蒙符号矩阵det(A)%计算A的行列式值(二)符号变量的确定在数学表达式中,一般习惯于使用排在字母表中前面的字母作为变量的系数,而用排在后面的字母表示变量。例如:

f=ax2+bx+c表达式中的a,b,c通常被认为是常数,用作变量的系数;而将x看作自变量。符号表达式中变量的确定MATLAB中的符号可以表示符号变量和符号常数。findsym可以帮助用户查找一个符号表达式中的的符号变量。该函数的调用格式为:findsym(S,n)函数返回符号表达式S中的n个符号变量,若没有指定n,则返回S中的全部符号变量。在求函数的极限、导数和积分时,如果用户没有明确指定自变量,MATLAB将按缺省原则确定主变量并对其进行相应微积分运算。可用findsym(S,1)查找系统的缺省变量,事实上,MATLAB按离字符'x'最近原则确定缺省变量。例如,数学表达式

f=xng=sin(at+b)根据数学式中表示自变量的习惯,默认a,b,c为符号常数,x为符号变量。若在MATLAB中表示上述表达式,首先用syms函数定义a,b,n,t,x为符号对象。在进行导数运算时,由于没有指定符号变量,则系统采用数学习惯来确定表达式中的自变量,默认a,b,c为符号常数,x,t为符号变量。即:对函数f求导为:df/dx

对函数g求导为:dg/dt一、符号计算基础(二)默认符号变量用findsym函数查询默认的变量。该函数的引用格式为:

findsym(f,n)说明:f为用户定义的符号函数,

n为正整数,表示查询变量的个数。

n=i,表示查询i个系统默认变量。n值省略时表示查询符号函数中全部系统默认变量。一、符号计算基础【例3】查询符号函数

f=xng=sin(at+b)中的系统默认变量。symsabntx%定义符号变量f=x^n;%给定符号函数g=sin(a*t+b);findsym(f,1)%在f函数中查询1个系统默认变量ans=x表示f函数中查询的1个系统默认变量为x。一、符号计算基础(二)默认符号变量(三)符号表达式符号表达式由符号变量、函数、算术运算符等组成。符号表达式的书写格式与数值表达式相同。例如,数学表达式

其符号表达式为:1+sqr(5*x))/2注意,在定义表达式前应先将表达式中的字符x定义为符号变量。一、符号计算基础基本的符号运算1.符号表达式运算(1)符号表达式的四则运算例符号表达式的四则运算示例。symsxyz;f=2*x+x^2*x-5*x+x^3%符号表达式的结果为最简形式f=2*x/(5*x)%符号表达式的结果为最简形式f=(x+y)*(x-y)%符号表达式的结果不是x^2-y^2,而是

(x+y)*(x-y)(2)因式分解与展开factor(S)对S分解因式,S是符号表达式或符号矩阵。expand(S)对S进行展开,S是符号表达式或符号矩阵。collect(S)对S合并同类项,S是符号表达式或符号矩阵。collect(S,v)对S按变量v合并同类项,S是符号表达式或符号矩阵。例6对符号矩阵A的每个元素分解因式。命令如下:symsabxy;A=[2*a^2*b^3*x^2-4*a*b^4*x^3+10*a*b^6*x^4,3*x*y-5*x^2;4,a^3-b^3];factor(A)%对A的每个元素分解因式例6.8计算表达式S的值。命令如下:symsxy;s=(-7*x^2-8*y^2)*(-x^2+3*y^2);expand(s)%对s展开collect(s,x)%对s按变量x合并同类项(无同类项)factor(ans)%对ans分解因式(3)表达式化简MATLAB提供的对符号表达式化简的函数有:simplify(S)应用函数规则对S进行化简。simple(S)调用MATLAB的其他函数对表达式进行综合化简,并显示化简过程。例6.9化简命令如下:symsxy;s=(x^2+y^2)^2+(x^2-y^2)^2;simple(s)%MATLAB自动调用多种函数对s进行化简,并显示每步结果2.符号矩阵运算transpose(S)返回S矩阵的转置矩阵。determ(S)返回S矩阵的行列式值。colspace(S)返回S矩阵列空间的基。[Q,D]=eigensys(S)Q返回S矩阵的特征向量,D返回S矩阵的特征值。(四)生成符号函数将表达式中的自变量定义为符号变量后,赋值给符号函数名,即可生成符号函数。例如有一数学表达式:一、符号计算基础其用符号表达式生成符号函数fxy的过程为:

symsabcxy%定义符号运算量

fxy=(a*x^2+b*y^2)/c^2%生成符号函数生成符号函数fxy后,即可用于微积分等符号计算。一、符号计算基础(四)生成符号函数【例4】定义一个符号函数fxy=(a*x2+b*y2)/c2

,分别求该函数对x、y的导数和对x的积分。symsabcxy

%定义符号变量fxy=(a*x^2+b*y^2)/c^2;

%生成符号函数

diff(fxy,x)

%符号函数fxy对x求导数ans=2*a*x/c^2diff(fxy,y)

%符号函数fxy对y求导数ans=2*b*y/c^2

%符号函数fxy对x求积分int(fxy,x)

ans=1/c^2*(1/3*a*x^3+b*y^2*x)一、符号计算基础(四)生成符号函数二、微积分(一)微积分函数1.求极限函数limit用于求符号函数f的极限。系统可以根据用户要求,计算变量从不同方向趋近于指定值的极限值。该函数的格式及功能:二、微积分limit(f,x,a):求符号函数f(x)的极限值。即计算当变量x趋近于常数a时,f(x)函数的极限值。

limit(f,a):求符号函数f(x)的极限值。由于没有指定符号函数f(x)的自变量,则使用该格式时,符号函数f(x)的变量为函数findsym(f)确定的默认自变量,既变量x趋近于a。limit(f):求符号函数f(x)的极限值。符号函数f(x)的变量为函数findsym(f)确定的默认变量;没有指定变量的目标值时,系统默认变量趋近于0,即a=0的情况。limit(f,x,a,'right'):求符号函数f的极限值。'right'表示变量x从右边趋近于a。limit(f,x,a,'left'):求符号函数f的极限值。'left'表示变量x从左边趋近于a。二、微积分【例5】求极限symsx;%定义符号变量f=(x*(exp(sin(x))+1)-2*(exp(tan(x))-1))/sin(x)^3;%确定符号表达式w=limit(f)%求函数的极限w=-1/2二、微积分2.微分函数diff函数用于对符号表达式s求微分。该函数的一般引用格式为:

diff(s,’v’,n)二、微积分说明:

应用diff(s)没有指定微分变量和微分阶数,则系统按findsym函数指示的默认变量对符号表达式s求一阶微分。应用diff(s,‘v’)或diff(s,sym(‘v’))格式,表示以v为自变量,对符号表达式s求一阶微分。应用diff(s,n)格式,表示对符号表达式s求n阶微分,n为正整数。应用diff(s,‘v’,n)diff(s,n,‘v’)格式,表示以v为自变量,对符号表达式s求n阶微分。【例6】求导数:x=sym('x');%定义符号变量t=sym('t');diff(sin(x^2))%求导运算ans=2*cos(x^2)*x二、微积分3.积分函数积分函数int(s,v,a,b)可以对被积函数或符号表达式s求积分。其引用格式为:

int(s,v,a,b)说明:应用int(s)格式,表示没有指定积分变量和积分阶数时,系统按findsym函数指示的默认变量对被积函数或符号表达式s求一阶积分。应用int(s,v)格式,表示以v为自变量,对被积函数或符号表达式s求一阶不定积分。应用积分函数时,如果给定a、b两项,表示是进行定积分运算。a、b分别表示定积分的下限和上限。不指定积分的下限和上限表示求不定积分。二、微积分【例7】求下述积分。求积分:symsxint(1/(1+x^2))ans=atan(x)二、微积分数值积分。先建立一个函数文件fx.m:functionfx=fx(x)fx=6+0.3*x;再在MATLAB命令窗口,输入命令:m=quad('fx',0,10,1e-6)函数的泰勒级数MATLAB中提供了将函数展开为幂级数的函数taylor,其调用格式为:taylor(f,v,n,a)例6.23求函数在指定点的泰勒展开式。命令如下:x=sym('x');f1=(1+x+x^2)/(1-x+x^2);f2=sqrt(1-2*x+x^3)-(1-3*x+x^2)^(1/3);taylor(f1,x,5)%求(1)。展开到x的4次幂时应选择n=5taylor(f2,6)%求(2)。例6.24将多项式表示成x+1的幂的多项式。命令如下:x=sym('x');p=1+3*x+5*x^2-2*x^3;f=taylor(p,x,-1,4)例6.25应用泰勒公式近似计算。命令如下:x=sym('x');f=(1-x)^(1/12);%定义函数,4000^(1/12)=2f(96/2^12)g=taylor(f,4)%求f的泰勒展开式g,有4000^(1/12)≈2g(96/2^12)b=96/2^12;a=1-b/12-11/288*b^2-253/10368*b^3%计算g(b)2*a%求4000^(1/12)的结果4000^(1/12)%用MATLAB的乘方运算直接计算4.级数(级数求和)级数求和运算是数学中常见的一种运算。例如:

f(x)=a0+a1x+a2x2+a3x3+…+anxn函数symsum可以用于此类对符号函数f的求和运算。该函数的引用时,应确定级数的通项式s,变量的变化范围a和b。该函数的引用格式为:

symsum(s,a,b)二、微积分【例8】求级数的和:键入:1/12+1/22+1/32+1/42+……symsksymsum(1/k^2,1,Inf)%k值为1到无穷大ans=1/6*pi^2其结果为:1/12+1/22+1/32+1/42+……=π2/6二、微积分三、简化方程表达式1.因式分解factor函数的功能为:把多项式S分解为多个因式,各多项式的系数均为有理数。格式为:

factor(s)三、简化方程表达式【例9】将表达式(x^9-1)分解为多个因式。symsxfactor(x^9-1)ans=(x-1)*(x^2+x+1)*(x^6+x^3+1)2.嵌套将符号多项式s用嵌套形式表示,即用多层括号的形式表示。Horner函数可以实现此功能。该函数的格式为:

horner(s)三、简化方程表达式【例10】将表达式x^3-6*x^2+11*x-6用嵌套形式表示。symsxhorner(x^3-6*x^2+11*x-6)ans=-6+(11+(-6+x)*x)*x四、解方程解方程函数的格式为:solve(expr1,expr2,...,exprN,var1,var2,...varN)或solve(expr1,expr2,...,exprN)其功能为:求解代数方程组expr1,expr2,...,exprN的根,未知数为var1,var2,...varN。说明:若不指明符号表达式expr1,expr2,...,exprN的值,系统默认为0。例如给出一个表达式x^2-3*x-8,则系统将按x^2-3*x-8=0进行运算;四、解方程【例11】解代数方程:a*x2-b*x-6=0symsabxsolve(a*x^2-b*x-6)ans=[1/2/a*(b+(b^2+24*a)^(1/2))][1/2/a*(b-(b^2+24*a)^(1/2))]即该方程有两个根:x1=1/2/a*(b+(b^2+24*a)^(1/2));

x2=1/2/a*(b-(b^2+24*a)^(1/2))

四、解方程四、解方程例6.28解方程。命令如下:x=solve('1/(x+2)+4*x/(x^2-4)=1+2/(x-2)','x')%解方程(1)f=sym('x-(x^3-4*x-7)^(1/3)=1');x=solve(f)%解方程(2)x=solve('2*sin(3*x-pi/4)=1')

温馨提示

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

评论

0/150

提交评论