符号运算.docx
- 文档编号:30453737
- 上传时间:2023-08-15
- 格式:DOCX
- 页数:26
- 大小:109.55KB
符号运算.docx
《符号运算.docx》由会员分享,可在线阅读,更多相关《符号运算.docx(26页珍藏版)》请在冰豆网上搜索。
符号运算
与Wolfram公司(Mathematics的开发公司)相比,Mathworks公司一直以矩阵计算和强大的数据处理能力见长,而符号计算非强项。
1993年,mathworks公司从加拿大WaterlooMaple公司购买了maple的内核技术,作为MATLAB符号运算与推导的平台,开发了用以进行符号计算的基本符号运算工具箱和扩展符号运算工具箱,从而解决了MATLAB在符号计算方面的缺陷。
MATLAB7.0的符号运算工具箱已上升到3.1.1版本,它几乎可以完成所有的符号运算功能,包括符号函数与符号方程的定义、运算、复合、化简、符号矩阵的计算、符号微分、符号积分、符号代数方程、符号微分方程的求解、符号积分变换和符号特殊函数。
在MATLAB7.0的符号数学工具箱中,符号表达式含有符号函数和符号方程两种形式,它是表示数字、函数或变量的字符串或字符串组。
字符就是符号变量的值。
因此在MATLAB的源程序中符号表达式被表示成字符串和字符串组。
符号函数和符号方程的区别是符号函数没有等号,而符号方程必须有等号。
符号变量的定义
MATLAB有默认的符号自变量,但在各种情况下默认的自变量是不同的。
系统默认的自变量主要有x、x1、y、y1、z、v、u、t、theta、alpha。
对于这些变量MATLAB的默认规则与平时数学习惯大致相同,即:
当这些变量中的某一个与其他变量组成符号数学表达式时,这个变量即为默认的自变量;
当这些变量中的某几个组成符号数学表达式是,默认自变量的顺序是:
x>x1>y>y1>z>v>u>t>theta>alpha
例如:
当数学表达式为cos(2*x*a^2)时,默认的自变量为x;
当数学表达式为cos(2*x*v)时,默认的自变量为x;
当数学表达式为cos(2*t*alpha)时,默认的自变量为t;
符号变量可以通过命令syms和sym定义,syms命令一个可以定义一个或多个符号变量。
sym一个只能定义一个符号变量。
>>symsxyzt
>>who
Yourvariablesare:
txyz
>>symsu
>>who
Yourvariablesare:
tuxyz
>>x=sym('x');
>>t=sym('t');
>>z=sym('z');
>>y=sym('y');
>>who
Yourvariablesare:
anstxyz
符号表达式的定义
MATLAB7.0当中,符号表达式可以通过基本赋值语句,采用单引号或sym/syms命令定义。
定义好的符号函数可以通过symvar检查其自变量。
实例:
>>f='a*x^2+b*x+c=0'
f=
a*x^2+b*x+c=0
>>f='a*D2y+b*Dy+3*y=0'
f=
a*D2y+b*Dy+3*y=0
>>f='asin(x)'
f=
asin(x)
>>sym('x*log(x)-sin(x)')
ans=
x*log(x)-sin(x)
>>symvar('x*log(x)-sin(x)')
ans=
'x'
>>f=sym('a*x^2+b*x+c=0')
f=
a*x^2+b*x+c=0
>>A=sym('[a,b,c,d;f,g,h,k]')
A=[a,b,c,d]
[f,g,h,k]
符号表达式的基本运算
符号表达式的基本运算有合并同类项、表达式展开、因式分解、提取符号表达式的分子和分母、符号表达式的化简、确定符号矩阵的维数等等。
1、collect(S)按默认变量的次数对符号多项式S合并同类项。
2、collect(S,v)按指定变量的次数对符号多项式S合并同类项。
3、expand(S)将S展开
4、factor(x)将符号表达式因式分解。
当x是正整数时,分解为质数分解式;当x为符号表达式,分解为乘积形式;当x为符号整数或符号表达式阵列,则分解每一个元素为质数分解式或乘积形式
5、[N,D]=numden(A)求符号表达式的分子A和分母D
6、simple(S)求各种不同算法下符号表达式的化简形式
7、[r,how]=simple(S)求S的最短形式和化简方法
8、simplify(S)对S进行化简,若S为矩阵则化简其每一个元素
9、size(A)求符号函数A的维数
10、[m,n]=size(A)求符号函数A的行数和列数
11、size(A,n)n=1时求A的行数;n=2时求A的列数
>>symsxyab
>>f=(x+a)*(x+b)+(x-a)^2
f=
(x+a)*(x+b)+(x-a)^2
>>f1=collect(f)
f1=
2*x^2+(-a+b)*x+a*b+a^2
>>f=(x+y)^3-(x+y)^2+y^4;
>>f2=collect(f,y)
f2=
y^4+y^3+(3*x-1)*y^2+(3*x^2-2*x)*y+x^3-x^2
>>f=(x-2)^2*(x-1)-(x+1)^2
>>expand(f)
ans=
x^3-6*x^2+6*x-5
>>A=[sin(2*x),cos(2*x);(a+b)^2,(a-b)^2];
>>expand(A)
ans=
[2*sin(x)*cos(x),2*cos(x)^2-1]
[a^2+2*a*b+b^2,a^2-2*a*b+b^2]
>>A1=factor(sym('243'))
A1=
(3)^5
>>A2=factor(243)
A2=
33333
>>A3=factor([a*x-a*b,x^2-b*x;(x-b)^2,x^2-b^2])
A3=
[a*(x-b),x*(x-b)]
[(x-b)^2,(x-b)*(x+b)]
>>f=(x-2)/(x*(x-1));
>>[n1,d1]=numden(f)
n1=
x-2
d1=
x*(x-1)
>>A=[1/x,2/y,1/a^2;1/y,2/b,3/x;2/a,3/x,1/y^2];
>>[n2,d2]=numden(A)
n2=[1,2,1]
[1,2,3]
[2,3,1]
d2=[x,y,a^2]
[y,b,x]
[a,x,y^2]
>>f=(x^2-1)/(x^2+2*x-3);
>>[r,how]=simple(f)
r=
(x+1)/(x+3)
how=
simplify
>>A=[a,b,c;x,y,z];
>>d=size(A)
d=
23
>>[m,n]=size(A)
m=
2
n=
3
>>d=size(A,1)
d=
2
>>d=size(A,2)
d=
3
符号表达式的转化
12、pretty(S)求符号表达式或符号矩阵S的常规形式,默认线宽度为79
13、pretty(S,n)按设定现宽度n求常规形式
14、horner(S)求嵌套形式
15、latex(S)求LaTex形式
16、findsym(S)求S中的符号变量、
17、findsym(S,n)求最靠近x的n个符号变量
18、subs(S,a)用a替换S中默认的变量
19、subs(S,new,old)用new替换S中的old
>>f=taylor(cos(x))
f=
1-1/2*x^2+1/24*x^4
>>pretty(f)
24
1-1/2x+1/24x
>>horner(f)
ans=
1+(-1/2+1/24*x^2)*x^2
>>f=(x-a+y)/(y+b-x);
>>findsym(f)
ans=
a,b,x,y
>>findsym(f,2)
ans=
x,y
>>f1=subs(f,z)
f1=
(z-a+y)/(y+b-z)
>>f2=subs(f1,z,2)
f2=
(2-a+y)/(y+b-2)
复合函数的计算(主要指复数、复合函数、反函数计算)
20、B=conj(A)求复数A的共轭复数
21、R=real(Z)求复数Z的实部
22、I=imag(Z)求复数Z的虚部
23、compose(f,g)求f=f(x),g=g(x)的复合函数f[g(x)]
24、compose(f,g,z)求f=f(x),g=g(x),x=z的复合函数f[g(z)]
25、compose(f,g,x,z)求f=f(x),g=g(y),y=z的复合函数f[g(z)]
26、g=finverse(f)求函数f的反函数g
27、g=finverse(f,v)求函数f对指定自变量v的反函数g
>>syms('a','real');
>>syms('b','real');
>>z=3*a-2*b-(6+b)*i;
>>real(z)
ans=
3*a-2*b
>>imag(z)
ans=
-6-b
>>conj(z)
ans=
3*a-2*b+i*(6+b)
>>symsxyzut
>>f=u^3;g=sin(2*x+1);
>>compose(f,g)
ans=
sin(2*x+1)^3
>>compose(f,g,t)(求f,g的复合函数,再将自变量x换成t)
ans=
sin(2*t+1)^3
求
,
的反函数
>>finverse(exp(2*x)-2)
ans=
1/2*log(2+x)
>>finverse((1-x)/(2+x))
ans=
-(-1+2*x)/(1+x)
特征多项式运算
1、p=poly(A)求数值矩阵或符号矩阵A特征多项式系数向量p
2、p=poly(A,v)求数值矩阵或符号矩阵A(指定变量v)特征多项式系数向量p
3、r=poly2sym(p)将数值系数向量p转化为符号变量多项式r
4、r=poly2sym(p,v)将数值系数向量p(按指定变量v)转化为符号变量多项式r
>>A=[123;231;312];
>>p=poly(A)
p=
1.0000-6.0000-3.000018.0000
>>q=poly(sym(A))
q=
-6*x^2-3*x+18+x^3
>>r=poly2sym(p)
r=
-6*x^2-3*x+18+x^3
>>symst
>>t=poly2sym(p,t)
t=
t^3-6*t^2-3*t+18
符号函数的极限运算
28、limit(F,x,a)计算当x→a时求F的极限值
29、limit(F)计算默认变量v→0时F的极限值
30、limit(F,a)计算默认变量v→a时求F的极限值
31、limit(F,x,a,’right’)计算当x→a时求F的右极限值
32、limit(F,x,a,’left’)计算当x→a时求F的左极限值
>>symsxyt
>>f=1/x;
>>limit(f,a)
ans=
1/a
>>limit(f,inf)
ans=
0
>>limit(f,0)
ans=
NaN
>>g=atan(x);
>>limit(g,x,inf)
ans=
1/2*pi
>>limit(g,x,-inf)
ans=
-1/2*pi
>>f=tan(x)
f=
tan(x)
>>limit(f,x,pi/2,'right')
ans=
-Inf
>>limit(f,x,pi/2,'left')
ans=
Inf
例:
按系统默认自变量求函数
的自变量趋近于0和3时的极限值
>>f=(x^2-t^2)/(x-y);
>>limit(f)
ans=
t^2/y
>>limit(f,3)
ans=
(-9+t^2)/(-3+y)
例3、求符号矩阵
当x→0时的左极限
>>A=[exp(x)exp(-x)(exp(x)-exp(-x))/2;sin(x)cos(x)sin(2*x);log(1+x)log(2+x)log(3+x)];
>>limit(A,x,0,'left')
ans=
[1,1,0]
[0,1,0]
[0,log
(2),log(3)]
1、符合函数求导
2、diff(S,’v’)/diff(S,sym(’v’))计算S对指定符号变量v的一阶导数
3、diff(S)计算S对默认变量的一阶导数
4、diff(S,n)计算S对默认变量的n阶导数
5、diff(S,’v’,n)/diff(S,sym(’v’),n)计算S对指定符号变量v的n阶导数
例:
求
的一阶导数
>>f=exp(x)*(sqrt(x)+2^x)
f=
exp(x)*(x^(1/2)+2^x)
>>diff(f)
ans=
exp(x)*(x^(1/2)+2^x)+exp(x)*(1/2/x^(1/2)+2^x*log
(2))
>>diff(f,3)
ans=
exp(x)*(x^(1/2)+2^x)+3*exp(x)*(1/2/x^(1/2)+2^x*log
(2))+3*exp(x)*(-1/4/x^(3/2)+2^x*log
(2)^2)+exp(x)*(3/8/x^(5/2)+2^x*log
(2)^3)
例:
求隐函数
的一阶导数
>>S=x^2+y^2-3*x*y;
>>-diff(S,'x')/diff(S,'y')
ans=
(-2*x+3*y)/(2*y-3*x)
例:
求二元函数
的两个一阶导数和三个二阶导数
>>S=2*x*y/(x^2+y^2);
>>dfx=diff(S,'x')
dfx=
2*y/(x^2+y^2)-4*x^2*y/(x^2+y^2)^2
>>dfy=diff(S,'y')
dfy=
2*x/(x^2+y^2)-4*x*y^2/(x^2+y^2)^2
>>d2fx=diff(S,'x',2)
d2fx=
-12*y/(x^2+y^2)^2*x+16*x^3*y/(x^2+y^2)^3
>>d2fxy=diff(dfx,'y')
d2fxy=
2/(x^2+y^2)-4*y^2/(x^2+y^2)^2-4*x^2/(x^2+y^2)^2+16*x^2*y^2/(x^2+y^2)^3
>>d2fy=diff(dfy,'y')
d2fy=
-12*y/(x^2+y^2)^2*x+16*x*y^3/(x^2+y^2)^3
符号函数的积分
1、int(S)对S中默认变量求S的不定积分
2、int(S,v)对S中指定变量v求S的不定积分
3、int(S,a,b)对S中默认变量在区间[a,b]上求S的不定积分
4、int(S,v,a,b)对S中指定变量v在区间[a,b]上求S的不定积分
例:
计算
、
>>S=(2*x-7)/(4*x^2+12*x+25);
>>int(S)
ans=
1/4*log(4*x^2+12*x+25)-5/4*atan(1/2*x+3/4)
>>S=exp(2*x)*cos(3*x);
>>int(S)
ans=
2/13*exp(2*x)*cos(3*x)+3/13*exp(2*x)*sin(3*x)
例;求
、
、
>>symsxyzab
>>S=x^2/(sqrt(1-x^2));
>>int(S,0,1/2)
ans=
-1/8*3^(1/2)+1/12*pi
>>S=x*sin(x)^2 ;
>>int(S,0,pi/2)
ans=
1/4+1/16*pi^2
>>S=1/(1+4*x^2);
>>int(S,-inf,inf)
ans=
1/2*pi
例:
求二重积分
,其中D是由直线
及
围成的区域
先求解
可知
,
,由微积分的知识,我们知道二重积分是两个定积分的累次积分
>>S=sin(x)/x;
>>int(S,y,x/2,x)
ans=
1/2*sin(x)
>>s1=int(S,y,x/2,x)
s1=
1/2*sin(x)
>>int(s1,0,2)
ans=
1/2-1/2*cos
(2)
2)求
,其中
我们知道当被积函数为圆域时,我们一般用极坐标法,因此原式
>>symsrsita
>>S=2*r*log(r);
>>s2=int(S,r,1,4)
s2=
-15/2+32*log
(2)
>>int(s2,sita,0,2*pi)
ans=
-15*pi+64*pi*log
(2)
例:
求曲线积分
,其中L为曲线
依参数增大方向。
根据已知条件曲线积分化为
>>symst
>>S=-24*sin(t)^2*cos(t)+12*cos(t)^3;
>>int(S,0,pi/4)
ans=
3*2^(1/2)
级数求和和函数的展开
MATLAB通过调用函数symsum对级数求和,通过调用taylor将一个函数展开成为级数。
1、symsum(s)对符号表达式s中的默认符号变量k从0到k-1求和
例:
求
的前n项和
>>symsnk
>>r1=symsum(1/2^n,n)
r1=
-2*(1/2)^n
2、symsum(s,v)对符号表达式s中的指定符号变量v从0到k-1求和
3、symsum(s,v.a,b)对s中指定变量v从a到b求和
例:
求
的级数和
>>r2=symsum(1/n^2,n,1,inf)
r2=
1/6*pi^2
求级数
和
的和函数
>>r3=symsum((-1)^(n-1)*x^n/n,n,1,inf)
r3=
log(1+x)
>>r4=symsum(-x^n/(2^n*(n+1)),n,0,inf)
r4=
2/x*log(1-1/2*x)
4、symsum(s,a,b)对s中默认变量k从a到b求和
5、taylor(f)将f展开成默认符号变量x的n-1阶麦克劳林展开式,并给出前六项
>>f=exp(x)
f=
exp(x)
>>taylor(f)
ans=
1+x+1/2*x^2+1/6*x^3+1/24*x^4+1/120*x^5
f=
cos(x)
>>taylor(f)
ans=
1-1/2*x^2+1/24*x^4
6、taylor(f,m,v)将多元函数f展开成符号变量v的m-1阶麦克劳林展开式,并给出前6项
7、taylor(f,m,v,a)将多元函数f在v=a处展开成符号变量v的m-1阶麦克劳林展开式,并给出前m项
>>f=exp(x)
>>taylor(f,7,x,1)
ans=exp
(1)+exp
(1)*(x-1)+1/2*exp
(1)*(x-1)^2+1/6*exp
(1)*(x-1)^3+1/24*exp
(1)*(x-1)^4+1/120*exp
(1)*(x-1)^5+1/720*exp
(1)*(x-1)^6
8、taylor(f,m)将多元函数f展开成默认变量x的m-1阶麦克劳林展开式,并给出前m项(m为正整数)
9、*taylor(f,a)将多元函数f在x=a处展开成默认变量x的n-1阶泰勒展开式,并给出前6项。
a为实数
10、taylor(f,m,a)将多元函数f在x=a处展开成默认变量x的m-1阶泰勒展开式,并给出前m项
例:
将
展开成x-2的幂级数
MATLAB7.0有泰勒级数运算器,调用格式有两种:
(1)>>taylortool
直接打开运算器,显示默认函数f=xcosx在
的麦克劳林级数的图形,并在级数显示框显示该级数的前7项
(2)>>taylortool(‘f’)打开运算器显示函数f在相应区间上的级数的图形,并在级数显示框显示该级数的前7项。
符号函数求解
MATLAB7.0的符号计算可以求解线性方程组、代数方程的符号解、非线性符号方程、常微分方程、求解这些方程是通过solve函数
1、代数方程的符号解
MATLAB7.0中求代数方程的符号解是通过solve函数实现。
用solve函数求解一个代数方程是的调用格式一般是:
solve(‘代数方程’,’未知变量’)或x=solve(‘代数方程’,’未知变量’)
当求解由n个代数方程组是调用格式
[未知变量组]=solve(‘代数方程组’,‘未知变量组’)
注意:
未知变量组中各变量之间,代数方程组的各方程之间用逗号隔开,如各未知变量是由系统默认,则未知变量组的输入可以省略。
例:
求解高次方程
的解
>>solve('x^4-3*a*x^2+4*b=0')
ans=
1/2*(6*a+2*(9*a^2-16*b)^(1/2))^(1/2)
-1/2*(6*a+2*(9*a^2-16*b)^(1/2))^(1/2)
1/2*(6*a-2*(9*a^2-16*b)^(1/2))^(1/2)
-1/2*(6*a-2*(9*a^2-16*b)^(1/2))^(1/2)
例:
求解方程
对y的解
>>solve('x^3+2*a*x*y-3*b*y^2','y')
ans=
1/3*(a+(a^2+3*b*x)^(1/2))/b*x
1/3*(a-(a^2+3*b*x)^(1/2))/b*x
例:
求解多元高次方程组
>>[x,y]=solve('x^3+2*x*y-3*y^2-2','x^3-3*x*y+y^2+5')
x=
1.8061893129091900210106914427639+1.1685995398225344682988775209345*i
.51233671712308192620449202726936+1.0694475803263816285960240820218*i
-1.2247760300322719472151834700333+.35066213508454219362158900429401*i
-1.2247760300322719472151834700333-.35066213508454219362158900429401*i
.51233671712308192620449202726936-1.0694475803263816285960240820218*i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 符号 运算