ch2符号计算.docx

上传人:b****8 文档编号:10571555 上传时间:2023-02-21 格式:DOCX 页数:26 大小:99.89KB
下载 相关 举报
ch2符号计算.docx_第1页
第1页 / 共26页
ch2符号计算.docx_第2页
第2页 / 共26页
ch2符号计算.docx_第3页
第3页 / 共26页
ch2符号计算.docx_第4页
第4页 / 共26页
ch2符号计算.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

ch2符号计算.docx

《ch2符号计算.docx》由会员分享,可在线阅读,更多相关《ch2符号计算.docx(26页珍藏版)》请在冰豆网上搜索。

ch2符号计算.docx

ch2符号计算

第2章符号计算

符号计算:

解算数学表达式、方程不是在离散化的数值点上进行,而是凭借一系列恒等式,数学定理,通过推理和演绎,获得解析结果。

特点:

一,相对于MATLAB的数值计算“引擎”和“函数库”而言,符号计算的“引擎”和“函数库”是独立的。

二,在相当一些场合,符号计算解算问题的指令和过程,显得比数值计算更自然、更简明。

三,大多数理工科的本科学生在学过高等数学和其他专业基础课以后,比较习惯符号计算的解题理念和模式。

SymbolicMathToolbox™ThecomputationalengineunderlyingthetoolboxesisthekernelofMaplesoftware,asystemdevelopedprimarilyattheUniversityofWaterloo,Canadaand,morerecently,attheEidgen?

ssicheTechnischeHochschule,Zürich,Switzerland.MaplesoftwareismarketedandsupportedbyWaterlooMaple,Inc.

运算引擎MuPAD

MuPAD作为MATLAB7.8的符号计算工具箱,是一具有人工智能的数学软件。

方程式可以处理复数计算,完美的绘图功能,图型输入,输出,可以输入多个2-D函数或极坐标函数或3-D函数,选择所要绘图参数,就可以完成图形,以及图形的动画制作也是非常方便。

数值计算结果并不是MATLAB命令行窗口所得的类似代码形式,而是规范数学格式。

并拥有一内建的程序语言,帮助文档以及文本操作,文本操作在一定程度上可以取代word。

MathWorks自从2008年10开始,在Matlab的新版本(Matlab2008a,即7.6之后)中使用MuPAD内核替换原来的Maple符号计算内核!

.1符号对象和符号表达式

MATLAB依靠基本符号对象(包括数字、参数、变量)、运算符及一些预定义函数来构造和衍生符号表达式和符号方程。

.1.1符号对象的创建和衍生

10一生成符号对象的基本规则

●任何基本符号对象都必须借助专门的符号函数指令sym或syms定义。

●任何包含符号对象的表达式或方程,将继承符号对象的属性。

 

10二符号数字

符号(类)数字的定义:

sym('Num')创建一个符号数字Num

sc=sym('Num')创建一个符号常数sc,该常数值准确等于Num

说明:

Num代表一个具体的数字

Num必须处于(英文状态下的)单引号内,构成字符串(关于字符串参见附录A.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

10三符号参数

表达式e-axsinbx中的a,b称为参数。

定义格式:

symsPara定义符号参数Para

Para=sym('Para')

symsParaFlag定义具有Flag指定属性的符号参数Para

Para=sym('Para','Flag')

symsPara1Para2ParaN定义Para1Para2ParaN为符号参数

symsPara1Para2ParaNFlag定义Para1Para2ParaN为具有Flag指定属性的符号参数

●符号参数名不要用处于“字母表中小写字母x及其两侧的英文字母”开头。

●Flag表示参数属性,可具体取以下词条:

positive表示那些符号参数取正实数;

real表示那些符号参数限定为实时;

unreal表示那些符号参数为不限定的复数。

symsxab

int(1/(x),a,b)

Warning:

Warning,unabletodetermineif0isbetweenaand

b;trytouseassumptionsorset_EnvAllSolutionstotrue

Warning:

Explicitintegralcouldnotbefound.

>Insym.intat58

ans=

int(1/x,x=a..b)

Var=sym('x');

Upp=sym('a','real');

Low=sym('b','real');

Intergral=int(1/(x),a,b)

Warning:

Warning,unabletodetermineif0isbetweenaand

b;trytouseassumptionsorsetoption_EnvAllSolutionsto

true

Warning:

Explicitintegralcouldnotbefound.

>Insym.intat58

Intergral=

int(1/x,x=a..b)

Var=sym('x');

Upp=sym('a','positive');

Low=sym('b','positive');

Intergral=int(1/(x),a,b)

Intergral=

-log(a)+log(b)

10四符号变量

e-axsinbx中的x称为变量,符号变量的定义同符号参数。

确定自由符号变量的规则:

●在专门指定变量名的符号运算中,解题一定围绕指定变量名进行。

●自动识别符号变量时,字母的优先次序为x,y,w,z,v等。

自动识别表达式中自由、独立的符号变量的指令:

findsym(EXPR)确认表达式EXPR中所有自由符号变量

findsym(EXPR,N)确认表达式EXPR中距离x最近的N个自由符号变量

【例2.1-2】用符号计算研究方程

的解。

(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)

result_2=

-1/2*(v-(v^2-4*u*w)^(1/2))/u

-1/2*(v+(v^2-4*u*w)^(1/2))/u

【例2.1-3】对独立自由符号变量的自动辨认。

(1)

symsabxXY%定义符号参数/变量

k=sym('3');%符号常数

z=sym('c*sqrt(delta)+y*sin(theta1)');%直接定义符号表达式

EXPR=a*z*X+(b*x^2+k)*Y;%构成衍生符号表达式

(2)

findsym(EXPR)

ans=

X,Y,a,b,c,delta,theta1,x,y

(3)

findsym(EXPR,1)

ans=

x

(4)

findsym(EXPR,2),findsym(EXPR,9)

ans=

x,y

ans=

x,y,theta1,delta,c,b,a,X,Y

【例2.1-4】findsym确定自由变量是对整个矩阵进行的。

symsabtuvxy

A=[a+b*x,sin(t)+u;x*exp(-t),log(y)+v]

findsym(A,5)

A=

[a+b*x,sin(t)+u]

[x*exp(-t),log(y)+v]

ans=

x,y,v,u,t

.1.2符号计算中的算符

●与数值计算中的算符在形状、名称和使用方法上几乎完全相同。

●仅注意:

在符号对象的关系运算符中,只有算符“==”,“~=”

比较结果为“真”时,用1表示;否则用0表示。

.1.3符号计算中的函数指令

表2.1-1MATLAB中可调用的符号计算函数指令

类别

情况描述

与数值计算对应关系

基本函数

三角函数、双曲函数及反函数;除atan2外

名称和使用方法相同

指数、对数函数(如exp,expm)只有log,无log2和log10

symsx

log10(x)

名称和使用方法相同

复数函数(注意:

没有幅角函数angle)

z=1+i;

angle(z)

a=sym('1+i');

abs(a)

angle(a)

名称和使用方法相同

矩阵分解函数(如eig等)

名称和使用方法相同

方程求解函数solve

不同

微积分函数(如diff,int)

不完全相同

积分变换和反变换函数(如laplace,ilaplace)

只有离散Fourier变换

绘图函数(如ezplot,ezsurf)

数值绘图指令更丰富

经典特殊函数

如误差函数erf、贝塞尔函数besselj、第一类完全椭圆积分EllipticK等;通过mfunlist可以看到所有经典函数名

部分

Maple库函数

Maple库函数在符号计算的扩展目录上;可通过mhelpindex看到各子函数库的名称;函数的数量很大;使用库函数,需要具备Maple语言知识

注意:

使用函数注意数据类型。

就数字而言,有双精度和符号类数字之分。

.1.4符号对象的识别

为了函数指令与数据对象的适配,MATLAB提供了用于识别数据对象属性的指令:

class(var)给出变量var的数据类别(如double,sym等)

isa(var,'Obj')若变量var是Obj代表的类型,给出1,表示“真”

whos给出所有MATLAB内存变量的属性

【例2.1-5】数据对象及其识别指令的使用。

(1)

clear

a=1;b=2;c=3;d=4;%产生4个数值变量

Mn=[a,b;c,d]%利用已赋值变量构成数值矩阵

Mc='[a,b;c,d]'%字符串中的a,b,c,d与前面输入的数值变量无关

Ms=sym(Mc)%Ms是一个符号矩阵,它与前面各变量无关

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

NameSizeBytesClassAttributes

Mc1x918char

Mn2x232double

Ms2x2312sym

.2符号数字及表达式的操作

.2.1数值数字与符号数字之间的转换

10一数值数字向符号数字的转换

在符号运算中,“数值类数字”会自动地转换为符号数字。

亦可借助sym函数:

sym(Num,'r')或sym(Num)数值类数字Num的广义有理表达

sym(Num,'d')数值类数字Num的“十进制浮点”近似表达

sym(Num,'e')数值类数字Num的带eps误差的理性近似表达

sym(Num,'f')数值类数字Num的“十六进制浮点”近似表达

a=pi

a1=sym(a,'r')

a2=sym(a,'d')

a3=sym(a,'e')

a4=sym(a,'f')

a=

3.1416

a1=

pi

a2=

3.1415926535897931159979634685442

a3=

pi-198*eps/359

a4=

'1.921fb54442d18'*2^

(1)

a=pi+0.1;

a1=sym(a,'r')

a2=sym(a,'d')

a3=sym(a,'e')

a4=sym(a,'f')

a1=

7299417733396965*2^(-51)

a2=

3.2415926535897932048158054385567

a3=

7299417733396965*2^(-51)

a4=

'1.9eec82110f9e5'*2^

(1)

1、Num只能是数值类数字

2、sym('Num')和sym(Num)区别问题

'Num'数字字符串,理论值,Num表示数字,近似(双精度值)

3、在符号运算中,“数值数字”自动转换为符号运算

10二符号数字向双精度数字转换

double(Num_sym)把符号数字Num_sym转换为双精度数字

.2.2符号数字的任意精度计算

digits显示当前环境下符号数字“十进制浮点”表示的有效数字位数

digits(n)设定符号数字“十进制浮点”表示的有效数字位数(默认32位)

xs=vpa(x)据表达式x得到digits指定精度下的符号数字xs

xs=vpa(x,n)据表达式x得到n位有效数字的符号数字xs

【例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)%16位变精度运算计算误差

e32d=vpa(abs(p0-pd))

e16=vpa(abs(p0-pd),64)

digits

.2.3符号表达式的基本操作

collect(合并同类项)

factor(进行因式分解)

numden(提取公因式)等

最常用:

simple(EXPR)把EXPR转换成最简形式

【例2.2-2】简化

symsx

f=(1/x^3+6/x^2+12/x+8)^(1/3);

g1=simple(f)

g2=simple(g1)

有时需要多次使用simple

simple(f)%直接看化简过程

simple(ans)

pretty(f)

.2.4表达式中的置换操作

10一子表达式置换操作

[RS,ssub]=subexpr(S,ssub)运用符号变量ssub置换子表达式,并重写S为RS

【例2.2-3】对符号矩阵

进行特征向量分解。

clearall

symsabcdW

[V,D]=eig([ab;cd])%V:

特征向量阵D:

特征值阵

[RVD,W]=subexpr([V;D],W)%对矩阵元素中的公共子表达式进行置换表达

只置换较长的表达式

10二通用置换指令

RES=subs(ES,old,new)用new置换ES中的old后产生RES

RES=subs(ES,new)用new置换ES中的自由变量后产生RES

【例2.2-4】用简单算例演示subs的置换规则。

(1)产生符号函数

symsax;f=a*sin(x)+5

f=

a*sin(x)+5

(2)符号表达式置换

f1=subs(f,'sin(x)',sym('y'))%<2>

class(f1)

(3)符号常数置换

f2=subs(f,{a,x},{2,sym('pi/3')})%<3>a被双精度数字置换,x被符号数字置换

class(f2)

(4)双精度数值置换

f3=subs(f,{a,x},{2,pi/3})%<4>

class(f3)

(5)数值数组置换之一

f4=subs(subs(f,a,2),x,0:

pi/6:

pi)%<5>

class(f4)

(6)数值数组置换之二

f5=subs(f,{a,x},{0:

6,0:

pi/6:

pi})%<6>

class(f5)

f6=subs(f,{a,x},{0:

7,0:

pi/6:

pi})%<6>

class(f5)

.3符号微积分

.3.1极限和导数的符号计算

大学本科高等数学中的大多数微积分问题,都能用符号计算解决,手工笔算演绎的烦劳都可以由计算机完成。

limit(f,v,a)求极限

【例2.3-1】试求

symsxk

Lim_f=limit((1-1/x)^(k*x),x,inf)

diff(f,v,n)求

(n缺省时,默认n=1)

【例2.3-2】求

symsatx;f=[a,t^3;t*cos(x),log(x)];

df=diff(f)%f对x的导数

dfdt2=diff(f,t,2)%f对x的二阶导数

dfdxdt=diff(diff(f,x),t)%二阶混合导数

【例2.3-3】求

的Jacobian(雅可比)矩阵

symsx1x2;f=[x1*exp(x2);x2;cos(x1)*sin(x2)];

v=[x1x2];fjac=jacobian(f,v)

【例2.3-4】

,求

(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>

(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>

(3)

f=sin(abs(x));

dfdx=diff(f,x)%<10>

dfdx=

cos(abs(x))*abs(1,x)%abs(1,x)表示

一阶导数

(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

.3.2序列/级数的符号求和

symsum(f,v,a,b)求f在变量v取遍[a,b]中所有整数时的和。

a,b缺省时默认求和区间[0,v-1]。

【例2.3-8】求

symskt;f1=[tk^3];f2=[1/(2*k-1)^2,(-1)^k/k];

s1=simple(symsum(f1))%f1的自变量被确认为t

s2=simple(symsum(f2,1,inf))%f1的自变量被确认为k

symsxy;f1=[yx^3];f2=[1/(2*y-1)^2,(-1)^y/y];

s1=simple(symsum(f1))%f1的自变量被确认为x

.3.3符号积分

int(f,v)求f对变量v的不定积分

int(f,v,a,b)求f对变量v的定积分

【例2.3-9】求

clear

symsx

f=sqrt((1+x)/x)/x

s=int(f,x)

s=simple(simple(s))

f=

((x+1)/x)^(1/2)/x

s=

-2*(1/x+1)^(1/2)-2*atan((1/x+1)^(1/2)*i)*i

s=

-2*(1/x+1)^(1/2)-2*atan((1/x+1)^(1/2)*i)*i

【例2.3-10】求

symsabx;f=[a*x,b*x^2;1/x,sin(x)];

disp('Theintegraloffis');pretty(int(f))

【例2.3-11】求积分

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)%积分结果用32位数字表示

【例2.3-12】求阿基米德(Archimedes)螺线

间的曲线长度函数,并求出

时的曲线长度。

(1)

symsartheta1phi1positive

x=r*cos(theta1);x=subs(x,r,a*theta1);

y=r*sin(theta1);y=subs(y,r,a*theta1);

dLdth=sqrt(diff(x,theta1)^2+diff(y,theta1)^2);

L=simple(int(dLdth,theta1,0,phi1))

(2)

L_2pi=subs(L,[a,phi1],sym('[1,2*pi]'))

L_2pi_vpa=vpa(L_2pi)

L_2pi=

asinh(2*pi)/2+pi*(4*pi^2+1)^(1/2)

L_2pi_vpa=

21.256294148209098800702512272566

(3)

L1=subs(L,a,sym('1'));

ezplot(L1*cos(phi1),L1*sin(phi1),[0,2*pi])

gr

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1