MATLAB学习第一章第 2 章 符号计算ch21讲解.docx
- 文档编号:30727819
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:47
- 大小:479.75KB
MATLAB学习第一章第 2 章 符号计算ch21讲解.docx
《MATLAB学习第一章第 2 章 符号计算ch21讲解.docx》由会员分享,可在线阅读,更多相关《MATLAB学习第一章第 2 章 符号计算ch21讲解.docx(47页珍藏版)》请在冰豆网上搜索。
MATLAB学习第一章第2章符号计算ch21讲解
第2章符号计算
所谓符号计算是指:
解算数学表达式、方程不是在离散化的数值点上进行,而是凭借一系列恒等式,数学定理,通过推理和演绎,力求获得解析结果。
这种计算建立在数值完全准确表达和推演严格解析的基础之上,因此所得结果是完全准确的。
本书之所以把符号计算内容放在第2章,是出于以下考虑:
一,相对于MATLAB的数值计算“引擎”和“函数库”而言,符号计算的“引擎”和“函数库”是独立的。
二,在相当一些场合,符号计算解算问题的指令和过程,显得比数值计算更自然、更简明。
三,大多数理工科的本科学生在学过高等数学和其他专业基础课以后,比较习惯符号计算的解题理念和模式。
在编写本章时,作者在充分考虑符号计算独立性的同时,还考虑了章节的自完整性。
为此,本章不但全面地阐述符号计算,而且在最后一节还详细叙述了符号计算结果的可视化。
这样的安排,将使读者在阅读完本章后,就有可能运用MATLAB的符号计算能力去解决相当一些具体问题。
2.1
2.1.1
一
二符号对象和符号表达式符号对象的创建和衍生生成符号对象的基本规则符号数字
【例2.1-1】符号(类)数字与数值(类)数字之间的差异。
a=pi+sqrt(5)sa=sym('pi+sqrt(5)')Ca=class(a)Csa=class(sa)vpa(sa-a)
a=
5.3777
sa=
pi+sqrt(5)
Ca=
double
Csa=
sym
ans=
.138223758410852e-16
补充说明:
VPA()可变精度算法
R=VPA(S)用于计算双精度矩阵S的每个元素的数值,计算的时候使用了计算精度为D的可变精度浮点运算算法,D为当前小数位精度设置,结果R位字符型。
R=VPA(S)numericallyevaluateseachelementofthedoublematrixSusingvariableprecisionfloatingpointarithmeticwithDdecimaldigitaccuracy,whereDisthecurrentsettingofDIGITS.TheresultingRisaSYM.
VPA(S,D)使用指定的计算精度为D的计算,而不是当前设置的精度。
usesDdigits,insteadofthecurrentsettingofDIGITS.1
DisanintegerortheSYMrepresentationofanumber.三
符号参数
四符号变量
2【例2.1-2】用符号计算研究方程uzvzw0的解。
(1)
symsuvwz
Eq=u*z^2+v*z+w;
result_1=solve(Eq)
findsym(Eq,1)
result_1=
-u*z^2-v*z
ans=
w
%定义符号参量和变量%构成符号表达式%采用自动识别的变量进行计算%%给出自动识别变量
(2)
result_2=solve(Eq,z)%用z作为指定变量进行求解
result_2=
1/2/u*(-v+(v^2-4*u*w)^(1/2))
1/2/u*(-v-(v^2-4*u*w)^(1/2))
【例2.1-3】对独立自由符号变量的自动辨认。
(1)
symsabxXY
k=sym('3');
z=sym('c*sqrt(delta)+y*sin(theta)');
EXPR=a*z*X+(b*x^2+k)*Y;
(2)
findsym(EXPR)
ans=
X,Y,a,b,c,delta,m,theta,x,y
说明:
这里没有k和z,因为k是符号数字,z不是独立的符号变量。
(3)
findsym(EXPR,1)
ans=
x
(4)
findsym(EXPR,2),findsym(EXPR,3)
ans=
x,y
ans=
x,y,theta
【例2.1-4】findsym确定自由变量是对整个矩阵进行的。
symsabtuvxy
A=[a+b*x,sin(t)+u;x*exp(-t),log(y)+v]%创建符号矩阵findsym(A,1)
findsym(A)
A=
[a+b*x,sin(t)+u]
[x*exp(-t),log(y)+v]
ans=
x
ans=
a,b,t,u,v,x,y
说明:
矩阵在Matlab中是作为整体看待的,即所有元素中的自由变量都被选出来了。
2.1.2
2.1.3
2.1.4符号计算中的算符符号计算中的函数指令符号对象的识别
【例2.1-5】数据对象及其识别指令的使用。
(1)
clear
a=1;b=2;c=3;d=4;
Mn=[a,b;c,d]
Mc='[a,b;c,d]'
Ms=sym(Mc)
Mn=
12
34
Mc=
[a,b;c,d]
Ms=
[a,b]
[c,d]
(2)
SizeMn=size(Mn)
SizeMc=size(Mc)
SizeMs=size(Ms)
SizeMn=
22
SizeMc=
19
SizeMs=
22
(3)
CMn=class(Mn)
CMc=class(Mc)
CMs=class(Ms)
CMn=
double
CMc=
char
CMs=
sym
(4)
isa(Mn,'double')
isa(Mc,'char')
isa(Ms,'sym')
ans=
1
ans=
1
ans=
1
(5)
whosMnMcMs
NameSizeBytesClass
Mc1x918chararray
Mn2x232doublearray
Ms2x2312symobject
Grandtotalis21elementsusing362bytes
2.2
符号数字及表达式的操作
数值数字与符号数字之间的转换
数值数字向符号数字的转换2.2.1一
a=3*pi;
sa1=sym(a,'r')
sa2=sym(a,'d')
sa3=sym(a,'e')
sa4=sym(a,'f')
whos
sa1=
3*pi
sa2=
9.4247779607693793479938904056326
sa3=
3*pi-594*eps/359
sa4=
'1.2d97c7f3321d2'*2^(3)
NameSizeBytesClass
a1x18doublearraysa11x1132symobjectsa21x1190symobjectsa31x1156symobjectsa41x1170symobjectxqxqxq12341x11logicalarray
Grandtotalis82elementsusing657bytes
二
符号数字向双精度数字转换na1=double(sa1)
na2=double(sa2)
na3=double(sa3)
na4=double(sa4)
whos
na1=
9.4248
na2=
9.4248
na3=
9.4248
na4=
9.4248
NameSizeBytesClass
a1x18doublearrayna11x18doublearrayna21x18doublearrayna31x18doublearrayna41x18doublearraysa11x1132symobjectsa21x1190symobjectsa31x1156symobjectsa41x1170symobjectxqxqxq12341x11logicalarray
Grandtotalis86elementsusing689bytes
2.2.2符号数字的任意精度计算
【例2.2-1】digits,vpa指令的使用。
digits
p0=sym('(1+sqrt(5))/2')%定义符号变量
pr=sym((1+sqrt(5))/2)%对数值数字进行转换
%
pd=sym((1+sqrt(5))/2,'d')
%对数值数字进行转换
e32r=vpa(abs(p0-pr))
e16=vpa(abs(p0-pd),16)
e32d=vpa(abs(p0-pd))
Digits=32
p0=
(1+sqrt(5))/2
pr=
7286977268806824*2^(-52)
pd=
1.6180339887498949025257388711907
e32r=
.543211520368251e-16
e16=
0.
e32d=
.543211520368251e-16
2.2.3符号表达式的基本操作
3【例2.2-2】简化f1
x36x212x8。
symsx
f=(1/x^3+6/x^2+12/x+8)^(1/3);
g1=simple(f)
g2=simple(g1)
g1=
(2*x+1)/x
g2=
2+1/x
2.2.4
一
表达式中的置换操作子表达式置换操作
ab【例2.2-3】对符号矩阵进行特征向量分解。
cdclearall
symsabcdW
[V,D]=eig([ab;cd])
[RVD,W]=subexpr([V;D],W)
V=
[-(1/2*d-1/2*a-1/2*(d^2-2*a*d+a^2+4*b*c)^(1/2))/c,-(1/2*d-1/2*a+1/2*(d^2-2*a*d+a^2+4*b*c)^(1/2))/c]
[1,1]
D=
[1/2*d+1/2*a+1/2*(d^2-2*a*d+a^2+4*b*c)^(1/2),0]
[0,1/2*d+1/2*a-1/2*(d^2-2*a*d+a^2+4*b*c)^(1/2)]RVD=
[-(1/2*d-1/2*a-1/2*W)/c,-(1/2*d-1/2*a+1/2*W)/c]
[1,1]
[1/2*d+1/2*a+1/2*W,0]
[0,1/2*d+1/2*a-1/2*W]
W=
(d^2-2*a*d+a^2+4*b*c)^(1/2)
二通用置换指令
【例2.2-4】用简单算例演示subs的置换规则。
(1)产生符号函数
symsax;f=a*sin(x)+5
f=
a*sin(x)+5
(2)符号表达式置换
f1=subs(f,'sin(x)',sym('y'))
class(f1)
f1=
a*y+5
ans=
sym
%<2>
(3)符号常数置换(双精度数字,符号数字)
f2=subs(f,{a,x},{2,sym('pi/3')})
class(f2)
f2=
3^(1/2)+5
ans=
sym
%<3>
subs(f,{a,sin(x)},{2,sym('y')})
ans=
2*sin(x)+5
说明:
表达式不能和符号变量同时包含在old中被替换。
(4)符号常数置换(双精度数字)
f3=subs(f,{a,x},{2,pi/3})%<4>class(f3)
f3=
6.7321
ans=
double
(5)数组数字置换
f4=subs(subs(f,a,2),x,0:
pi/6:
pi)
class(f4)
f4=
5.00006.00006.73217.00006.73216.00005.0000ans=
double
(6)数组数字置换
f5=subs(f,{a,x},{0:
6,0:
pi/6:
pi})
class(f5)
f5=
5.00005.50006.73218.00008.46417.50005.0000ans=
double
2.3符号微积分
2.3.1极限和导数的符号计算
kx
【例2.3-1】试求lim1
x1x。
symsxk
Lim_f=limit((1-1/x)^(k*x),x,inf)
Lim_f=
exp(-k)
7%<5>%<6>
【例2.3-2】求fat3dfd2fd2f
tcosxlnx求
dx,dt2,dtdx。
symsatx;f=[a,t^3;t*cos(x),log(x)];
df=diff(f)
dfdt2=diff(f,t,2)
dfdxdt=diff(diff(f,x),t)
df=
[0,0]
[-t*sin(x),1/x]
dfdt2=
[0,6*t]
[0,0]
dfdxdt=
[0,0]
[-sin(x),0]
f1f1
x1ex2x1x
【例2.3-3】求f(xf2
2
1,x2)x
的Jacobian矩阵f2
2xx。
cos(x12
1)sin(x2)f3f3
x1x
2
symsx1x2;f=[x1*exp(x2);x2;cos(x1)*sin(x2)];
v=[x1x2];fjac=jacobian(f,v)
fjac=
[exp(x2),x1*exp(x2)]
[0,1]
[-sin(x1)*sin(x2),cos(x1)*cos(x2)]
【例2.3-4】f(x)sinx,求fx(0),fx(x)。
(1)
clear
symsx
symsdpositive%正数
f_p=sin(x);%
df_p=limit((subs(f_p,x,x+d)-f_p)/d,d,0)%<4>
df_p0=limit((subs(f_p,x,d)-subs(f_p,x,0))/d,d,0)%<5>df_p=
cos(x)
df_p0=
1
(2)
f_n=sin(-x);
df_n=limit((f_n-subs(f_n,x,x-d))/d,d,0)%<7>
df_n0=limit((subs(f_n,x,0)-subs(f_n,x,-d))/d,d,0)%<8>df_n=
-cos(x)
df_n0=
-1
(3)
f=sin(abs(x));
dfdx=diff(f,x)dfdx=
cos(abs(x))*abs(1,x)
8%<10>
(4)
xn=-3/2*pi:
pi/50:
0;xp=0:
pi/50:
3/2*pi;xnp=[xn,xp(2:
end)];
holdon
plot(xnp,subs(f,x,xnp),'k','LineWidth',2.5)%<13>plot(xn,subs(df_n,x,xn),'--r','LineWidth',2.5)
plot(xp,subs(df_p,x,xp),':
r','LineWidth',2.5)
legend(char(f),char(df_n),char(df_p),'Location','NorthEast')%<16>gridon
xlabel('x')
holdoff
图2.3-1函数及其导函数
【例2.3-5】设cos(xsiny)siny,求
(1)
clear
symsx
g=sym('cos(x+sin(y(x)))=sin(y(x))')%<3>
dgdx=diff(g,x)%<4>
g=
cos(x+sin(y(x)))=sin(y(x))
dgdx=
-sin(x+sin(y(x)))*(1+cos(y(x))*diff(y(x),x))=cos(y(x))*diff(y(x),x)dy。
dx
(2)
disp(maple('isolate',dgdx,diff('y(x)',x)))%<5>diff(y(x),x)=sin(x+sin(y(x)))/(-sin(x+sin(y(x)))*cos(y(x))-cos(y(x)))
说明:
(1)求隐函数的方法
a)对方程求导数;
b)将需要的函数关系从a)中分离出来;
(2)maple指令的用法(见2.7节)
maple()将maple指令传入maple内核进行处理。
传入的是有效的maple指令及其附加参数。
MAPLE('function',ARG1,ARG2,..,)在引号内输入正确的
maple函数名称和对应参数。
(3)maple函数isolate()的用法
a)可以输入mhelpisolate查看相应帮助文档;
b)isolate()用于将一个方程中的子表达式移动到方程的左边,即将方程中的一部分单独表示出来。
c)用法isolate(eqn,expr),此函数试图将eqn中的expr分离出来并求解。
【例2.3-6】求f(x)xex在x0处展开的8阶Maclaurin级数。
symsx
r=taylor(x*exp(x),9,x,0)%忽略9阶及9阶以上小量的展开r=
x+x^2+1/2*x^3+1/6*x^4+1/24*x^5+1/120*x^6+1/720*x^7+1/5040*x^8
说明:
taylor()进行taylor级数展开
TAYLOR(f)isthefifthorderMaclaurinpolynomialapproximationtof.Threeadditionalparameterscanbespecified,inalmostanyorder.TAYLOR(f,n)isthe(n-1)-storderMaclaurinpolynomial.
TAYLOR(f,a)istheTaylorpolynomialapproximationaboutpointa.TAYLOR(f,x)usestheindependentvariablexinsteadofFINDSYM(f).
【例2.3-7】求sin(x2y)在x0,y0处的截断8阶小量的Taylor展开近似。
TL1=maple('mtaylor(sin(x^2+y),[x=0,y=0],8)')
class(TL1)
TL1=
y+x^2-1/6*y^3-1/2*x^2*y^2+1/120*y^5-1/2*x^4*y+1/24*x^2*y^4-1/6*x^6-1/5040*y^7+1/12*x^4*y^3
ans=
char
说明:
mtaylor()执行一个截断的多变量的Taylor级数展开。
ThemtaylorfunctioncomputesatruncatedmultivariateTaylorseriesexpansionoftheinputexpressionf,withrespecttothevariablesv,toordern,usingthevariableweightsw.
-Thevariablesvcanbealistorsetofnamesorequations.Ifv[i]isanequation,thentheleft-handsideofv[i]isthevariable,andtheright-handsideisthepointofexpansion.Ifv[i]isaname,thenv[i]=0isassumedasthepointofexpansion.
-Ifthethirdargumentnispresentthenitspecifiesthe``truncationorder''oftheseries.Theconceptof``truncationorder''usedis``totaldegree''inthevariables.Ifnisnotpresent,thetruncationorderusedisthevalueoftheglobalvariableOrder,whichis6bydefault.
2.3.2序列/级数的符号求和
t131
(1)k,【例2.3-8】求[t,k],。
2(2k1)kk1t0
symskt;f1=[tk^3];f2=[1/(2*k-1)^2,(-1)^k/k];
s1=simple(symsum(f1))
s2=simple(symsum(f2,1,inf))
s1=
[1/2*t*(t-1),k^3*t]
s2=
[1/8*pi^2,-log
(2)]
2.3.3
【例2.3-9】求符号积分11xxxdx。
clear
symsx
f=sqrt((1+x)/x)/x
s=int(f,x)
s=simple(simple(s))%两次化简
f=
((1+x)/x)^(1/2)/x
s=
((1+x)/x)^(1/2)/x*(-2*(x^2+x)^(3/2)+2*(x^2+x)^(1/2)*x^2+log(1/2+x+(x^2+x)^(1/2))*x^2)/((1+x)*x)^(1/2)
s=
log(1/2+x+((1+x)*x)^(1/2))-2*((1+x)*x)^(1/2)/x
axbx2dx。
【例2.3-10】求1sinxx
symsabx;f=[a*x,b*x^2;1/x,sin(x)];
disp('Theintegraloffis');pretty(int(f))
Theintegraloffis
[23]
[1/2ax1/3bx]
[]
[log(x)-cos(x)]
【例2.3-11】求积分12x2x2yxxy(x2y2z2)dzdydx。
symsxyz
F2=int(int(int(x^2+y^2+z^2,z,sqrt(x*y),x^2*y),y,sqrt(x),x^2),x,1,2)VF2=vpa(F2)
F2=
-6072064/348075*2^(1/2)+64/225*2^(3/4)+14912/4641*2^(1/4)+1610027357/6563700
VF2=
224.921535733311431597907
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB学习第一章第 符号计算ch21讲解 MATLAB 学习 第一章 符号 计算 ch21 讲解