MATLAB符号计算.docx

上传人:b****7 文档编号:26610529 上传时间:2023-06-20 格式:DOCX 页数:31 大小:150.12KB
下载 相关 举报
MATLAB符号计算.docx_第1页
第1页 / 共31页
MATLAB符号计算.docx_第2页
第2页 / 共31页
MATLAB符号计算.docx_第3页
第3页 / 共31页
MATLAB符号计算.docx_第4页
第4页 / 共31页
MATLAB符号计算.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

MATLAB符号计算.docx

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

MATLAB符号计算.docx

MATLAB符号计算

第2章符号计算

所谓符号计算是指:

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

这种计算建立在数值完全准确表达和推演严格解析的基础之上,因此所得结果是完全准确的。

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

.1.1基本符号对象和运算算符

101生成符号对象的基本规则

生成符号对象的MATLAB规则:

(1)必须定义

(2)包含符号对象的也一定是符号对象

102精准符号数字和符号常数

sc=sym(Num)

【例2.1-1】演示:

精准符号数字或数字表达式的创建。

1)

clearall

R1=sin(sym(0.3))%

R2=sin(sym(3e-1))%

R3=sin(sym(3/10))%

R4=sin(sym('3/10'))%

disp(['R1属于什么类别?

答:

',class(R1)])

disp(['R1与R4是否相等?

(是为1,否为0)答:

',int2str(logical(R1==R4))])

R1=

sin(3/10)

R2=

sin(3/10)

R3=

sin(3/10)

R4=

sin(3/10)

R1属于什么类别?

答:

sym

R1与R4是否相等?

(是为1,否为0)答:

1

103基本符号变量

sym:

创建符合数字、符号常数 、符号表达式

syms:

创建多个符号变量、抽象符号函数以及变量

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

符号与数值计算中有些函数同名,使用时注意数据类型!

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

类别

情况描述

符号工具包函数

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

指数、对数函数(如exp,expm)

复数函数(如abs,angle)

矩阵分解函数(如eig,svd)

方程求解函数solve

微积分函数(如diff,int)

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

绘图函数(如ezplot,ezsurf)

特殊函数

单位脉冲和阶跃函数(如dirac,heaviside)

函数(如beta,gamma)

椭圆积分(如ellipke)

贝塞尔函数(如besseli,besselj)

MuPAD库函数

借助evalin和feval指令可调用比mfunlist所列范围更广泛的MuPAD库函数;需要具备MuPAD语言知识。

〖说明〗

.1.3符号表达式和符号函数

101符号表达式和符号函数

102自由符号变量

【例2.1-2】

1)

clear

symsabcxyuv%

symsF(X,Y,Z)%

k=sym(3)%

G=sym('p*sqrt(q)+r*sin(t)')%

EXPR=a*G*u+(b*x^2+k)*v%

f(x,y)=a*x^2+b*y^2-c%

disp(F)%

k=

3

G=

p*q^(1/2)+r*sin(t)

EXPR=

v*(b*x^2+3)+a*u*(p*q^(1/2)+r*sin(t))

f(x,y)=

a*x^2+b*y^2-c

F(X,Y,Z)

symbolicfunctioninputs:

X,Y,Z

2)

symvar(EXPR)%

%

ans=

[a,b,p,q,r,t,u,v,x]

symvar(EXPR,1)%

ans=

x

3)

disp(symvar(f))%

[a,b,c,x,y]

disp(symvar(f,2))%

[x,y]

【例2.1-3】用符号法求方程

的解。

1)

clear

symsuvwz%

Eq=u*w^2+z*w-v%

Eq=

u*w^2+z*w-v

2)

symvar(Eq,1)%<5>

ans=

w

3)

R1=solve(Eq)%<7>

R1=

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

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

4)

S1=solve(Eq,z)%<9>

S1=

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

5)

disp(simplify(subs(Eq,z,S1)))%

0

〖说明〗

【例2.1-4】

symsabtuvxy

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

symvar(A,1)%

A=

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

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

ans=

x

.1.4符号对象的识别

用于识别数据的指令:

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;%

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%

NameSizeBytesClassAttributes

Mc1x918char

Mn2x232double

Ms2x260sym

.1.5符号运算机理和变量假设

101符号运算的工作机理

102对符号变量的限定性假设

assume(expr,set)%set为‘integer’,‘rational’,‘real’表示整数集,有理数集,实数集

a=sym(‘a’,res)%res为‘positive’,‘real’表示正数,实数

103清除变量和撤销假设

clearx与symsxclear的区别

【例2.1-6】符号变量的默认数域是复数域。

1)

clearall%

symsx%

f=x^3+475*x/100+5/2;%

r=solve(f,x)%

r=

-1/2

(79^(1/2)*i)/4+1/4

1/4-(79^(1/2)*i)/4

assumptions(x)%

ans=

[emptysym]

2)

assume(x,'real')%

r21=solve(f,x)%

r21=

-1/2

symsxclear%

assume(imag(x)==0)%

r22=solve(f,x)

r22=

-1/2

disp(assumptions(x))%

imag(x)==0

3)

sym(x,'clear')%

assume(real(x)>0)%

r3=solve(f,x)

ans=

x

r3=

(79^(1/2)*i)/4+1/4

1/4-(79^(1/2)*i)/4

disp(assumptions(x))%

0

4)

assumeAlso(imag(x)>0)%

r4=solve(f,x)

r4=

(79^(1/2)*i)/4+1/4

disp(assumptions(x))

[0

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

.2.1符号数字转换成双精度数字

Newdata=double(num_sym)

.2.2符号数字的任意精度表达形式

digits(n)设定十进制符号数字有效位数

vpa(x,n)设定精度,只在运行当时起作用

【例2.2-1】

1)

reset(symengine)%<1>

sa=sym('1/3+sqrt

(2)')%

sa=

2^(1/2)+1/3

2)

digits%<3>

Digits=32

formatlong

a=1/3+sqrt

(2)%

sa_Plus_a=vpa(sa+a,20)%<6>

sa_Minus_a=vpa(sa-a,20)%<7>

%

a=

1.747546895706428

sa_Plus_a=

3.4950937914128567869

sa_Minus_a=

-0.000000000000000022658064826339973669

3)

sa32=vpa(sa)%<8>

digits(48)%<9>

sa5=vpa(sa,5)%<10>

sa48=vpa(sa)%<11>

sa32=

1.747546895706428382135022057543

sa5=

1.7475

sa48=

1.74754689570642838213502205754303141190300520871

〖说明〗

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

collect,expand,factor,horner,numden,simplify,pretty,coeffs

【例2.2-2】简化

symsx

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

g1=simplify(f)%

f=

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

g1=

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

.2.4表达式中的置换操作

101公因子法简化表达

subexpr(S,‘w’)从S中提取公因子w

102通用置换指令

subs(ES,old,new)用new置换ES中的old

【例2.2-4】

1)

clear

symsabx;

f1=a*sin(x)+b

f1=

b+a*sin(x)

2)

f2=subs(f1,sin(x),'log(y)')%<4>

f2=

b+a*log(y)

.3符号微积分

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

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

limit,diff

【例2.3-1】两种重要极限

symstxk

s=sin(k*t)/(k*t);

f=(1-1/x)^(k*x);

Lsk=limit(s,0)%

Ls1=subs(Lsk,k,1)%

Lf=limit(f,x,inf)%

Lf1=vpa(subs(Lf,k,sym('-1')),48)%

Lsk=

1

Ls1=

1

Lf=

exp(-k)

Lf1=

2.7182818284590452353602874713526624977572470937

【例2.3-2】已知

,求

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]

【例2.3-3】求

的Jacobian矩阵

symsx1x2;

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

v=[x1;x2];%<3>

Jf=jacobian(f,v)%

Jf=

[exp(x2),x1*exp(x2)]

[0,1]

[-sin(x1)*sin(x2),cos(x1)*cos(x2)]

●指令<3>把自变量x1和x2写成列向量v。

但若写成v=[x1,x2],所得Jacobian矩阵完全一样。

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

S=symsum(f,v,a,b)即

v为整数

【例2.3-7】

1)

symsnk

f1=1/(k*(k+1));

s1=symsum(f1,k,1,n)

s1=

n/(n+1)

.3.3符号积分

int(f,v)不定积分

int(f,v,a,b)定积分

【例2.3-8】

clear

symsabx

f=x*log(x)

s=int(f,x)

f=

x*log(x)

s=

(x^2*(log(x)-1/2))/2

【例2.3-10】

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=

(14912*2^(1/4))/4641-(6072064*2^(1/2))/348075+(64*2^(3/4))/225+1610027357/6563700

VF2=

224.92153573331143159790710032805

.4微分方程的符号解法

.4.1符号解法和数值解法的互补作用

.4.2求微分方程符号解的一般指令

dsolve(‘eq1,eq2,…’,‘cond1,cond2,…’,‘v’)

.4.3微分方程符号解示例

【例2.4-1】求

的解。

clearall%<1>

S=dsolve('Dx=y,Dy=-x')%

disp('')

disp(['微分方程的解',blanks

(2),'x',blanks(22),'y'])

disp([S.x,S.y])

S=

x:

[1x1sym]

y:

[1x1sym]

微分方程的解xy

[C1*cos(t)+C2*sin(t),C2*cos(t)–C1*sin(t)]

〖说明〗

【例2.4-2】微分方程

clearall%<1>

y=dsolve('(Dy)^2-x*Dy+y=0','x')%<2>

y=

x^2/4

-C5^2+x*C5

【例2.4-3】

1)

y=dsolve('x*D2y-3*Dy=x^2','y

(1)=0,y(5)=0','x')

y=

(31*x^4)/468-x^3/3+125/468

.5符号变换和符号卷积

.5.1Fourier变换及其反变换

(2.5-1)

(2.5-2)

Fw=fourier(ft,t,w)

ft=ifourier(Fw,w,t)

【例2.5-1】求单位阶跃函数的Fourier变换。

1)

symstw

ut=heaviside(t);

UT=fourier(ut)

UT=

pi*dirac(w)-i/w

2)

Ut=ifourier(UT,w,t)%

SUt=simplify(Ut)%<5>

Ut=

(pi+pi*(2*heaviside(t)-1))/(2*pi)

SUt=

heaviside(t)

【例2.5-2】矩形脉冲

的Fourier变换。

1)

symsAtwtao

yt=A*(heaviside(t+tao/2)-heaviside(t-tao/2));%

Yw=fourier(yt,t,w)%

Yws=simplify(Yw)%<4>

Yw=

A*((cos((tao*w)/2)*i+sin((tao*w)/2))/w-(cos((tao*w)/2)*i-sin((tao*w)/2))/w)

Yws=

(2*A*sin((tao*w)/2))/w

2)

Yt=ifourier(Yws,w,t)%

Yts=simplify(Yt)%<6>

Yt=

-(A*(pi*heaviside(t-tao/2)-pi*heaviside(t+tao/2)))/pi

Yts=

-A*(heaviside(t-tao/2)-heaviside(t+tao/2))

3)

T=3;

tn=-3:

0.1:

T;%

ytn=subs(yt,{A,tao,t},{1,T,tn});%

kk=find(tn==-t3/2|tn==t3/2);%<11>

plot(tn(kk),ytn(kk),'.r','MarkerSize',30)%

ytn(kk)=NaN;%<13>

holdon

plot(tn,ytn,'-r','LineWidth',3)

holdoff

gridon

axis([-T,T,-0.5,1.5])

yt13=

heaviside(t+3/2)-heaviside(t-3/2)

图2.5-2矩形波

4)频域曲线绘制

Ywn=subs(Yws,{A,tao},{1,T});

subplot(2,1,1),ezplot(Ywn),gridon

subplot(2,1,2),ezplot(abs(Ywn)),gridon

图2.5-3矩形脉冲的频率曲线和幅度频谱

.5.2Laplace变换及其反变换

(2.5-3)

(2.5-4)

Fs=laplace(ft,t,s)

ft=ilaplace(Fs,s,t)

【例2.5-4】求

的Laplace变换。

symsbpositive%<7>

f5=dirac(t-b);%<11>

F5=laplace(f5,t,s)%

ft_F5=ilaplace(F5,s,t)%

F5=

exp(-b*s)

ft_F5=

dirac(b-t)

.5.3Z变换及其反变换

(2.5-5)

(2.5-6)

FZ=ztrans(fn,n,z)

fn=iztrans(FZ,z,n)

【例2.5-5】一组Z变换、反变换算例。

symsnzclear%<11>

f1=1;

F1=ztrans(f1,n,z);

pretty(F1)

inv_F1=iztrans(F1,z,n)

z

-----

z-1

inv_F1=

1

.5.4符号卷积

【例2.5-6】已知系统冲激响应

,求

输入下的输出响应。

1)

clearall

symsTttaos

ut=exp(-t);%

ht=exp(-t/T)/T;%

uh_tao=subs(ut,t,tao)*subs(ht,t,t-tao);%

yt1=int(uh_tao,tao,0,t)%

yt1=

-(exp(-t)-exp(-t/T))/(T-1)

2)

yt21=ilaplace(laplace(ut,t,s)*laplace(ht,t,s),s,t)

yt22=collect(yt21,'(T-1)')%为与此前结果比较而施行的指令

yt21=

exp(-t/T)/(T-1)-exp(-t)/(T-1)

yt22=

(exp(-t/T)-exp(-t))/(T-1)

.6符号矩阵分析和代数方程解

.6.1符号矩阵分析

表2.6-1符号矩阵分析和解算指令汇总表

指令

含义

参考节次

colspace(A)

det(A)

diag(A)

[V,D]=eig(A)

expm(A)

inv(A)

[V,J]=jordan(A)

null(A)

charpoly(A)

rank(A)

rref(A)

s=svd(A)

[U,S,V]=svd(vpa(A))

tril(A)

triu(A)

〖说明〗

【例2.6-1】求矩阵

的行列式、逆和特征根。

1)

A=sym('A%d%d',[2,2])%

nA=ndims(A)%

SA=size(A)%

DA=det(A)

A=

[A11,A12]

[A21,A22]

nA=

2

SA=

22

DA=

A11*A22-A12*A21

2)

IA=inv(A)%

SIA=subexpr(IA,'ID')%

IA=

[A22/(A11*A22-A12*A21),-A12/(A11*A22-A12*A21)]

[-A21/(A11*A22-A12*A21),A11/(A11*A22-

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

当前位置:首页 > 医药卫生 > 预防医学

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

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