您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 第三讲 MATLAB的符号运算
2020/1/271符号运算的功能符号表达式、符号矩阵的创建符号线性代数因式分解、展开和化简符号代数方程求解符号微积分符号微分方程2020/1/272本节目标理解符号运算的有关概念掌握使用符号运算解决符号推导、微积分、方程等问题的方法2020/1/273一、符号运算的基本操作符号运算与数值运算的区别※数值运算中必须先对变量赋值,然后才能参与运算。※符号运算无须事先对独立变量赋值,运算结果以标准的符号形式表达。2020/1/274符号变量和符号表达式符号变量和符号表达式在使用前必须说明sym函数f1=sym(‘ax^2+bx+c’)%创建符号变量f1和一个符号表达式symsclearsymsabcxwhosNameSizeBytesClassa1x1126symobjectb1x1126symobjectc1x1126symobjectx1x1126symobject2020/1/275符号表示式的运算算术运算clearf1=sym('1/(a-b)');f2=sym('2*a/(a+b)');f3=sym('(a+1)*(b-1)*(a-b)');f1+f2%符号和ans=1/(a-b)+2*a/(a+b)f1*f3%符号积ans=(a+1)*(b-1)f1/f3%符号商ans=1/(a-b)^2/(a+1)/(b-1)2020/1/276特点:运算对象可以是没赋值的符号变量可以获得任意精度的解SymbolicMathToolbox——符号运算工具包通过调用Maple软件实现符号计算的。maple软件——主要功能是符号运算,它占据符号软件的主导地位。2020/1/277符号对象的定义sym、syms函数说明f=sym(arg)把数值、字符串或表达式arg转换为符号对象ff=sym(argn,flagn)把数值或数值表达式argn转换为指定格式(flagn)的符号对象f=sym(‘argv’,flagv)按flagv把字符串转换args为指定格式的符号对象syms(‘argv1’,‘argv2’)把字符argv1、argv2定义为基本符合对象symsargv1argv2同时说明多个符号变量(对象),上述格式的简洁形式2020/1/278f=sym(argn,flagn)中的argn是数值或数值表达式时,flagn可取以下选择:‘d’最接近的十进制浮点精确表示;‘e’带(数值计算时)估计误差的有理表示;‘f’十六进制浮点表示;‘r’最接近有理表示,缺省选项。2020/1/279f=sym(‘argv’,flagv)中‘argv’是字符时,flagv可取以下“限定性”选项:real、positive和unrealk=sym('k','positive')x=sym('x','real')x=sym('x','unreal')表明x是实符号变量表明k是正、实符号变量去掉x的附加属性2020/1/2710例:a1=[1/3,pi/7,sqrt(5),pi+sqrt(5)]%a1是数值常数a2=sym([1/3,pi/7,sqrt(5),pi+sqrt(5)])%最接近的有理表示a2=sym([1/3,pi/7,sqrt(5),pi+sqrt(5)],‘e’)%´带估计误差的有理表示a2=sym(‘[1/3,pi/7,sqrt(5),pi+sqrt(5)]’)%绝对准确的符号数值表示2020/1/27112.符号变量与符号表达式f=sym('sin(x)+5x’)f——符号变量名sin(x)+5x——符号表达式''——符号标识符号表达式一定要用''单引号括起来matlab才能识别。2020/1/2712''的内容可以是符号表达式,也可以是符号方程。例1:f1='ax^2+bx+c'——二次三项式f2='ax^2+bx+c=0'——方程f3='Dy+y^2=1'——微分方程※符号表达式或符号方程可以赋给符号变量,方便以后调用;也可以不赋给符号变量直接参与运算2020/1/2713例2x=sym(‘x’)%用sym一次只能定义一个符号变量symsabc%syms可同时定义多个变量symsrmreal%定义表示实数的符号变量(默认为复数)z=r+i*m;conj(z)%conj求共轭复数ans=r-i*m2020/1/2714rho=sym(‘(1+sqrt(5))/2’);f=rho^2-rho-1,fs=simplify(f)f=(1/2+1/2*5^(1/2))^2-3/2-1/2*5^(1/2)fs=0用simple或simplify对符号表达式或函数进行化简2020/1/2715符号表达式中自变量的确定规则:只对除i和j以外的单个小写英文字母进行搜索;默认x是首选自变量;其余字母被选为自变量的搜索次序是:在英文字母表中靠近x的字母优先,距离相同时排在x之后的字母优先2020/1/2716符号表达式和字符串中的自变量f='sin(x+y)';symvar(f)%返回字符串表达式中的自变量;fs=sym(f),findsym(fs)%返回符号表达式中的自变量;ans='x''y‘ans=x,y2020/1/2717符号对象与字符串之间的转换s='5+sin(x)+exp(y)^2';fs=sym(s),s1=char(fs)fs=5+sin(x)+exp(y)^2s1=5+sin(x)+exp(y)^2whossfss1NameSizeBytesClassfs1x1158symobjects1x1734chararrays11x1734chararray2020/1/27183.符号矩阵的创建数值矩阵A=[1,2;3,4]A=[a,b;c,d]——不识别用matlab函数sym创建矩阵(symbolic的缩写)命令格式:A=sym('[]')※符号矩阵内容同数值矩阵※需用sym指令定义※需用''标识2020/1/2719例如:A=sym('[a,2*b;3*a,0]')A=[a,2*b][3*a,0]这就完成了一个符号矩阵的创建。注意:符号矩阵的每一行的两端都有方括号,这是与matlab数值矩阵的一个重要区别。2020/1/2720用字符串直接创建矩阵模仿matlab数值矩阵的创建方法需保证同一列中各元素字符串有相同的长度。例:A=['[a,2*b]';'[3*a,0]']A=[a,2*b][3*a,0]2020/1/2721例:创建符号矩阵symsabcdefghA=[ab;cd],B=[ef;gh],C=A*BD=sym('[1/(x+t),sin(x);1,exp(x)]')B=[e,f][g,h]A=[a,b][c,d]C=[a*e+b*g,a*f+b*h][c*e+d*g,c*f+d*h]D=[1/(x+t),sin(x)][1,exp(x)]2020/1/2722符号矩阵的修改a.直接修改可用、键找到所要修改的矩阵,直接修改b.指令修改①A(行标,列标)=符号表达式②A1=subs(S,‘new',‘old')2020/1/2723例如:A=[a,2*b][3*a,0]A1=subs(A,'c','b')A2=[a,2*c][3*a,4*c]A(2,2)='4*b'A=[a,2*b][3*a,4*b]2020/1/2724相关函数subs:符号替换subs(f):用当前工作空间中存在的变量值,替换f中所有出现的相同的变量,并进行简化计算。subs(f,x,a):用a替换f中的x;a是可以是数/数值变量/表达式或符号变量/表达式。若x与a为相同大小的向量或矩阵,则用a中相应的元素替换x中的元素;若f,x为标量,而a是向量或矩阵,则f与x将扩展为与a相同形状的向量或矩阵。2020/1/2725例:symsxyf=2*x+y;x=3,y=4;subs(f)subs(f,x,’a’)Matlab符号运算(二)symsxyabf=2*x+y;subs(f,[x,y],[3,4])subs(f,{x,y},{3,4})subs(f,x,[1:3])subs(f,{x,y},{[1:3],[5:7]})subs(f,{x,y},{a+b,a-b})ans=10ans=2*x+yans=10ans=[2+y,4+y,6+y]ans=[71013]yxxf2)(ans=3*a+b2020/1/2726符号矩阵与数值矩阵的转换将数值矩阵转化为符号矩阵函数调用格式:sym(A)A=[1/3,2.5;1/0.7,2/5]A=0.33332.50001.42860.4000sym(A)ans=[1/3,5/2][10/7,2/5]2020/1/2727将符号矩阵转化为数值矩阵函数调用格式:double(A)、int8(A)、int16(A)A=[1/3,5/2][10/7,2/5]double(A)int8(A)ans=ans=0.33332.5000031.42860.4000102020/1/2728二、符号运算1、符号矩阵运算数值运算中,所有矩阵运算操作指令都比较直观、简单。例如:a=b+c;a=a*b;A=2*a^2+3*a-5等。符号运算也是采用与数值运算相同的运算符。2020/1/2729符号矩阵的基本运算符号矩阵的基本运算与数值矩阵的基本运算相类似。1)基本运算符:+、-、*、\、/、^、.*、.\、./、.^、’、.’2)三角函数与反三角函数:sin、cos、tan、……3)指数、对数函数:sqrt、exp、log、……4)复数函数:real、imag、conj、abs5)矩阵函数:det、inv、rank、……(没有norm)6)矩阵元素的抽取:diag、tril、triu2020/1/2730例1:f=sym(‘2*x^2+3*x-5’);g=sym(‘x^2+x-7’);h=f+gh=3*x^2+4*x-12例2:f=sym('cos(x)');g=sym('sin(2*x)');f/g+f*gans=cos(x)/sin(2*x)+cos(x)*sin(2*x)2020/1/2731例1:f=2*x^2+3*x-5;g=x^2+x-7;symsxf=2*x^2+3*x-5;g=x^2+x-7;h=f+gh=3*x^2+4*x-12例2:f=cos(x);g=sin(2*x);symsxf=cos(x);g=sin(2*x);f/g+f*gans=cos(x)/sin(x)+cos(x)*sin(x)2020/1/2732例3符号矩阵的基本操作和运算x=reshape(sym(0:3),2,2);symst;y=x.^2,z=x*x,w=inv(z),w([22])=0,wt=expm(w*t)symsabc;t=[ab*2c+3;456;cba],sum(t)reshape:符号矩阵的变形;expm:符号矩阵的幂运算;sum:符号矩阵按列求和2020/1/27332.任意精度的数学运算在symbolic中有三种不同的算术运算:数值类型matlab的浮点算术运算有理数类型maple的精确符号运算vpa类型maple的任意精度算术运算2020/1/2734浮点算术运算1/2+1/3--(定义输出格式formatlong)ans=0.83333333333333符号运算sym(1/2)+(1/3)ans=5/6--精确解2020/1/2735任意精度算术运算digits(n)——设置可变精度,缺省16位vpa(x,n)——显示可变精度计算digits(25)vpa(1/2+1/3)ans=.83333333333333333333333332020/1/2736vpa(5/6,40)ans=.8333333333333333333333333333333333333333a=sym('[1/4,exp(1);log(3),3/
本文标题:第三讲 MATLAB的符号运算
链接地址:https://www.777doc.com/doc-3337241 .html