matlab符号运算函数大全.docx |
您所在的位置:网站首页 › matlab做符号运算 › matlab符号运算函数大全.docx |
matlab符号运算函数大全.docx 《matlab符号运算函数大全.docx》由会员分享,可在线阅读,更多相关《matlab符号运算函数大全.docx(51页珍藏版)》请在冰豆网上搜索。 matlab符号运算函数大全 3.1算术符号操作 命令+、-、*、.*、\、.\、/、./、^、.^、’、.’ 功能符号矩阵的算术操作 用法如下: A+B、A-B符号阵列的加法与减法。 若A与B为同型阵列时,A+B、A-B分别对对应分量进行加减;若A与B中至少有一个为标量,则把标量扩大为与另外一个同型的阵列,再按对应的分量进行加减。 A*B符号矩阵乘法。 A*B为线性代数中定义的矩阵乘法。 按乘法定义要求必须有矩阵A的列数等于矩阵B的行数。 即: 若An*k*Bk*m=(aij)n*k.*(bij)k*m=Cn*m=(cij)n*m,则,i=1,2,…,n;j=1,2,…,m。 或者至少有一个为标量时,方可进行乘法操作,否则将返回一出错信息。 A.*B符号数组的乘法。 A.*B为按参量A与B对应的分量进行相乘。 A与B必须为同型阵列,或至少有一个为标量。 即: An*m.*Bn*m=(aij)n*m.*(bij)n*m=Cn*m=(cij)n*m,则cij=aij*bij,i=1,2,…,n;j=1,2,…,m。 A\B矩阵的左除法。 X=A\B为符号线性方程组A*X=B的解。 我们指出的是,A\B近似地等于inv(A)*B。 若X不存在或者不唯一,则产生一警告信息。 矩阵A可以是矩形矩阵(即非正方形矩阵),但此时要求方程组必须是相容的。 A.\B数组的左除法。 A.\B为按对应的分量进行相除。 若A与B为同型阵列时,An*m.\Bn*m=(aij)n*m.\(bij)n*m=Cn*m=(cij)n*m,则cij=aij\bij,i=1,2,…,n;j=1,2,…,m。 若若A与B中至少有一个为标量,则把标量扩大为与另外一个同型的阵列,再按对应的分量进行操作。 A/B矩阵的右除法。 X=B/A为符号线性方程组X*A=B的解。 我们指出的是,B/A粗略地等于B*inv(A)。 若X不存在或者不唯一,则产生一警告信息。 矩阵A可以是矩形矩阵(即非正方形矩阵),但此时要求方程组必须是相容的。 A./B数组的右除法。 A./B为按对应的分量进行相除。 若A与B为同型阵列时,An*m./Bn*m=(aij)n*m./(bij)n*m=Cn*m=(cij)n*m,则cij=aij/bij,i=1,2,…,n;j=1,2,…,m。 若A与B中至少有一个为标量,则把标量扩大为与另外一个同型的阵列,再按对应的分量进行操作。 A^B矩阵的方幂。 计算矩阵A的整数B次方幂。 若A为标量而B为方阵,A^B用方阵B的特征值与特征向量计算数值。 若A与B同时为矩阵,则返回一错误信息。 A.^B数组的方幂。 A.^B为按A与B对应的分量进行方幂计算。 若A与B为同型阵列时,An*m..^Bn*m=(aij)n*m..^(bij)n*m=Cn*m=(cij)n*m,则cij=aij^bij,i=1,2,…,n;j=1,2,…,m。 若A与B中至少有一个为标量,则把标量扩大为与另外一个同型的阵列,再按对应的分量进行操作。 A'矩阵的Hermition转置。 若A为复数矩阵,则A'为复数矩阵的共轭转置。 即,若A=(aij)=(xij+i*yij),则。 A.'数组转置。 A.'为真正的矩阵转置,其没有进行共轭转置。 例3-1 >>symsabcdefgh; >>A=[ab;cd]; >>B=[ef;gh]; >>C1=A.*B >>C2=A.^B >>C3=A*B/A >>C4=A.*A-A^2 >>symsa11a12a21a22b1b2; >>A=[a11a12;a21a22]; >>B=[b1b2]; >>X=B/A;%求解符号线性方程组X*A=B的解 >>x1=X (1) >>x2=X (2) 计算结果为: C1= [a*e,b*f] [c*g,d*h] C2= [a^e,b^f] [c^g,d^h] C3= [-(a*c*f+c*b*h-a*e*d-b*d*g)/(a*d-b*c),(a*b*h-b^2*g+a^2*f-b*a*e)/(a*d-b*c)] [-(-c*e*d+c*d*h+c^2*f-d^2*g)/(a*d-b*c),(a*d*h+a*c*f-b*c*e-b*d*g)/(a*d-b*c)] C4= [-b*c,b^2-a*b-b*d] [c^2-a*c-d*c,-b*c] x1= (-a22*b1+b2*a21)/(a12*a21-a11*a22) x2= -(-a12*b1+a11*b2)/(a12*a21-a11*a22) 3.2基本运算 命令1合并同类项 函数collect 格式R=collect(S)%对于多项式S中的每一函数,collect(S)按缺省变量x的次数合并系数。 R=collect(S,v)%对指定的变量v计算,操作同上。 例3-2 >>symsxy; >>R1=collect((exp(x)+x)*(x+2)) >>R2=collect((x+y)*(x^2+y^2+1),y) >>R3=collect([(x+1)*(y+1),x+y]) 计算结果为: R1= x^2+(exp(x)+2)*x+2*exp(x) R2= y^3+x*y^2+(x^2+1)*y+x*(x^2+1) R3= [(y+1)*x+y+1,x+y] 命令2列空间的基 函数colspace 格式B=colspace(A)%返回矩阵B,其列向量形成由矩阵A的列向量形成的空间的坐标基,其中A可以是符号或数值矩阵。 而size(colspace(A),2)等于rank(A)。 即由A生成的空间维数等于A的秩。 例3-3 >>symsabc >>A=sym([1,a;2,b;3,c]) >>B=colspace(A) 计算结果为: A= [1,a] [2,b] [3,c] B= [1,0] [0,1] [-(3*b-2*c)/(-b+2*a),(-c+3*a)/(-b+2*a)] 命令3复合函数计算 函数compose 格式compose(f,g)%返回复合函数f[g(y)],其中f=f(x),g=g(y)。 其中符号x为函数f中由命令findsym(f)确定的符号变量,符号y为函数g中由命令findsym(g)确定的符号变量。 compose(f,g,z)%返回复合函数f[g(z)],其中f=f(x),g=g(y),符号x、y为函数f、g中由命令findsym确定的符号变量。 compose(f,g,x,z)%返回复合函数f[g(z)],而令变量x为函数f中的自变量f=f(x)。 令x=g(z),再将x=g(z)代入函数f中。 compose(f,g,x,y,z)%返回复合函数f[g(z)]。 而令变量x为函数f中的自变量f=f(x),而令变量y为函数g中的自变量g=g(y)。 令x=g(y),再将x=g(y)代入函数f=f(x)中,得f[g(y)],最后用指定的变量z代替变量y,得f[g(z)]。 例3-4 >>symsxyztuv; >>f=1/(1+x^2*y);h=x^t;g=sin(y);p=sqrt(-y/u); >>C1=compose(f,g)%令x=g=sin(y),再替换f中的变量x=findsym(f)。 >>C2=compose(f,g,t)%令x=g=sin(t),再替换f中的变量x=findsym(f)。 >>C3=compose(h,g,x,z)%令x=g=sin(z),再替换h中的变量x。 >>C4=compose(h,g,t,z)%令t=g=sin(z),再替换h中的变量t。 >>C5=compose(h,p,x,y,z)%令x=p(y)=sqrt(-y/u),替换h中的变量x,再将y换成z。 >>C6=compose(h,p,t,u,z)%令t=p(u)=sqrt(-y/u),替换h中的变量t,再将u换成z。 计算结果为: C1= 1/(1+sin(y)^2*y) C2= 1/(1+sin(t)^2*y) C3= sin(z)^t C4= x^sin(z) C5= ((-z/u)^(1/2))^t C6= x^((-y/z)^(1/2)) 命令4符号复数的共轭 函数conj 格式conj(X)%返回符号复数X的共轭复数 例3-5 X=real(X)+i*imag(X),则conj(X)=real(X)-i*imag(X) 命令5符号复数的实数部分 函数real 格式real(Z)%返回符号复数z的实数部分 命令6符号复数的虚数部分 函数imag 格式imag(Z)%返回符号复数z的虚数部分 命令7余弦函数的整函数 格式Y=cosint(X)%计算余弦函数在点X处的整函数值。 其中X可以是数值矩阵,或符号矩阵。 余弦函数的整函数定义为: ,其中为Euler常数,=0.57721566490153286060651209…i=1,2,…,size(X)。 Euler常数可以通过命令vpa('eulergamma')获得。 例3-6 >>cosint(7.2) >>cosint([0: 0.1: 1]) >>symsx; >>f=cosint(x); >>diff(x) 计算结果为: ans= 0.0960 ans= Columns1through7 Inf-1.7279-1.0422-0.6492-0.3788-0.1778-0.0223 Columns8through11 0.10050.19830.27610.3374 ans= 1 命令8设置变量的精度 函数digits 格式digits(d)%设置当前的可变算术精度的位数为整数d位 d=digits%返回当前的可变算术精度位数给d digits%显示当前可变算术精度的位数 说明设置有意义的十进制数值的、在Maple软件中用于做可变算术精度(命令为: vpa)计算的数字位数。 其缺省值为32位数字。 例3-7 >>z=1.0e-16%z为一很小的数 >>x=1.0e+2%x为较大的数 >>digits(14) >>y1=vpa(x*z+1)%大数1“吃掉”小数x*y >>digits(15) >>y2=vpa(x*z+1)%防止“去掉”小数x*y 计算结果为: z= 1.0000e-016 x= 100 y1= 1.0000000000000 y2= 1.00000000000001 命令9将符号转换为MATLAB的数值形式 函数double 格式R=double(S)%将符号对象S转换为数值对象R。 若S为符号常数或表达式常数,double返回S的双精度浮点数值表示形式;若S为每一元素是符号常数或表达式常数的符号矩阵,double返回S每一元素的双精度浮点数值表示的数值矩阵R。 例3-8 >>gold_ratio=double(sym('(sqrt(5)-1)/2'))%计算黄金分割率。 >>T=sym(hilb(4)) >>R=double(T) 计算结果为: gold_ratio= 0.6180 T= [1,1/2,1/3,1/4] [1/2,1/3,1/4,1/5] [1/3,1/4,1/5,1/6] [1/4,1/5,1/6,1/7] R= 1.00000.50000.33330.2500 0.50000.33330.25000.2000 0.33330.25000.20000.1667 0.25000.20000.16670.1429 命令10符号表达式的展开 函数expand 格式R=expand(S)%对符号表达式S中每个因式的乘积进行展开计算。 该命令通常用于计算多项式函数、三角函数、指数函数与对数函数等表达式的展开式。 例3-9 >>symsxyabct >>E1=expand((x-2)*(x-4)*(y-t)) >>E2=expand(cos(x+y)) >>E3=expand(exp((a+b)^3)) >>E4=expand(log(a*b/sqrt(c))) >>E5=expand([sin(2*t),cos(2*t)]) 计算结果为: E1= x^2*y-x^2*t-6*x*y+6*x*t+8*y-8*t E2= cos(x)*cos(y)-sin(x)*sin(y) E3= exp(a^3)*exp(a^2*b)^3*exp(a*b^2)^3*exp(b^3) E4= log(a*b/c^(1/2)) E5= [2*sin(t)*cos(t),2*cos(t)^2-1] 命令11符号因式分解 函数factor 格式factor(X)%参量x可以是正整数、符号表达式阵列或符号整数阵列。 若X为一正整数,则factor(X)返回X的质数分解式。 若x为多项式或整数矩阵,则factor(X)分解矩阵的每一元素。 若整数阵列中有一元素位数超过16位,用户必须用命令sym生成该元素。 例3-10 >>symsabxy >>F1=factor(x^4-y^4) >>F2=factor([a^2-b^2,x^3+y^3]) >>F3=factor(sym('12345678901234567890')) 计算结果为: F1= (x-y)*(x+y)*(x^2+y^2) F2= [(a-b)*(a+b),(x+y)*(x^2-x*y+y^2)] F3= (2)*(3)^2*(5)*(101)*(3803)*(3607)*(27961)*(3541) 命令12符号表达式的分子与分母 函数numden 格式[N,D]=numden(A) 说明将符号或数值矩阵A中的每一元素转换成整系数多项式的有理式形式,其中分子与分母是相对互素的。 输出的参量N为分子的符号矩阵,输出的参量D为分母的符号矩阵。 例3-11 >>symsxyabcd; >>[n1,d1]=numden(sym(sin(4/5))) >>[n2,d2]=numden(x/y+y/x) >>A=[a,1/b;1/cd]; >>[n3,d3]=numden(A) 计算结果为: n1= 6461369247334093 d1= 9007199254740992 n2= x^2+y^2 d2= y*x n3= [a,1] [1,d] d3= [1,b] [c,1] 命令13搜索符号表达式的最简形式 函数simple 格式r=simple(S)%该命令试图找出符号表达式S的代数上的简单形式,显示任意的能使表达式S长度变短的表达式,且返回其中最短的一个。 若S为一矩阵,则结果为整个矩阵的最短形式,而非是每一个元素的最简形式。 若没有输出参量r,则该命令将显示所有可能使用的算法与表达式,同时返回最短的一个。 [r,how]=simple(S)%没有显示中间的化简结果,但返回能找到的最短的一个。 输出参量r为一符号,how为一字符串,用于表示算法。 例3-12 >>symsx >>R1=simple(cos(x)^4+sin(x)^4) >>R2=simple(2*cos(x)^2-sin(x)^2) >>R3=simple(cos(x)^2-sin(x)^2) >>R4=simple(cos(x)+(-sin(x)^2)^(1/2)) >>R5=simple(cos(x)+i*sin(x)) >>R6=simple((x+1)*x*(x-1)) >>R7=simple(x^3+3*x^2+3*x+1) >>[R8,how]=simple(cos(3*acos(x))) 计算的结果为: R1= 1/4*cos(4*x)+3/4 R2= 3*cos(x)^2-1 R3= cos(2*x) R4= cos(x)+i*sin(x) R5= exp(i*x) R6= x^3-x R7= (x+1)^3 R8= 4*x^3-3*x how= expand 命令14符号表达式的化简 函数simplify 格式R=simplify(S) 说明使用Maple软件中的化简规则,将化简符号矩阵S中每一元素。 例3-13 >>symsxabc >>R1=simplify(sin(x)^4+cos(x)^4) >>R2=simplify(exp(c*log(sqrt(a+b)))) >>S=[(x^2+5*x+6)/(x+2),sqrt(16)]; >>R3=simplify(S) 计算结果为: R1= 2*cos(x)^4+1-2*cos(x)^2 R2= (a+b)^(1/2*c) R3= [x+3,4] 命令15符号矩阵的维数 函数size 格式d=size(A)%若A为m*n阶的符号矩阵,则输出结果d=[m,n]。 [m,n]=size(A)%分别返回矩阵A的行数于m,列数于n。 d=size(A,n)%返回由标量n指定的A的方向的维数: n=1为行方向,n=2为列方向。 例3-14 >>symsabcd >>A=[abc;abd;dcb;cba]; >>d=size(A) >>r=size(A,2) 计算结果为: d= 43 r= 3 命令16代数方程的符号解析解 函数solve 格式g=solve(eq)%输入参量eq可以是符号表达式或字符串。 若eq是一符号表达式x^2-2*x-1或一没有等号的字符串’x^2-2*x-1’,则solve(eq)对方程eq中的缺省变量(由命令findsym(eq)确定的变量)求解方程eq=0。 若输出参量g为单一变量,则对于有多重解的非线性方程,g为一行向量。 g=solve(eq,var)%对符号表达式或没有等号的字符串eq中指定的变量var求解方程eq(var)=0。 g=solve(eq1,eq2,…,eqn)%输入参量eq1,eq2,…,eqn可以是符号表达式或字符串。 该命令对方程组eq1,eq2,…,eqn中由命令findsym确定的n个变量如x1,x2,…,xn求解。 若g为一单个变量,则g为一包含n个解的结构;若g为有n个变量的向量,则分别返回结果给相应的变量。 g=solve(eq1,eq2,…,eqn,var1,var2,…,varn)%对方程组eq1,eq2,…,eqn中指定的n个变量如var1,var2,…,varn求解。 注意: 对于单个的方程或方程组,若不存在符号解,则返回方程(组)的数值解。 例3-15 >>solve('a*x^2+b*x+c') >>solve('a*x^2+b*x+c','b') >>solve('x+y=1','x-11*y=5') >>A=solve('a*u^2+v^2','u-v=1','a^2-5*a+6') 计算结果为: ans= [1/2/a*(-b+(b^2-4*a*c)^(1/2))] [1/2/a*(-b-(b^2-4*a*c)^(1/2))] ans= -(a*x^2+c)/x ans= x: [1x1sym] y: [1x1sym] A= a: [4x1sym] u: [4x1sym] v: [4x1sym] 命令17以共同的子表达式形式重写一符号表达式 函数subexpr 格式[Y,SIGMA]=subexpr(X,SIGMA) [Y,SIGMA]=subexpr(X,'SIGMA') 说明找出符号表达式X中相同的子表达式,再结合命令pretty(X)将X中相同的、比较复杂的子字符串用符号%1,%2,…代替。 而用命令pretty(Y)将X中相同的、比较复杂的子字符串用符号SIGMA代替。 例3-16 >>t=solve('a*x^3+b*x^2+c*x+d=0'); >>[r,s]=subexpr(t,'s'); >>pretty(t) >>pretty(r) 计算结果为: (略) 命令18特征多项式 函数poly 格式p=poly(A)或p=poly(A,v) 说明若A为一数值阵列,则返回矩阵A的特征多项式的系数,且有: 命令poly(sym(A))近似等于poly2sym(poly(A))。 其近似程度取决于舍入误差的大小。 若A为一符号矩阵,则返回矩阵A的变量为x的特征多项式。 若带上参量v,则返回变量为v的特征多项式。 例3-17 >>A=hilb(4); >>p=poly(A) >>q=poly(sym(A)) >>s=poly(sym(A),z) 计算结果为: p= 1.0000-1.67620.2652-0.00170.0000 q= x^4-176/105*x^3+3341/12600*x^2-41/23625*x+1/6048000 s= -176/105*z^3+3341/12600*z^2-41/23625*z+1/6048000+z^4 命令19将多项式系数向量转化为带符号变量的多项式 函数poly2sym 格式r=poly2sym(c)和r=poly2sym(c,v) 说明将系数在数值向量c中的多项式转化成相应的带符号变量的多项式(按次数的降幂排列)。 缺省的符号变量为x; 若带上参量v,则符号变量用v显示。 poly2sym使用命令sym的缺省转换模式(有理形式)将数值型系数转换为符号常数。 该模式将数值转换成接近的整数比值的表达式,否则用2的幂指数表示。 若x有一数值值,且命令sym能将c的元素精确表示,则eval(poly2sym(c))的结果与polyval(c,x)相同。 例3-18 >>r1=poly2sym([1234]) >>r2=poly2sym([.694228,sqrt (2),sin(pi/3)]) >>r3=poly2sym([101-12],y) |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |