第七讲 MATLAB的符号计算
所谓符号计算是指在运算时,无须事先对
变量赋值,而将所得到结果以标准的符号形
式来表示。
MathWorks公司以 Maple的内核作为符号
计算引擎( Engine),依赖 Maple已有的函
数库,开发了实现符号计算的两个工具箱:
基本符号工具箱和扩展符号工具箱。
一、符号计算基础
一、符号计算基础
(一) 定义符号变量
参与符号运算的对象可以是符号变量,
符号表达式或符号矩阵 。 符号变量要先定
义, 后引用 。 可以用 sym函数, syms函数
将运算量定义为符号型数据 。 引用符号运
算函数时, 用户可以指定函数执行过程中
的变量参数;若用户没有指定变量参数,
则使用 findsym函数默认的变量作为函数的
变量参数 。
1,sym函数
sym函数的主要功能是创建符号变量, 以便进行符号
运算, 也可以用于创建符号表达式或符号矩阵 。 用 sym函
数创建符号变量的一般格式为:
x = sym(‘x’)
其目的是将 ’ x’创建为符号变量, 以 x作为输出变量名 。
每次调用该函数,可以定义一个符号变量 。
一、符号计算基础
(一) 定义符号变量
【 例 1】 作符号计算:
a,b,x,y均为符号运算量。在符号运算前,
应先将 a,b,x,y定义为符号运算量
? 15?? ?? byax byax
一、符号计算基础
(一) 定义符号变量
a=sym(‘a’); %定义 ‘ a’为符号运算量, 输出变量名为 a
y =2/bb=sym(‘b’);
x=sym(‘x’);
y=sym(‘y”);
[x,y]=solve(a*x-b*y-1,a*x+b*y-5,x,y)
%以 a,b为符号常数,x,y为符号变量
即可得到方程组的解:
x =3/a
y =2/b
一、符号计算基础
(一) 定义符号变量
【 例 2】 已知一复数表达式 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’创建为纯格式的符号变量 。
一、符号计算基础
(一) 定义符号变量
2,syms函数
syms函数的功能与 sym函数类似 。 syms
函数可以在一个语句中同时定义多个符号
变量, 其一般格式为:
syms arg1 arg2 … argN
用于将 rg1,arg2,…,argN等符号创建为符
号型数据 。
一、符号计算基础
(一) 定义符号变量
(二)默认符号变量
在数学表达式中, 一般习惯于使用排在
字母表中前面的字母作为变量的系数, 而
用排在后面的字母表示变量 。 例如:
f=ax2+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
一、符号计算基础
(二)默认符号变量
为了了解函数引用过程中使用的符号变量个数及变量
名, 可以用 findsym函数查询默认的变量 。 该函数的引用
格式为:
findsym( f,n)
说明,f为用户定义的符号函数,
n为正整数, 表示查询变量的个数 。
n=i,表示查询 i个系统默认变量 。 n值省略时表示查询
符号函数中全部系统默认变量 。
一、符号计算基础
(二)默认符号变量
【 例 3 】 查询符号函数
f=xn
g=sin(at+b)
中的系统默认变量 。
syms a b n t x %定义符号变量
f=x^n; %给定符号函数
g=sin(a*t+b);
findsym(f,1) %在 f函数中查询 1个系统默认变量
ans= x
表示 f函数中查询的 1个系统默认变量为 x。
一、符号计算基础
(二)默认符号变量
(三) 符号表达式
符号表达式由符号变量, 函数, 算术运算符等组成 。
符号表达式的书写格式与数值表达式相同 。 例如,数学表
达式
其符号表达式为,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后, 即可用于微积分等
符号计算 。
一、符号计算基础
(四) 生成符号函数
【 例 4】 定义一个符号函数 fxy=(a*x2+b*y2)/c2, 分别求该
函数对 x,y的导数和对 x的积分 。
syms a b c x y %定义符号变量
fxy=(a*x^2+b*y^2)/c^2; %生成符号函数
diff(fxy,x) %符号函数 fxy对 x求导数
ans =2*a*x/c^2
diff(fxy,y) %符号函数 fxy对 y求导数
ans =2*b*y/c^2 %符号函数 fxy对 x求积分
int(fxy,x)
ans =1/c^2*(1/3*a*x^3+b*y^2*x)
一、符号计算基础
(四) 生成符号函数
二、微积分
(一) 微积分函数
1.求极限
函数 limit用于求符号函数 f的极限。系统
可以根据用户要求,计算变量从不同方向
趋近于指定值的极限值。该函数的格式及
功能:
二、微积分
limit(f,x,a),求符号函数 f( x)的极限值。即计算当变量 x趋近
于常数 a时,f( x)函数的极限值。
limit(f,a),求符号函数 f( x)的极限值。由于没有指定符号函
数 f( x)的自变量,则使用该格式时,符号函数 f( x)的变量为函数
findsym(f)确定的默认自变量,既变量 x趋近于 a。
limit(f),求符号函数 f( x)的极限值。符号函数 f( x)的变量为
函数 findsym(f)确定的默认变量;没有指定变量的目标值时,系统默认变量
趋近于 0,即 a=0的情况。
limit(f,x,a,'right'),求符号函数 f的极限值。 'right'表示变量 x
从右边趋近于 a。
limit(f,x,a,'left'),求符号函数 f的极限值。 'left'表示变量 x从
左边趋近于 a。
二、微积分
【 例 5】 求极限
syms x; %定义符号变量
f=(x*(exp(sin(x))+1)-2*(exp(tan(x))-1))/sin(x)^3; %确定符号表达式
w=limit(f) %求函数的极限
w = -1/2
x
eex t g xx
x 3
s i n
0 s i n
)1(2)1(lim ???
?
二、微积分
2,微分函数
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阶微分 。
【 例 6】 求导数:
x = sym('x'); %定义符号变量
t = sym('t');
diff(sin(x^2)) %求导运算
ans =
2*cos(x^2)*x
dx
xd 2s in
二、微积分
3.积分函数
积分函数 int( s, v,a,b)可以对被积函
数或符号表达式 s求积分 。 其引用格式为:
int( s, v,a,b)
说明:
应用 int( s) 格式, 表示没有指定积分变量和积分阶数时, 系统按
findsym函数指示的默认变量对被积函数或符号表达式 s求一阶积分 。
应用 int( s,v) 格式, 表示以 v为自变量, 对被积函数或符号表达式
s求一阶不定积分 。
应用积分函数时, 如果给定 a,b两项, 表示是进行定积分运算 。 a、
b分别表示定积分的下限和上限 。 不指定积分的下限和上限表示求不
定积分 。
二、微积分
【 例 7】 求下述积分 。
求积分:
syms x
int(1/(1+x^2))
ans =
atan(x)
? ? dxx 21 1
二、微积分
4,级数 (级数求和 )
级数求和运算是数学中常见的一种运算 。
例如:
f(x)=a0+a1x+a2x2+a3x3+… +anxn
函数 symsum可以用于此类对符号函数 f的求和
运算 。 该函数的引用时, 应确定级数的通项式 s,
变量的变化范围 a和 b。 该函数的引用格式为:
symsum(s,a,b)
二、微积分
【 例 8】 求级数的和, 键入:
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
二、微积分
三、简化方程表达式
1.因式分解
factor函数的功能为:把多项式 S分解为多个因式, 各
多项式的系数均为有理数 。 格式为:
factor(s)
三、简化方程表达式
【 例 9】 将表达式 (x^9-1)分解为多个因式 。
syms x
factor(x^9-1)
ans =
(x-1)*(x^2+x+1)*(x^6+x^3+1)
2.嵌套
将符号多项式 s用嵌套形式表示, 即用多层括号的形式
表示 。 Horner函数可以实现此功能 。 该函数的格式为:
horner(s)
三、简化方程表达式
【 例 10】 将表达式 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
四、解方程
解方程函数的格式为:
solve(expr1,expr2,...,exprN,var1,var2,...varN)
或 solve(expr1,expr2,...,exprN)
其功能为:求解代数方程组 expr1,expr2,...,exprN的根, 未知数为
var1,var2,...varN。
说明:
若不指明符号表达式 expr1,expr2,...,exprN的值, 系统默认为 0。 例
如给出一个表达式 x^2-3*x-8,则系统将按 x^2-3*x-8=0进行运算;
四、解方程
【 例 11】 解代数方程,a*x2-b*x-6=0
syms a b x
solve(a*x^2-b*x-6)
ans =
[ 1/2/a*(b+(b^2+24*a)^(1/2))]
[ 1/2/a*(b-(b^2+24*a)^(1/2))]
即该方程有两个根, x1=1/2/a*(b+(b^2+24*a)^(1/2));
x2=1/2/a*(b-(b^2+24*a)^(1/2))
四、解方程
习题:
1.解方程组:
2.计算:
f(x)=sin(x)
f(x)=1/cos(x)
? 52 12 ?? ?? yx yx
? dxxf )(