第六部分 符号计算

1.符号常量和符号变量

创建的这个符号对象可以用class()函数来检测其数据类型。用sym()函数创建符号变量的一般格式为:

sym(常量)     %创建符号常量

sym(常量,参数)   %把常量按“参数”指定的格式转换为符号常量

例:定义符号常量1/3,并判断变量类型

>> a=1/3;

>> b=sym(1/3); %定义1/3为符号常量

>> c=class(a) %查询a的常量类型

c =

double

>> d=class(b) %查询b的常量类型

d =

sym

2.定义符号变量

(1)用sym()函数定义符号变量

格式:

sym(‘varname’,parameter)

sym(expression)

其中,varname表示创建符号变量的名称;expression表示符号表达式。parameter可以用来设置限定符号变量的数学特性,可以选择为poasitive、real和unreal,分别表示正数、实数和负实数。

例.做符号计算:

MATLAB之符号计算_符号计算

式中a,b,x,y均为符号常量。在符号运算前,应先将变量a,b,x,y定义为符号常量

>> a=sym('a')

a =

a

>> a=sym('a');

>> b=sym('b');

>> x=sym('x');

>> y=sym('y');

>> [x,y]=solve(a*x-b*y-3,a*x+b*y-8,x,y)

x =

11/(2*a)

y =

5/(2*b)

(2)使用syms()函数定义符号常量

格式:

syms(‘arg1’,’arg2’,...,参数)    %把字符常量定义为符号常量

syms arg1 arg2 ...参数    %把字符变量定义为符号变量的简洁形式

(3)默认符号变量

编号

符号表达式

默认符号变量

编号

符号表达式

默认符号变量

1

a*x^3+b*x+c

x

4

18*a+b

b

2

1/(3+cos(t))

t

5

2*i

i

3

10*x/y

x

 

 

 

3.符号表达式

符号表达式例子

符号表达式

MATLAB表达式

MATLAB之符号计算_符号计算_02

‘1/(3*x^n)’

MATLAB之符号计算_符号表_03

y=’1/sqrt(6*x)’

MATLAB之符号计算_符号表_04

‘cos(x^3)-sin(3*x)’

MATLAB之符号计算_符号表_05

M=sym(‘[1,2;3,4]’)a

例:使用sym ()函数创建符号表达式f=ax+b

>> syms a x b

>> f=a*x+b

f =

b + a*x

4.符号表达式运算

(1)提取分子和分母

语法格式:[N,D]=numden(expression)

N为通分后的分子,D为通分后的分母

例:求符号表达式

MATLAB之符号计算_符号常量_06

的分子和分母

>> syms x y;

>> f=x/y+y/x;

>> [N,D]=numden(f)

N =

x^2 + y^2

D =

x*y

(2)标准代数运算

格式:

sym(expression1)+sym(expression2) %符号表达式加运算

sym(expression1)-sym(expression2) %符号表达式减运算

sym(expression1)*sym(expression2) %符号表达式乘运算

sym(expression1)/sym(expression2) %符号表达式除运算

例.给定符号表达式

MATLAB之符号计算_符号表_07


MATLAB之符号计算_符号常量_08

,请给出两个符号表达式进行加,减,乘,除运算的结果

>> f='2*x^2+3*x-5'

f =

2*x^2+3*x-5

>> g='x^2-x+7'

g =

x^2-x+7

>> sym(f)+sym(g)

ans =

3*x^2 + 2*x + 2

>> sym(f)-sym(g)

ans =

x^2 + 4*x - 12

>> sym(f)*sym(g)

ans =

(x^2 - x + 7)*(2*x^2 + 3*x - 5)

>> sym(f)/sym(g)

ans =

(2*x^2 + 3*x - 5)/(x^2 - x + 7)

(3)高级运算

a.使用compose()函数实现函数复合

格式:Expression3=compose(expression1,expression2)

例.给定表达式

MATLAB之符号计算_符号计算_09

和g=sin(x),请计算f(g(x))和g(f(x))的结果

>> syms x;

>> syms u v

>> f=1/(1+x^2)

f =

1/(x^2 + 1)

>> g=sin(x)

g =

sin(x)

>> h=1/(1+u^2)

h =

1/(u^2 + 1)

>> k=sin(v)

k =

sin(v)

>> compose(f,g)

ans =

1/(sin(x)^2 + 1)

>> compose(g,f)

ans =

sin(1/(x^2 + 1))

>> compose(h,k,'u','v')

ans =

1/(sin(v)^2 + 1)

 b.使用finverse()函数求反函数

格式:finverse(expression1,varname)

varname为自变量,expression为符号表达式。finverse()函数对指定自变量varname的函数expression1(varname)求反函数,当varname省略,则对默认的自由符号变量求反函数

例:求1/x,

MATLAB之符号计算_符号表_10

和ax+b的逆函数

>> syms a b

>> finverse(1/x)

ans =

1/x

>> finverse(x^2)

ans =

x^(1/2)

>> finverse(a*x+b)

ans =

-(b - x)/a

(4)使用symsun()函数对级数求和

语法格式:

r=symsum(s)   %对符号表达式s中的默认符号变量k从0到k-1求和

r=symsum(s,v)   %对符号表达式s中的指定符号变量v从0到v-1求和

r=symsum(s,a,b)   %对符号表达式s中的指定符号变量v从a到b求和

r=symsum(s,v,a,b)   %对符号表达式s中的默认符号变量k从a到b求和

例:求级数1/12+1/22+1/32+1/42+...的和及其前10项的部分和

>> syms k

>> symsum(1/k^2,1,inf)

ans =

pi^2/6

>> double(ans)

ans =

1.6449

5.符号微分和积分

a.符号极限limit

命令格式

说明

limit(expression,x,a)

计算符号表达式x→a时,F的极限值

limit(expression,a)

计算符号函数F的极限值,因未指定F的自变量,用该格式时,变量为findsym确定默认自变量,即默认自变量→a

limit(expression)

计算符号函数F的极限值,变量findsym确定的默认变量;在未指定目标值时,默认变量趋近于0

limit(expression,x,a,’left’)

计算当x→a时函数F的左极限

limit(expression,x,a,’right’)

计算当x→a时函数F的右极限

例.求

MATLAB之符号计算_符号计算_11

的左右极限

>> syms x t;

>> limit(1/x,x,0,'right')

ans =

Inf

>> limit(1/x,x,0,'left')

ans =

-Inf

b.符号微分

命令格式

说明

diff(f,v,n)

表示以v为变量,对符号表达式f求n阶微分

diff(f,v)或diff(f,sym(‘v’))

表示以v为自变量,对符号表达式f求一阶微分

diff(f,n)

表示根据findsym指示的默认变量对符号表达式f求n阶微分

diff(f)

%表示没有指定微分变量和微分阶数,则按findsym指示的默认变量对符号表达式f求一阶微分

例.使用符号运算计算

MATLAB之符号计算_符号计算_12

>> f=sym('t^8')

f =

t^8

>> diff(f,8)

ans =

40320

(3)符号积分

命令格式

说明

int(f,’v’,a,b)

表示以v为变量,对符号表达式f求a到b的定积分

int(f,’v’)或int(f,’v’)

表示v为自变量,对符号表达式f求不定积分

int(f,a,b)

根据findsym指示的默认变量对符号表达式f求a到b的定积分

int(f)

按findsym指示的默认变量对符号表达式f求不定积分。如果f是常数,积分将针对x

例.分别计算表达式

MATLAB之符号计算_符号表_13


MATLAB之符号计算_符号计算_14

对α的积分

>> syms x x1 alpha u t;

>> int(1/(1+x^2))

ans =

atan(x)

>> int(sin(alpha*u),alpha)

ans =

-cos(alpha*u)/u

6.方程求解

(1)求解代数方程组

格式:

g=solve(equation)

g=solve(equation,var)

g=solve(equation1,equation2,..,equationn)

g=solve(equation1,equation2,..,equationn,var1,var2,..varn)

例.求解

MATLAB之符号计算_符号表_15

>> syms x

>> f=x^2-1;

>> solve(f)

ans =

1

-1

(2)单个微分方程

格式:

r=dsplve(‘eq1,eq2,...’,’cond1,cond2,...’,’var’)

r=dsplve(‘eq1’,’eq2’,...’,’cond1’,’cond2’,...’,’var’)

例.求解微分方程f’=f+cos(t)

>> dsolve('Df=f+cos(t)')

ans =

sin(t)/2 - cos(t)/2 + C5*exp(t)

(3)微分方程组

例.求解微分方程组x’=y,y’=x

>> A=dsolve('Dx=y','Dy=-x')

A =

y: [1x1 sym]

x: [1x1 sym]

>> A.x

ans =

C6*cos(t) + C7*sin(t)

>> A.y

ans =

C7*cos(t) - C6*sin(t)

7.线性代数和矩阵

(1)符号矩阵的创建

a.用字符串直接创建矩阵

例:

>> A=['[ a,2*b]';'[3*a, 0]']

A =

[ a,2*b]

[3*a, 0]

b.用sym()函数创建矩阵

例:

>> A=sym('[ a,2*b;3*a, 0]')

A =

[ a, 2*b]

[ 3*a, 0]

c.用syms()函数创建矩阵

格式:syms arg1 arg2...参数

A=[]

例:

>> syms a b

>> A=[a,2*b;3*a,0]

A =

[ a, 2*b]

[ 3*a, 0]

 d.将数值矩阵转化成符号矩阵

例.已知数值矩阵[2/3,sqrt(2);5.2,log(3)],试将该矩阵装换为符号矩阵

>> B=[2/3,sqrt(2);5.2,log(3)]

B =

0.6667 1.4142

5.2000 1.0986

8.符号矩阵相关函数

(1)矩阵变换函数

函数名称

函数功能说明

flipud(A)

将矩阵A上下翻转

fliplr(A)

将矩阵A左右翻转

flidim(A,dim)

将矩阵A沿特定dim维翻转

rot90(A)

将矩阵A逆时针旋转90度

reshape(A,M,N)

将矩阵A变维成M*N阶的

(2)矩阵运算函数

函数名称

函数功能说明

函数名称

函数功能说明

chol

矩阵的Cholesky分解

logm()

矩阵的对数函数

cond

矩阵的条件数

lu()

矩阵的LU分解

condieg

对应于特征值的条件数

svd()

矩阵的奇异值分解

det

方阵的行列式值

norm()

向量矩阵的范数

eig

矩阵的特征值分解

squtm()

矩阵的平方根

expm

矩阵的指数函数

subspace()

子空间的夹角

funm

计算矩阵的函数值

jacobian()

求矩阵的jacobian矩阵

inv

求矩阵的逆矩阵

jordan()

求矩阵的jordanb标准型

rank

矩阵的秩

qr()

矩阵的QB分解

orth

矩阵的列空间