数学建模社区-数学中国

标题: Matlab符号基本运算—4 [打印本页]

作者: 森之张卫东    时间: 2015-7-20 18:55
标题: Matlab符号基本运算—4
命令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: [1x1 sym]
    y: [1x1 sym]
A =
    a: [4x1 sym]
    u: [4x1 sym]
    v: [4x1 sym]

命令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.6762    0.2652   -0.0017    0.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([1 2 3 4])
>>r2 = poly2sym([.694228, sqrt(2), sin(pi/3)])
>>r3 = poly2sym([1 0 1 -1 2], y)
计算结果为:
   r1 =
       x^3+2*x^2+3*x+4
   r2 =
       6253049924220329/9007199254740992*x^2+x*2^(1/2)+1/2*3^(1/2)
   r3 =
       y^4+y^2-y+2

命令20  将复杂的符号表达式显示成我们习惯的数学书写形式
函数  pretty
格式  pretty(S)   
%用缺省的线型宽度79显示符号矩阵s中每一元素
      pretty(S,n)   %用指定的线型宽度n显示
例3-19
>>A = sym(pascal(3));
>>B = eig(A)
>>pretty(B,50)  % 多看几次结果,会发现该命令显示的特点
>>syms x
>>y=log(x)/sqrt(x);
>>dy = diff(y)
>>pretty(dy)
计算结果为:
B =
     [         1]
     [ 4+15^(1/2)]
     [ 4 -15^(1/2)]
[    1    ]
[         ]
[      1/2]
[4 + 15   ]
[         ]
[      1/2]
[4 - 15   ]
dy =
    1/x^(3/2)-1/2*log(x)/x^(3/2)
1          log(x~)
----  - 1/2   -------
  3/2          3/2
x~          x~






欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5