第六部分 符号计算
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,分别表示正数、实数和负实数。
例.做符号计算:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SM2IDN5gDZlFWZlFDO2UGNzYzX2IzN0YTM4EzLcBTMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
式中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表达式 |
| ‘1/(3*x^n)’ |
| y=’1/sqrt(6*x)’ |
| ‘cos(x^3)-sin(3*x)’ |
| 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为通分后的分母
例:求符号表达式
的分子和分母
>> 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) %符号表达式除运算
例.给定符号表达式
和
,请给出两个符号表达式进行加,减,乘,除运算的结果
>> 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)
例.给定表达式
和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,
和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的右极限 |
例.求
的左右极限
>> 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求一阶微分 |
例.使用符号运算计算
>> 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 |
例.分别计算表达式
和
对α的积分
>> 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)
例.求解
>> 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 | 矩阵的列空间 |