1、MATLAB编程代码集结4第三章 MATLAB符号运算(区别于数值运算其对象主要为非数值的字符串)sym函数将数值类型转换为符号类型的变量s=sym(A,flag)s=sym(A,flag)上述表达式是由A建立一个符号对象或者符号表达式s,不带单引号的A是一个数字,数值矩阵或者数值表达式,其输出是将数值对象转换成符号对象或者符号表达式。带单引号的A是一个字符串,输出是将字符串转换成的符号对象或者符号表达式3.1.2 符号对象的创建符号常量的创建将数值常亮作为sym函数的输入参量,建立一个符号常量。例如s=sym(2*5);s1=s+2class(s1)产生结果s = 10 s1 = 12 an
2、s = SymS和s1虽然是数字形式,但是他们是按照符号形式存储的符号变量的创建x=sym(a);y=sym(b);a=class(x)b=class(y)a =symb =Symsyms a ba=class(a)b=class(b)利用sym创建矩阵符号矩阵的创建利用sym创建矩阵的时候元素可以使任何不带等号的符号表达式,各元素字符串之间长度可以不相等,符号矩阵内的元素之间使用逗号或者空格键隔开,各行之间使用分号隔开。s=sym(a*b exp(a);cos(x)2 1/(3+x2)产生结果如下s = a*b, exp(a) cos(x)2, 1/(3+x2) 直接输入法创建矩阵要求每一行
3、用中括号括起来,并且使用分号隔开,个元素之间使用逗号隔开。同事要保证同一列上的各行字符长度相同,不够时候用空格填补。s1=(a+b),sin(b),exp(a);a*b ,log(b),b 产生的结果如下s1 =(a+b),sin(b),exp(a)a*b ,log(b),b 将数值矩阵转换为符号矩阵数值矩阵不能直接参与符号运算,因此在符号运算中需要先将数值矩阵转换为符号矩阵,用sym函数可以实现将数值矩阵转换为符号矩阵。s2=2/3,sqrt(2);5.2,log(3)s3=sym(s2) s2=2/3,sqrt(2);5.2,log(3)s3=sym(s2)产生的结果为s2 = 0.666
4、7 1.41425.2000 1.0986s3= 2/3, sqrt(2) 26/5, 4947709893870346*2(-52) 符号表达式的创建使用syms建立符号函数syms x y z;f1=2*x*y/zf2=sin(x)*x+y2+cos(z)f3=f1/f2f1 =2*x*y/zf2 =sin(x)*x+y2+cos(z) f3 = 2*x*y/z/(sin(x)*x+y2+cos(z)使用sym建立符号函数e1=sym(x2+b*x+c)e2=sym(sin(x)2+2*cos(x)2=1)e3=sym(dy-5=x) e1 =x2+b*x+c e2 =sin(x)2+2*
5、cos(x)2=1 e3 = dy-5=x符号运算中的运算符符号表达式中自变量的确定findsym确定表达式的自变量findsym(f,n);按数学常规函数中确定符号函数f中的n个自变量,当n=1时候,说明有一个自变量,于是从字母之中寻找与x最接近的字母,如果两个字母都与x距离相等则选取较后的一个,当n为默认状态时候,findsym函数会给出符号函数f中所有的符号变量。findsym(e,n):该表达式确定符号方程中的n 个变量f=sym(m2+8*z+n*m);findsym(f,1)ans =zf=sym(w*y+y2+w*z);findsym(f,1)e=sym(2*a+c*b+d=0)
6、;findsym(e,1)findsym(e)ans =dans =a, b, c, d默认时候findsym函数给出了符号方程中的所有变量 3.2符号表达式的运算(1)提取分子和分母 要求符号函数表达式是一个有理式(两个多项式比的形式)Numden函数的具体用法如下n,d=number(f):f指的要进行提取的有理式,n指的是提取后的有理式,d指的是提取后的分母。提取函数的分子和分母,在命令中输入如下语句:f=sym(x2/(2*y+1)n,d=numden(f)f =x2/(2*y+1)n =x2 d = 2*y+1 提取函数的分子和分母f=sym(2/3*x2+1/2*x+5)n,d=n
7、umden(f)f =2/3*x2+1/2*x+5n =4*x2+3*x+3 d =6(2)标准代数运算 m=sym(x3+2*x2)n=sym(x2-3*x)a=m+nb=m/nc=m*nm = x3+2*x2 n = x2-3*xa =x3+3*x2-3*xb =(x3+2*x2)/(x2-3*x)(3)复合符号函数的运算fg=compose(f,g,v,w,t): compose函数是在w=t时候对f(v)和v=g(x)求复合函数,fg=f(g(w),v w 分别是函数f和g的自变量,t是复合函数的自变量f=(4)数值转换LogicalCharInt8 16 32 uint32 sing
8、le double cell struct例如x=5.78;f=sym(2*x+x2);m=eval(f)int8(m)Logical(m)m = 44.9684ans = 45Warning: Values other than 0 or 1 converted to logical 1ans = 1(5)Sym2poly函数将符号表达式转换为数值多项式的系数向量,并且系数从高到低依次排列。f=sym(7+3*x+5*x2);sym2poly(f)ans = 5 3 7(6)Poly2sym函数将数值多项式的系数向量转换为符号表达式,作用于sym2poly相反 a=5 3 7;poly2sy
9、m(a) ans =7+3*x+5*x2(7)eval函数f=sym(x+y);x=sym(2);y=sym(5);p=eval(f)class(p)p = 7ans =sym(8)变量替换(9)Subs(S,old,new):用new来替换s中的old变量,且old必须是符号变量,new可以使符号变量 符号常亮 数值 和数组等。Subs(S,new)用new来替换s中的自变量Subs(s)syms a m n w;f=1+5*a;subs(f,a,m2+5*n) ans = 1+5*(m2+5*n)(10)利用factor实现因式分解 f=sym(x2+5*x+4);factor(f) an
10、s =(x+4)*(x+1) 使用factor函数对符号矩阵表达式进行因式分解syms m x nm=1:10(11)Collect实现合并同类项Collect(s),collect(s,v)合并s中v相同次幂的表达式 f=sym(x3+2*x)*(x+1);collect(f) ans = x4+x3+2*x2+2*x(12)Horner形成嵌套形式(13)expand展开e=sym(x+y)3);expand(e) ans =x3+3*x2*y+3*x*y2+y3 (14)Simplify可以综合化简y=sym(sin(x)2-2*sin(x)*cos(x)+cos(x)2);simpli
11、fy(y) ans =-2*sin(x)*cos(x)+1 (15)Simple 功能强大可以将表达式转换为最简单形式r,how=simple(S)其中r为最简单的符号表达式,how是一个描述简化方法的字符串。r=simple(S)Simple可以执行collect factor expand simplify radsimp convert combine y=sym(sin(x)2-2*sin(x)*cos(x)+cos(x)2);simplify(y) ans = -2*sin(x)*cos(x)+1 f=sym(2*cos(x)*sin(x);simple(f) simplify: 2
12、*sin(x)*cos(x) radsimp: 2*sin(x)*cos(x) combine(trig): sin(2*x) factor: 2*sin(x)*cos(x) expand: 2*sin(x)*cos(x) combine: sin(2*x) convert(exp): -i*(exp(i*x)-1/exp(i*x)*(1/2*exp(i*x)+1/2/exp(i*x) convert(sincos):2*sin(x)*cos(x) s=sym(x2-1)*(x+2)/(x+1);r,how=simple(s)simple(s) r = x2+x-2 how =combine(
13、trig) simplify: (x+2)*(x-1) radsimp: (x+2)*(x-1) combine(trig): x2+x-2 factor: (x+2)*(x-1) expand: 1/(x+1)*x3+2/(x+1)*x2-1/(x+1)*x-2/(x+1) combine: (x2-1)*(x+2)/(x+1)矩阵符号计算 A=sym(a,2*b;3*a,0)B=sym(2*x 3*b;n+m d+8)A+BA = a, 2*b 3*a, 0B = 2*x, 3*b n+m, d+8ans = a+2*x, 5*b 3*a+n+m, d+8 计算矩阵的二次方A=sym(8
14、1 6;2 6 4;3 5 2);A2 ans = 84, 44, 64 40, 58, 44 40, 43, 42线性代数运算Inv函数计算符号矩阵的逆inv(A) A=sym(8 1 6;2 6 4;3 5 2);inv(A) ans = 1/13, -7/26, 4/13 -1/13, 1/52, 5/26 1/13, 37/104, -23/52 Det函数计算矩阵行列式det(A) A=sym(8 1 6;2 6 4;3 5 2);det(A) ans = -104 triu 和tril实现对角元素分别为矩阵上三角部分和下三角部分diag对角矩阵Rank求秩Null函数计算零空间正交
15、基科学计算(1)符号极限的运算Limit(f,x,a)表示当x无线趋近于a时候,函数f(x)的极限值。Limit(f,a) 当x无线趋近于a时候计算符号函数的极限值,没有指定变量的情况下按照findsystem函数指示的默认变量确定函数的变量(2)Limit(f,x,a,left)和limit(f,x,a,right)计算的极限 syms xf=cos(x);limit(f,x,1) ans = cos(1) (3)符号微分计算Diff(s)没有指定情况下系统默认对函数s自变量求解Diff(s,V)对函数s变量v求解Diff(s,n)Diff(s,v,n)计算f=ax2+bx+cf=sym(a
16、*x2+b*x3+c*x)diff(f,x,2) f =a*x2+b*x3+c*xans =2*a+6*b*x (4)符号函数积分运算Int(s,v)以v为自变量对s积分Int(s,v,a,b) a和b分别为积分函数的上下限计算f=cos(x)2的积分f=sym(cos(x)2);int(f,x,1,9)ans =1/2*cos(9)*sin(9)+4-1/2*cos(1)*sin(1)计算广义积分的值 syms xf=1/(x2+4*x+9);int(f,-inf,+inf)ans =1/5*pi*5(1/2) (5)符号表达式转换fourier(f)(傅里叶变换)和 ifourier(f)
17、(傅里叶反变换)(6)同理拉氏变换laplace (f) 和ilaplace(f) 3.6符号函数图形变换Ezplot(f)绘制图线区间-2pi, 2pi;绘制隐函数f(x,y)=0在区间-2pix2pi 和 -2piy2pi; 绘制参数方程x=x(t);y=y(t)在区间0t2piEzplot(f,min,max)、ezplot(f,xmin,xmax,ymin,ymax,) ezplot(x,y,tmin,tmax)第一种指的是函数f在指定区间min,max的二维曲线,第二种指的是minxmax, minymax, syms x yf=x2-y3ezplot(f) syms x y t x
18、=2*sin(t);y=t*cos(t);ezplot(x,y)gridtitle(参数方程)三维曲线的绘制syms tx=sin(t);y=cos(t);z=t;ezplot3(x,y,z,0,20);gridtitle(三维曲线)等值线的绘画Ezcontour(f) 绘制f(x,y)在默认区域内的等值线Ezcontour(f,domain),绘制二元函数在指定区域内的等值线Ezcontour(,n,),绘制等值线并规定数目syms x yf=3*(1-x)2*exp(-(x2)-(y+1)2);ezcontour(f)符号函数的曲面及其表面的绘制采用Ezmesh三维曲面图 ezmeshc
19、ezmeshc带等值线的三维曲面图 ezsurf三维表面图ezsurfc带等值线的三维曲面图三维表面图形用法ezmesh(f)Ezmesh(f,domain)Ezmensh(x,y,z)Ezmensh(x,y,z,smin,smax,tmin,tmax) 或者ezmensh(x,y,z,min,max) syms x ysubplot(2,2,1)ezmesh(x*exp(-x2-y2),-2.5,2.5)title(三维曲面图)subplot(2,2,2)ezsurf(x*exp(-x2-y2),-2.5,2.5)title(三维曲表面图)subplot(2,2,3)ezmeshc(x*exp(-x2-y2),-2.5,2.5)title(带等值线三维曲面图)subplot(2,2,4)ezsurfc(x*exp(-x2-y2),-2.5,2.5)title(带等值线三维表面图)符号方程的求解Solve函数G=solve(eq)其中eq是符号表达式或字符串,该方程求解的是eq=0G=solve(eq,var),求解方程eq=0,其中自变量有参数var决定例如Syms x a b cx=solve(4*a*x2+b*x-c)返回值x是所有解构成的列向量 syms a b c xb=solve(a*x2+b*x+3*c,b) b =-(a*x2+3*c)/x求解方程
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1