符号计算中 国 民 航 大 学 电 子 信 息 工 程 学 院本讲提纲
符号操作初步
符号对象的操作和转换
符号微积分
符号代数方程求解
符号微分方程求解中 国 民 航 大 学 电 子 信 息 工 程 学 院符号操作初步
数值表达式与符号计算数值表达式所用的变量必须事先被赋值否则无法计算符号计算在运算时,无须事先对变量赋值,而将所得到结果以标准的符号形式来表示。
符号计算
参与符号运算的对象可以是符号变量、符 号表达式或符号矩阵。
符号变量要先定义,后引用
用 sym函数,syms函数将运算符定义为符号型数据中 国 民 航 大 学 电 子 信 息 工 程 学 院符号操作初步引用符号运算函数时,用户可以指定函数执行过程中的变量参数;若用户没有指定变量参数,则使用 findsym函数默认的变量作为函数的变量参数 。
中 国 民 航 大 学 电 子 信 息 工 程 学 院符号操作初步
定义符号变量的 MATLAB指令
sym函数功能,创建符号变量创建符号表达式或符号矩阵进行符号运算格式,x = sym(‘A’,flagv ) 按 flagv指定的要求把字符串定义为符号对象
flagv,real positive unreal
x=sym(A,flagn) 把数值或数值表达式转换为符号对象
flagn,d r f e
中 国 民 航 大 学 电 子 信 息 工 程 学 院例 1 已知一复数表达式 z=x+i*y,试求其共轭复数,并求该表达式与其共轭复数乘积的多项式 。
解,为了使乘积表达式 x^2+y^2非负,这里,
把变量 x和 y定义为实数 。
x=sym(‘x’,’real’);
y=sym(‘y’,’real’);
符号操作初步中 国 民 航 大 学 电 子 信 息 工 程 学 院
z=x+i*y; %定义复数表达式
conj(z); %求共轭复数
expand(z*conj(z)) %求表达式与其共轭复数乘积的多项式
ans =
x^2+y^2
若要去掉 ’ x’的属性,可以使用下面语句
x = sym(‘x’,’unreal’)
将 ’ x’创建为纯格式的符号变量 。
符号操作初步中 国 民 航 大 学 电 子 信 息 工 程 学 院
syms函数功能,sym函数类似 。
一个语句中同时定义多个符号变量格式:
syms arg1 arg2 … argN
用于将 arg1,arg2,…,argN等符号创建为符号型数据 。
注意,用这种格式定义符号变量时不要在变量名上加字符串分界符 (‘),变量间用空格而不要用逗号分隔 。
符号操作初步中 国 民 航 大 学 电 子 信 息 工 程 学 院符号操作初步例 2 求矩阵 的行列式的值、逆和特征根解:首先定义符号变量 a11 a12 a22 a21
syms a11 a12 a21 a22
A=[a11 a12;a21 a22];
A_det=det(A),
A_inv=inv(A),
A_eig=eig(A),
11 12
21 22
aaA
aa


中 国 民 航 大 学 电 子 信 息 工 程 学 院符号操作初步
符号表达式符号表达式由符号变量、函数、算术运算符等组成。符号表达式的书写格式与数值表达式相同。例如,数学表达式其符号表达式为,1+sqr(5*x))/2
注意,在定义表达式前应先将表达式中的字符
x定义为符号变量。
2
51 x?
中 国 民 航 大 学 电 子 信 息 工 程 学 院符号操作初步
符号函数的生成将表达式中的自变量定义为符号变量后,
赋值给符号函数名,即可生成符号函数。
例如有一数学表达式:
2
22
),(
c
byaxyxf
中 国 民 航 大 学 电 子 信 息 工 程 学 院符号操作初步其用符号表达式生成符号函数 fxy的过程为,
syms a b c x y %定义符号运算量
fxy=(a*x^2+b*y^2)/c^2 %生成符号函数生成符号函数 fxy后,即可用于微积分等符号计算 。
中 国 民 航 大 学 电 子 信 息 工 程 学 院符号操作初步
符号计算中的算符和基本函数
基本运算符
关系运算符只有“等于”和“不等于”
三角函数、双曲函数及它们的反函数
atan2除外
指数、对数函数对数函数只有 log
复数函数无求相角指令
矩阵代数指令中 国 民 航 大 学 电 子 信 息 工 程 学 院符号操作初步
默认符号变量在数学表达式中,一般习惯于使用排在字母表中前面的字母作为变量的系数,而用排在后面的字母表示变量。例如:
f=ax^2+bx+c
表达式中的 a,b,c通常被认为是常数,用作变量的系数;而将 x看作自变量。
中 国 民 航 大 学 电 子 信 息 工 程 学 院符号操作初步例如,数学表达式
f=xn
g=sin(at+b)
根据数学式中表示自变量的习惯,默认 a,b,c为符号常,x为符号变量 。
若在 MATLAB中表示上述表达式,首先用 syms 函数定义 a,
b,n,t,x为符号对象。在进行导数运算时,由于没有指定符号变量,则系统采用数学习惯来确定表达式中的自变量,
默认 a,b,c为符号常数,x,t为符号变量。
即,对函数 f求导为,df/dx
对函数 g求导为,dg/dt
中 国 民 航 大 学 电 子 信 息 工 程 学 院符号操作初步
符号表达式自变量确定规则
只对除 i和 j以外的单个小写英文字母进行搜索
默认 x是首选自变量
其余字母被选为自变量的搜索次序是,在英文字母表中靠 x近的字母优先,距离相同时排在 x之后的字母优先。如果没有为符号表达式显示说明自变量,
则 MATLAB会调用函数 findsym,在表达式中自动寻找自变量中 国 民 航 大 学 电 子 信 息 工 程 学 院符号操作初步
findsym函数的引用格式为:
findsym( f,n)
说明,f为用户定义的符号函数,
n为正整数,表示查询变量的个 数。
n=i,表示查询 i个系统默认变量。
n值省略时表示查询符号函数中全部系统默认变 量。
中 国 民 航 大 学 电 子 信 息 工 程 学 院符号操作初步例 3 求矩阵 中的变量
syms a b t u v x y;
A=[a+b*x,sin(t)+u;x*exp(-t),log(y)+v];
findsym(A,1)
ans=
x
findsym(A,2)
s i n
lnt
a b x t uA
x e y v?


中 国 民 航 大 学 电 子 信 息 工 程 学 院符号对象的操作和转换
符号表达式的操作
simple (x) 对符号表达式或矩阵进行化简例 化简
syms x
f=(1/x^3+1/x^2+1/x+8)^(1/3);
g=simple(f);
g1=simple(g)
3 321 6 1 2 8f x x x
中 国 民 航 大 学 电 子 信 息 工 程 学 院符号对象的操作和转换
嵌套将符号多项式 s用嵌套形式表示,即用多层括号的形式表示 。 Horner函数可以实现此功能 。 该函数的格式为:
horner(s)
例将表达式 x^3-6*x^2+11*x-6用嵌套形式表示 。
syms x
horner(x^3-6*x^2+11*x-6)
ans =
-6+(11+(-6+x)*x)*x
中 国 民 航 大 学 电 子 信 息 工 程 学 院符号对象的操作和转换
因式分解与展开
factor(s)
功能:把多项式 S分解为多个因式,各多项式的系数均为有理数 。
例:将表达式 (x^9-1)分解为多个因式。
syms x
factor(x^9-1)
ans =
(x-1)*(x^2+x+1)*(x^6+x^3+1)
中 国 民 航 大 学 电 子 信 息 工 程 学 院符号对象的操作和转换
expand(s):对符号表达式 s进行展开 。
例,syms x; expand((x+1)^3)
collect(s):对符号表达式 s合并同类项。
collect(s,v):对符号表达式 s按变量 v合并同类项。
syms x;
e=-1/4*x*exp(-2*x)+3/16*exp(-2*x)+x^2-x+3;
d1=collect(e,exp(-2*x))
d2=collect(e,x)
d3=collect(e)
中 国 民 航 大 学 电 子 信 息 工 程 学 院符号对象的操作和转换
符号表达式的提取分子和分母运算如果符号表达式是一个有理分式或可以展开为有理分式,
可利用 numden函数来提取符号表达式中的分子或分母。
其一般调用格式为:
[n,d]=numden(s)
该函数提取符号表达式 s的分子和分母,分别将它们存放在 n与 d中。
syms x y
[n,d] = numden(x/y + y/x)
中 国 民 航 大 学 电 子 信 息 工 程 学 院符号对象的操作和转换
置换操作
子表达式置换操作
[RS,ssub]=subexpr(S,ssub)
运用符号变量 ssub置换子表达式,重写 S为 RS
通用置换指令
RES=subs(ES,old,new)
用 new置换 ES中的 old产生 RES
RES=subs(ES,new)
用 new置换 ES中的自由变量中 国 民 航 大 学 电 子 信 息 工 程 学 院符号对象的操作和转换例 syms a b c d w;
[V,D]=eig([a,b;c,d]);
[RVD,w]=subexpr([V;D],w)
例 subs指令示例
%产生符号函数
syms a x;f=a*sin(x)+5;
%符号变量置换
f1=subs(f,'sin(x)',sym('y'))
%符号常数置换
f2=subs(f,{a,x},{2,sym(pi/3)})
%双精度数值置换
f3=subs(f,{a,x},{2,pi/3})
%数值数组置换
f4=subs(subs(f,a,2),x,0:pi/6:pi)
%数值数组置换
f5=subs(f,{a,x},{0:6,0:pi/6:pi})
中 国 民 航 大 学 电 子 信 息 工 程 学 院符号对象的操作和转换
符号对象和数值对象之间的转换
A=1./[1 2;3 4];
As1=sym(A);
digits(7);
As2=sym(A,'d')
Aa=double(As1)
C=A+As1
whos As1 Aa C
符号对象和字符串之间的转换
a=‘x+y’; fs=sym(a),s=char(fs),whos a fs s
符号对象和多项式之间的转换
f=poly2sym([1 3 2]),p=sym2poly(f),whos f p
中 国 民 航 大 学 电 子 信 息 工 程 学 院符号对象的操作和转换
符号数值精度控制指令
double(x) %把符号常数转化为 16位相对精度的浮点数值对象
digits(n) %设置数值计算以 n位相对精度进行
Xs=vpa(x)%在 digits指定精度下,给出 x的数值型符号结果
Xs=vpa(x,n)%在 n位相对精度下,给出 x的数值型符号结果注,x可以是数值对象,也可以是符号对象,但指令运行后所得的结果一定是符号对象例:
f=sym('exp(pi*sqrt(163))')
f1=double(f),f2=vpa(f,20)
f3=vpa(f,30),whos f f1 f2 f3
中 国 民 航 大 学 电 子 信 息 工 程 学 院符号微积分
符号序列求和
symsum(f,v,a,b)
指令描述,求通式 f在指定变量 v 取遍 [a,b]中所有整数时的和 即说明,f是矩阵时,求和对元素逐个进行,但自变量定义在整个矩阵上
v缺省时,f中的自变量由 findsym自动辨认
b可取有限值,也可取无穷大
a,b可同时缺省,默认为 [0,v-1]
b
va
fv
中 国 民 航 大 学 电 子 信 息 工 程 学 院符号微积分例求级数 1/12+1/22+1/32+1/42+ …… 的和
syms k
symsum(1/k^2,1,Inf) %k值为 1到无穷大
ans =
1/6*pi^2
其结果为,1/12+1/22+1/32+1/42+ ……=π 2/6
中 国 民 航 大 学 电 子 信 息 工 程 学 院符号微积分
微分函数
diff函数用于对符号表达式 s求微分。该函数的一般引用格式为:
diff(s,’v’,n)
中 国 民 航 大 学 电 子 信 息 工 程 学 院符号微积分
diff( s) 没有指定微分变量和微分阶数,则系统按
findsym函数指示的默认变量对符号表达式 s求一阶微分 。
diff( s,‘ v’) 或 diff( s,sym( ‘ v’)) 格式,表示以 v为自变量,对符号表达式 s求一阶微分 。
diff( s,n) 格式,表示对符号表达式 s求 n阶微分,n
为正整数 。
diff( s,‘ v’,n) diff( s,n,‘ v’) 格式,表示以 v
为自变量,对符号表达式 s求 n阶微分 。
中 国 民 航 大 学 电 子 信 息 工 程 学 院符号微积分例 求
syms a t x;
f=[a,t^3;t*cos(x),log(x)]
Df=diff(f);
Dfdt2=diff(f,t,2);
Dfdxdt=diff(diff(f,x),t)
3 3 3
2,,c o s l n c o s l n c o s l n
a t a t a td d d
d x d t d x d tt x x t x x t x x



中 国 民 航 大 学 电 子 信 息 工 程 学 院符号微积分
积分函数积分函数 int( s,v,a,b)可以对被积函数或符号表达式 s求积分。其引用格式为:
int( s,v,a,b)
说明:
应用 int( s)格式,表示没有指定积分变量和积分阶数时,系统按 findsym函数指示的默认变量对被积函数或符号表达式 s求一阶积分。
应用 int( s,v)格式,表示以 v为自变量,对被积函数或符号表达式 s求一阶不定积分。
应用积分函数时,如果给定 a,b两项,表示是进行定积分运算。 a,b分别表示定积分的下限和上限。不指定积分的下限和上限表示求不定积分。
中 国 民 航 大 学 电 子 信 息 工 程 学 院符号微积分例 求下述积分。
求积分:
syms x
int(1/(1+x^2))
ans =
atan(x)
dxx 21 1
中 国 民 航 大 学 电 子 信 息 工 程 学 院符号代数方程求解解方程函数的格式为:
S=solve(‘eq1’,’eq2’,...,’eqN’,’var1’,’var2’,…’varN’)
S=solve(exp1,exp2,...,expN,var1,var2,...varN)
功能求解代数方程组 expr1,expr2,...,exprN的根,未知数为
var1,var2,...varN。
说明:
‘ eq1’,?’ eqN’,字符串表达的方程或字符串表达式
Exp1,..,expN,符号表达式
若 eq1等为表达式,则对 eq1=0等求解
S是构架数组 S.var1,S,var2
中 国 民 航 大 学 电 子 信 息 工 程 学 院符号方程求解例求方程组 关于 y,z的解
S=solve('u*y^2+v*z+w=0','y+z+w=0','y','z');
disp('S.y'),disp(S.y),
disp('S.z'),disp(S.z),
说明其它正确解法
S=solve('u*y^2+v*z+w=0','y+z+w=0','z','y')
S=solve('u*y^2+v*z+w','y+z+w','y,z')
syms y z u v w,S=solve(u*y^2+v*z+w,y+z+w,y,z)
[y,z]=solve('u*y^2+v*z+w=0','y+z+w=0','y','z')
2 0
0
u y v z w
y z w


中 国 民 航 大 学 电 子 信 息 工 程 学 院符号方程求解非正确解
[y,z]=solve(‘ u*y^2+v*z+w=0’,’ y+z+w=0’ )
给出关于 w,y的解 w,y 是 findsym默认的变量
S=solve(‘ u*y^2+v*z+w=0’,’ y+z+w=0’ )
给出关于 w,y的解 w,y 是 findsym默认的变量
syms y z u v w,S=solve(u*y^2+v*z+w=0,y+z+w=0,y,z)
包含符号方程,无法运行
[z,y]=solve(‘ u*y^2+v*z+w=0’,’ y+z+w=0’,’ y,z’ )
按上指令求解时,按字母排列解的次序输出,y,z 分别赋予 z,y,错误对于欠定方程组求解 。 把次序放在前面的变量认作自由变量中 国 民 航 大 学 电 子 信 息 工 程 学 院符号微分方程求解符号微分方程求解指令
S=dsolve(‘a_1’,’a_2’,… ’a_n’)
说明:
输入变量包括:微分方程,初始条件,指定独立变量
输入变量以字符形式编写
若指定独立变量,则由 ’ a_n’ 定义,不指定,默认为 t
微分方程书写规则 Dny表示 y的 n阶导数
初始条件:初始或边界条件写成 y(a)=b,Dy(c)=d。 当初始条件少于微分方程数时,在所得解中将出现任意常数 C1,C2
可以求通解和齐解中 国 民 航 大 学 电 子 信 息 工 程 学 院符号微分方程求解例 求方程 y=xy’-(y’)^2的通解和特解
y=dsolve('y=x*Dy-(Dy)^2','x')
clf;
hold on;
ezplot(y(2),[-6,6,-4,8],1)
cc=get(gca,'Children');
set(cc,'Color','r','Linewidth',5)
for k=-2:0.5:2;
ezplot(subs(y(1),'C1',k),[-6,6,-4,8],1);
end
hold off
中 国 民 航 大 学 电 子 信 息 工 程 学 院符号微分方程求解求一阶微分方程 y’=1+y^2的通解和 y(0)=1时的特解
ag=dsolve('Dy=1+y^2'),
as=dsolve('Dy=1+y^2','y(0)=1')