文档库 最新最全的文档下载
当前位置:文档库 › 实验MATLAB符号计算

实验MATLAB符号计算

实验MATLAB符号计算
实验MATLAB符号计算

实验四符号计算

符号计算的特点:一,运算以推理解析的方式进行,因此不受计算误差积累问题困扰;二,符号计算,或给出完全正确的封闭解,或给出任意精度的数值解(当封闭解不存在时);三,符号计算指令的调用比较简单,经典教科书公式相近;四,计算所需时间较长,有时难以忍受。

在MATLAB中,符号计算虽以数值计算的补充身份出现,但涉及符号计算的指令使用、运算符操作、计算结果可视化、程序编制以及在线帮助系统都是十分完整、便捷的。

MATLAB的升级和符号计算内核Maple的升级,决定着符号计算工具包的升级。但从用户使用角度看,这些升级所引起的变化相当细微。即使这样,本章还是及时作了相应的更新和说明。如MATLAB 6.5+ 版开始启用Maple VIII的计算引擎,从而克服了Maple V计算“广义Fourier变换”时的错误(详见第5.4.1节)。

5.1符号对象和符号表达式

5.1.1符号对象的生成和使用

【例5.1.1-1】符号常数形成中的差异

a1=[1/3,pi/7,sqrt(5),pi+sqrt(5)] % <1>

a2=sym([1/3,pi/7,sqrt(5),pi+sqrt(5)]) % <2>

a3=sym([1/3,pi/7,sqrt(5),pi+sqrt(5)],'e') % <3>

a4=sym('[1/3,pi/7,sqrt(5),pi+sqrt(5)]') % <4>

a24=a2-a4

a1 =

0.3333 0.4488 2.2361 5.3777

a2 =

[ 1/3, pi/7, sqrt(5), 6054707603575008*2^(-50)]

a3 =

[ 1/3-eps/12, pi/7-13*eps/165, sqrt(5)+137*eps/280, 6054707603575008*2^(-50)]

a4 =

[ 1/3, pi/7, sqrt(5), pi+sqrt(5)]

a24 =

[ 0, 0, 0, 189209612611719/35184372088832-pi-5^(1/2)]

【例5.1.1-2】演示:几种输入下产生矩阵的异同。

a1=sym([1/3,0.2+sqrt(2),pi]) % <1>

a2=sym('[1/3,0.2+sqrt(2),pi]') % <2>

a3=sym('[1/3 0.2+sqrt(2) pi]') % <3>

a1_a2=a1-a2 %

a1 =

[ 1/3, 7269771597999872*2^(-52), pi]

a2 =

[ 1/3, 0.2+sqrt(2), pi]

a3 =

[ 1/3, 0.2+sqrt(2), pi]

a1_a2 =

[ 0, 1.4142135623730951010657008737326-2^(1/2), 0]

【例5.1.1-3】把字符表达式转换为符号变量

y=sym('2*sin(x)*cos(x)') y=simple(y)

y =

2*sin(x)*cos(x) y =

sin(2*x)

【例5.1.1-4】用符号计算验证三角等式s i n c o sc o s s i n s i n ()??????

121212-=-。 syms fai1 fai2;y=simple(sin(fai1)*cos(fai2)-cos(fai1)*sin(fai2)) y =

sin(fai1-fai2)

【例5.1.1-5】求矩阵A a a a a =???

?

?

?11

122122的行列式值、逆和特征根 syms a11 a12 a21 a22;A=[a11,a12;a21,a22]

DA=det(A),IA=inv(A),EA=eig(A)

A =

[ a11, a12] [ a21, a22]

DA =

a11*a22-a12*a21 IA =

[ a22/(a11*a22-a12*a21), -a12/(a11*a22-a12*a21)] [ -a21/(a11*a22-a12*a21), a11/(a11*a22-a12*a21)]

EA =

1/2*a11+1/2*a22+1/2*(a11^2-2*a11*a22+a22^2+4*a12*a21)^(1/2) 1/2*a11+1/2*a22-1/2*(a11^2-2*a11*a22+a22^2+4*a12*a21)^(1/2)

【例5.1.1-6】验证积分

2

2sin

2

/2

/ωτ

ωτ

τττ

ω?

=?--A dt Ae t i 。

syms A t tao w;yf=int(A*exp(-i*w*t),t,-tao/2,tao/2);Yf=simple(yf)

Yf =

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

5.1.2 符号计算中的算符和基本函数 5.1.3 识别对象类别的指令

【例5.1.3-1】数据对象及其识别指令的使用。 (1)

clear,a=1;b=2;c=3;d=4; Mn=[a,b;c,d] Mc='[a,b;c,d]' Ms=sym(Mc)

1 2

3 4

Mc =

[a,b;c,d]

Ms =

[ a, b]

[ c, d]

(2)

SizeMn=size(Mn),SizeMc=size(Mc),SizeMs=size(Ms)

SizeMn =

2 2

SizeMc =

1 9

SizeMs =

2 2

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

whos Mn Mc Ms

Name Size Bytes Class

Mc 1x9 18 char array

Mn 2x2 32 double array

Ms 2x2 312 sym object

Grand total is 21 elements using 362 bytes

5.1.4符号表达式中自由变量的确定

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

(1)

syms a b x X Y;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, theta, x, y

findsym(EXPR,1)

ans =

x

(4)

findsym(EXPR,2),findsym(EXPR,3)

ans =

x,y

ans =

x,y,theta

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

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

A =

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

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

ans =

x

5.2符号表达式和符号函数的操作

5.2.1符号表达式的操作

【例5.2.1-1】按不同的方式合并同幂项。

EXPR=sym('(x^2+x*exp(-t)+1)*(x+exp(-t))');

expr1=collect(EXPR)

expr2=collect(EXPR,'exp(-t)')

expr1 =

x^3+2*exp(-t)*x^2+(1+exp(-t)^2)*x+exp(-t)

expr2 =

x*exp(-t)^2+(2*x^2+1)*exp(-t)+(x^2+1)*x

【例5.2.1-2】factor指令的使用

(1)

syms a x;f1=x^4-5*x^3+5*x^2+5*x-6;factor(f1)

ans =

(x-1)*(x-2)*(x-3)*(x+1)

(2)

f2=x^2-a^2;factor(f2)

ans =

-(a-x)*(a+x)

(3)

factor(1025)

ans =

5 5 41

【例5.2.1-3】对多项式进行嵌套型分解

clear;syms a x;f1=x^4-5*x^3+5*x^2+5*x-6;horner(f1)

ans =

-6+(5+(5+(-5+x)*x)*x)*x

【例5.2.1-4】写出矩阵????

?

?

????

??+-+-+434131232

32

2x x x x x x 各元素的分子、分母多项式

(1)

syms x;A=[3/2,(x^2+3)/(2*x-1)+3*x/(x-1);4/x^2,3*x+4];

[n,d]=numden(A)

pretty(simplify(A)) %<3> n =

[ 3, x^3+5*x^2-3] [ 4, 3*x+4] d =

[ 2, (2*x-1)*(x-1)] [ x^2, 1]

[ 3 2 ] [ x + 5 x - 3 ] [3/2 -----------------] [ (2 x - 1) (x - 1)] [ ] [ 4 ] [---- 3 x + 4 ] [ 2 ]

[ x ]

(2)

pretty(simplify(n./d))

[ 3 2 ]

[ x + 5 x - 3 ] [3/2 -----------------] [ (2 x - 1) (x - 1)] [ ] [ 4 ] [---- 3 x + 4 ] [ 2 ] [ x ] 【例5.2.1-5】简化323

81261+++=x x

x f (1)

syms x;f=(1/x^3+6/x^2+12/x+8)^(1/3); sfy1=simplify(f),sfy2=simplify(sfy1)

sfy1 =

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

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

(2)

g1=simple(f),g2=simple(g1)

g1 =

(2*x+1)/x g2 = 2+1/x

【例5.2.1-6】简化x x ff 2

sin cos -+=

syms x;ff=cos(x)+sqrt(-sin(x)^2);

ssfy1=simplify(ff),ssfy2=simplify(ssfy1)

ssfy1 =

cos(x)+(-1+cos(x)^2)^(1/2) ssfy2 =

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

gg1=simple(ff),gg2=simple(gg1)

gg1 =

cos(x)+i*sin(x) gg2 = exp(i*x)

5.2.2 符号函数的求反和复合

【例5.2.2-1】求2

x f =的反函数

syms x;f=x^2;g=finverse(f)

g = x^(1/2)

fg=simple(compose(g,f)) %验算g(f(x))是否等于x

fg = x

【例5.2.2-2】求)cos(,12

fai y g u

x

f +=+=的复合函数 (1)

syms x y u fai t;f=x/(1+u^2);g=cos(y+fai);fg1=compose(f,g)

fg1 =

cos(y+fai)/(1+u^2)

(2)

fg2=compose(f,g,u,fai,t) fg2 =

x/(1+cos(y+t)^2)

5.2.3 置换及其应用

5.2.3.1 自动执行的子表达式置换指令

【例5.2.3.1-1】演示子表达式的置换表示。

clear all,syms a b c d W;[V,D]=eig([a b;c d]);

[RVD,W]=subexpr([V;D],W) %<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)

5.2.3.2 通用置换指令

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

(1)

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

f =

a*sin(x)+5

(2)

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

a*y+5

(3)

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

3^(1/2)+5

(4)

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

6.7321

(5)

f4=subs(subs(f,a,2),x,0:pi/6:pi) %<5> f4 =

5.0000

6.0000 6.7321

7.0000 6.7321 6.0000 5.0000

(6)

f5=subs(f,{a,x},{0:6,0:pi/6:pi}) %<6> f5 =

5.0000 5.5000

6.7321 8.0000 8.4641

7.5000 5.0000

5.2.4符号数值精度控制和任意精度计算

5.2.4.1向双精度数值转换的doblue指令

5.2.4.2任意精度的符号数值

【例5.2.4.2-1】指令使用演示。

digits

Digits = 32

p0=sym('(1+sqrt(5))/2');

p1=sym((1+sqrt(5))/2)

e01=vpa(abs(p0-p1))

p1 =

7286977268806824*2^(-52)

e01 =

.543211520368251e-16

p2=vpa(p0)

e02=vpa(abs(p0-p2),64)

p2 =

1.6180339887498948482045868343656

e02 =

.38117720309179805762862135448622e-31

digits Digits = 32

5.2.5 符号对象与其它数据对象间的转换

【例5.2.5-1】符号、数值间的转换。

phi=sym((1+sqrt(5))/2) double(phi)

phi =

7286977268806824*2^(-52) ans = 1.6180

【例5.2.5-2】各种多项式表示形式之间的转换

syms x;f=x^3+2*x^2-3*x+5; sy2p=sym2poly(f)

p2st=poly2str(sy2p,'x') p2sy=poly2sym(sy2p) pretty(f,'x')

sy2p =

1 2 -3 5 p2st =

x^3 + 2 x^2 - 3 x + 5 p2sy =

x^3+2*x^2-3*x+5

5.3 符号微积分

5.3.1 符号序列的求和

【例5.3.1-1】求

[]

∑-=1

3

t t k t

,∑∞

=??

?

???--12

)1()

12(1

k k k k syms k t;f1=[t k^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)]

5.3.2 符号微分和

jacobian 矩阵

【例5.3.2-1】求??????x x t t a

dx d ln cos 3、

2

2dt d ??????x x t t a ln cos 3和

dxdt

d 2

??

????x x t t a ln cos 3 syms a t x;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]

【例5.3.2-2】求???

?

??????=)sin()cos(212

12x x x e x f x 的jacobian 矩阵。

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

v=[x1 x2];fjac=jacobian(f,v) fjac =

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

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

5.3.3 符号积分 5.3.3.1 通用积分指令 5.3.3.2 交互式近似积分指令 5.3.3.3 符号积分示例

【例5.3.3.3-1】求dx x x bx ax ????

?

????sin 1

2。演示:积分指令对符号函数矩阵的作用。 syms a b x;f=[a*x,b*x^2;1/x,sin(x)];

disp('The integral of f is');pretty(int(f))

The integral of f is

[ 2 3] [1/2 a x 1/3 b x ] [ ]

[ log(x) -cos(x) ]

【例5.3.3.3-2】求?

x

dt t

ln 1

。演示如何使用mfun 指令获取一组积分值。 (1)

F1=int('1/log(t)','t',0,'x') F1 =

-Ei(1,-log(x))

(2)

x=0.5:0.1:0.9

F115=-mfun('Ei',1,-log(x))

x =

0.5000 0.6000 0.7000 0.8000 0.9000 F115 =

-0.3787 -0.5469 -0.7809 -1.1340 -1.7758

【例5.3.3.3-3】求积分

???

++2

1

22222)(x x

y x xy

dzdydx z y x 。注意:内积分上下限都是函数。

syms x y z

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 =

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

VF2 =

224.92153573331143159790710032805

【例5.3.3.3-4】利用rsums 求?

=

5

.00

ln 1

dt t

S 积分。(与例5.3.3.3-2结果比较) syms x positive;px=0.5/log(0.5*x);rsums(px)

图5.3-1

0.1

0.2

0.3

0.4

0.50.6

0.7

0.8

0.9

1

-0.7

-0.6-0.5-0.4-0.3-0.2-0.1

0 1./2./log(1./2.*x) : -0.378691

128

5.3.4 符号卷积

【例 5.3.4-1】本例演示卷积的时域积分法:已知系统冲激响应h t T

e U t t T

()()/=

-1,求u t e U t t

()()=-输入下的输出响应。

syms T t tao;ut=exp(-t); ht=exp(-t/T)/T;

uh_tao=subs(ut,t,tao)*subs(ht,t,t-tao); yt=int(uh_tao,tao,0,t); yt=simple(yt)

yt =

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

【例5.3.4-2】本例演示通过变换和反变换求取卷积。系统冲激响应、输入同上例,求输出。 对式(5.3.4-1)两边进行Laplace 变换得L y t L u t L h t [()][()]*[()]

=,因此有 syms s;yt=ilaplace(laplace(ut,t,s)*laplace(ht,t,s),s,t);yt=simple(yt) yt =

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

【例5.3.4-3】求函数u t U t U t ()()()

=--1和h t te U t t

()()=-的卷积。 syms tao;t=sym('t','positive');

ut=sym('Heaviside(t)-Heaviside(t-1)');ht=t*exp(-t); yt=int(subs(ut,t,tao)*subs(ht,t,t-tao),tao,0,t); yt=collect(yt,'Heaviside(t-1)')

yt =

(exp(1-t)*t-1)*heaviside(t-1)+1+(-t-1)/exp(t)

5.4 符号积分变换

5.4.1 Fourier 变换及其反变换

【例 5.4.1-1】求0

1)(<≥??

?=t t t f 的Fourier 变换。本例演示三个重要内容:单位阶跃函数和单位脉冲函数的符号表示;fourier 指令的使用;simple 指令的表现。 (1)求Fourier 变换

syms t w;ut=sym('Heaviside(t)'); % <1> UT=fourier(ut)

UTC=maple('convert',UT,'piecewise','w') % <3> UTS=simple(UT)

UT =

2*pi*dirac(w)

UTC =

PIECEWISE([pi*NaN, w = 0],[0, otherwise])

UTS =

2*pi*dirac(w)

(2)求Fourier 反变换进行验算

Ut=ifourier(UT,w,t)

Uts=ifourier(UTS,w,t)

Ut = 1

Uts = 1

【例5.4.1-2】用fourier 指令求例5.1.1-6中方波脉冲的Fourier 变换。本例演示:fourier, simple 指令的配合使用。 (1)

syms A t w

syms tao positive % <2> yt=sym('Heaviside(t+tao/2)-Heaviside(t-tao/2)'); Yw=fourier(A*yt,t,w)

Ywc=maple('convert',Yw,'piecewise','w') %计算结果起指示作用 <5> Yws=simple(Yw)

Yw =

A*(i*exp(-1/2*i*tao*w)/w+pi*dirac(w))

Ywc =

PIECEWISE([A*(i*exp(-1/2*i*tao*w)/w+pi*NaN), w = 0],[i*A*exp(-1/2*i*tao*w)/w,

otherwise])

Yws =

A*(i*exp(-1/2*i*tao*w)/w+pi*dirac(w))

(2)

Yt=ifourier(Yw,w,t) Yst=ifourier(Yws,w,t)

Yt =

A*heaviside(-t+1/2*tao) Yst =

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

【例5.4.1-3】求x

t x t e t f x t <≥??

?=--0

)()

(的Fourier 变换,在此x 是参数,t 是时间变量。

本例演示:fourier 的缺省调用格式的使用要十分谨慎;在被变换函数中包含多个符号变量的情况下,对被变换的自变量给予指明,可保证计算结果的正确。

syms t x w;ft=exp(-(t-x))*sym('Heaviside(t-x)'); F1=simple(fourier(ft,t,w)) F2=simple(fourier(ft)) F3=simple(fourier(ft,t))

F1 =

fourier(exp(-t),t,w)/exp(i*x*w) F2 =

exp(-t)*fourier(exp(x)*heaviside(t-x),x,w) F3 =

exp(-t)*fourier(exp(x)*heaviside(t-x),x,t)

5.4.2 Laplace 变换及其反变换

【例5.4.2-1】求??

?

?

??---t t bt e b t u a t at 3cos sin )()(2

δ的Laplace 变换。 syms t s;syms a b positive %<1>

Dt=sym('Dirac(t-a)'); %<2> Ut=sym('Heaviside(t-b)'); %<3> Mt=[Dt,Ut;exp(-a*t)*sin(b*t),t^2*exp(-t)];MS=laplace(Mt,t,s)

MS =

[ exp(-s*a), exp(-s*b)/s] [ 1/b/((s+a)^2/b^2+1), 2/(1+s)^3]

【例5.4.2-2】验证Laplace 时移性质:0)}

({)}()({0000>=---t t f L e t t U t t f L st

syms t s;t0=sym('t0','positive'); %<1> ft=sym('f(t-t0)')*sym('Heaviside(t-t0)') FS=laplace(ft,t,s),FS_t=ilaplace(FS,s,t)

ft =

f(t-t0)*heaviside(t-t0) FS =

exp(-s*t0)*laplace(f(t),t,s)

FS_t =

f(t-t0)*heaviside(t-t0)

5.4.3 Z 变换及其反变换

【例5.4.3-1】求序列f n n ()(.)=-???

?

?026105 n n n <=>0

00

的Z 变换,并用反变换验算。 (1)

syms n

Delta=sym('charfcn[0](n)'); % <2> D0=subs(Delta,n,0); %

D15=subs(Delta,n,15); % disp('[D0,D15]');disp([D0,D15]) [D0,D15]

[ 1, 0]

(2)求序列)(n f 的Z 变换

syms z;fn=2*Delta+6*(1-(1/2)^n);FZ=simple(ztrans(fn,n,z)); disp('FZ = ');pretty(FZ),FZ_n=iztrans(FZ,z,n)

FZ =

2 4 z + 2 -------------- 2

2 z -

3 z + 1

FZ_n =

2*charfcn[0](n)+6-6*(1/2)^n

5.5 符号代数方程的求解

5.5.1 线性方程组的符号解

【例 5.5.1-1】求d n p

q n d q pq d n

p q p n d ++=++-=+-=+--=22104

81,,,线性方程组的解。本例演示,符号线性方程组的基本解法。

该方程组的矩阵形式是112121111111411811101001------?????????

????

??????????????=??????????

??d

n p q 。该式简记为A X b =。求符号解的指令如下

A=sym([1 1/2 1/2 -1;1 1 -1 1;1 -1/4 -1 1;-8 -1 1 1]);

b=sym([0;10;0;1]);X1=A\b

【例 5.5.1-2】求解上例前3 个方程所构成的“欠定”方程组,并解释解的含义。

A2=A(1:3,:);X2=A2\b(1:3,1) syms k;

XX2=X2+k*null(A2) A2*XX2

X1 = 1 8 8 9

5.5.2 一般代数方程组的解

【例5.5.2-1】求方程组u y v z w ^20++=,y z w ++=0关于z y ,的解。

S=solve('u*y^2+v*z+w=0','y+z+w=0','y','z')

disp('S.y'),disp(S.y),disp('S.z'),disp(S.z)

S =

y: [2x1 sym] z: [2x1 sym] S.y

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

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

【例 5.5.2-2】用solve 指令重做例 5.5.1-2。即求q p

n d =++

2

2,10=-++p q d n ,p n

d q =-

+4

构成的“欠定”方程组解。 syms d n p q;eq1=d+n/2+p/2-q;eq2=n+d+q-p-10;eq3=q+d-n/4-p; S=solve(eq1,eq2,eq3,d,n,p,q);S.d,S.n,S.p,S.q

ans = d ans = 8

ans = 4*d+4 ans = 3*d+6

【例5.5.2-3】求2)2(=+x

x 的解。

clear all,syms x;s=solve('(x+2)^x=2','x')

s =

.69829942170241042826920133106081

5.6 符号微分方程的求解

5.6.1 符号解法和数值解法的互补作用 5.6.2 求微分方程符号解的一般指令 5.6.3 微分方程符号解示例

【例5.6.3-1】求

d x d t y d y d t

x ==-,的解。 S=dsolve('Dx=y,Dy=-x');

disp([blanks(12),'x',blanks(21),'y']),disp([S.x,S.y])

x y

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

【例5.6.3-2】图示微分方程2

)(y y x y '-'=的通解和奇解的关系。

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

clf,hold on,ezplot(y(2),[-6,6,-4,8],1)

cc=get(gca,'Children'); % <3> set(cc,'Color','r','LineWidth',5) % <4>

for k=-2:0.5:2;ezplot(subs(y(1),'C1',k),[-6,6,-4,8],1);end hold off,title('\fontname{隶书}\fontsize{16}通解和奇解')

-6

-4-2

0246

-4

-2

2

4

6

8

x

í

¨íííí

图 5.6-1

【例5.6.3-3】求解两点边值问题:0)5(,0)1(,32==='-''y y x y y x 。(注意:相应的数值解法比较复杂)。

y=dsolve('x*D2y-3*Dy=x^2','y(1)=0,y(5)=0','x') y =

31/468*x^4-1/3*x^3+125/468

【例5.6.3-4】求边值问题

d f d x f g d g

d x

f g f g =+=-+==34430001,,(),()的解。(注意:相应的数值解法比较复杂)。

S=dsolve('Df=3*f+4*g,Dg=-4*f+3*g','f(0)=0,f(3)=1')

S.f,S.g

S =

f: [1x1 sym] g: [1x1 sym]

ans =

exp(3*t)/sin(12)/(cosh(9)+sinh(9))*sin(4*t)

ans =

exp(3*t)/sin(12)/(cosh(9)+sinh(9))*cos(4*t)

5.7 利用MAPLE 的深层符号计算资源

5.7.1 经典特殊函数的调用

5.7.2 MAPLE 库函数在线帮助的检索树 5.7.3 发挥MAPLE 的计算潜力

5.7.3.1 调用MAPLE 函数

【例5.7.3.1-1】求递推方程f n f n f n ()()()=----3122的通解。 (1)

gs1=maple('rsolve(f(n)=-3*f(n-1)-2*f(n-2),f(k));')

(2)调用格式二

gs2=maple('rsolve','f(n)=-3*f(n-1)-2*f(n-2)','f(k)')

【例5.7.3.1-2】求f x y z =的Hessian 矩阵。 (1)

FH1=maple('hessian(x*y*z,[x,y,z]);')

(2)

FH2=maple('hessian','x*y*z','[x,y,z]')

(3)

FH=sym(FH2)

【例5.7.3.1-3】求s i n ()x y 22

+在x y ==00,处展开的截断8阶小量的台劳近似式。 (1)

TL1=maple('mtaylor(sin(x^2+y^2),[x=0,y=0],8)')

(2)

maple('readlib(mtaylor);');

TL2=maple('mtaylor(sin(x^2+y^2),[x=0,y=0],8)'); pretty(sym(TL2))

5.7.3.2 运行MAPLE 程序

【例5.7.3.2-1】目标:设计求取一般隐函数0),(=y x f 的导数)(x y '解析解的程序,并要求:该程序能象MAPLE 原有函数一样可被永久调用。 (1)

[DYDZZY.src]

DYDZZY:=proc(f)

# DYDZZY(f) is used to get the derivate of # an implicit function local Eq,deq,imderiv; Eq:='Eq'; Eq:=f;

deq:=diff(Eq,x); readlib(isolate);

imderiv:=isolate(deq,diff(y(x),x)); end;

(2)

procread('DYDZZY.src')

(3)

s1=maple('DYDZZY(x=log(x+y(x)));')

s2=maple('DYDZZY(x^2*y(x)-exp(2*x)=sin(y(x)))') s3=maple('DYDZZY','cos(x+sin(y(x)))=sin(y(x))') (4)

clear maplemex

procread('DYDZZY.src');

maple('save(`DYDZZY.m`)');

(5)

maple('read','`DYDZZY.m`');

ss2=maple('DYDZZY(x^2*y(x)-exp(2*x)=sin(y(x)))') 5.7.3.3数值、符号计算集成M文件的编写

5.8可视化数学分析界面

5.8.1单变量函数分析的交互界面

funtool

图 5.8-1

5.8.2泰勒级数逼近分析界面

taylortool

图5.8-2

实验MATLAB符号运算

实验四 MATLAB 符号运算 一、实验目的 掌握符号变量和符号表达式的创建,掌握MATLAB 的symbol 工具箱的一些基本应用。 二、实验内容 (1) 符号变量、表达式、方程及函数的表示。 (2) 符号微积分运算。 (3) 符号表达式的操作和转换。 (4) 符号微分方程求解。 三、实验步骤 1. 符号运算的引入 在数值运算中如果求x x x πsin lim 0→,则可以不断地让x 接近于0,以求得表达式接近什么数,但是终究不能令0=x ,因为在数值运算中0是不能作除数的。MATLAB 的符号运算能解决这类问题。输入如下命令: >>f=sym('sin(pi*x)/x') >>limit(f,'x',0) >> f=sym('sin(pi*x)/x') f = sin(pi*x)/x >> limit(f,'x',0) ans = Pi 2. 符号常量、符号变量、符号表达式的创建 1) 使用sym( )创建 输入以下命令,观察Workspace 中A 、B 、f 是什么类型的数据,占用多少字节的内存空间。 >> A=sym('1') >> B=sym('x') >> f=sym('2*x^2+3*y-1') >> clear >> f1=sym('1+2') >> f2=sym(1+2) >> f3=sym('2*x+3') >> f4=sym(2*x+3) >> x=1 >> f4=sym(2*x+3) > A=sym('1') A = 1

>> B=sym('x') B = x >> f=sym('2*x^2+3*y-1') f = 2*x^2+3*y-1 >> clear >> f1=sym('1+2') f1 = 1+2 >> f2=sym(1+2) f2 = 3 >> f3=sym('2*x+3') f3 = 2*x+3 >> f4=sym(2*x+3) ??? Undefined function or variable 'x'. >> x=1 x = >> f4=sym(2*x+3) f4 =

实验MATLAB符号计算

实验四符号计算 符号计算的特点:一,运算以推理解析的方式进行,因此不受计算误差积累问题困扰;二,符号计算,或给出完全正确的封闭解,或给出任意精度的数值解(当封闭解不存在时);三,符号计算指令的调用比较简单,经典教科书公式相近;四,计算所需时间较长,有时难以忍受。 在MATLAB中,符号计算虽以数值计算的补充身份出现,但涉及符号计算的指令使用、运算符操作、计算结果可视化、程序编制以及在线帮助系统都是十分完整、便捷的。 MATLAB的升级和符号计算内核Maple的升级,决定着符号计算工具包的升级。但从用户使用角度看,这些升级所引起的变化相当细微。即使这样,本章还是及时作了相应的更新和说明。如MATLAB 6.5+ 版开始启用Maple VIII的计算引擎,从而克服了Maple V计算“广义Fourier变换”时的错误(详见第5.4.1节)。 5.1符号对象和符号表达式 5.1.1符号对象的生成和使用 【例5.1.1-1】符号常数形成中的差异 a1=[1/3,pi/7,sqrt(5),pi+sqrt(5)] % <1> a2=sym([1/3,pi/7,sqrt(5),pi+sqrt(5)]) % <2> a3=sym([1/3,pi/7,sqrt(5),pi+sqrt(5)],'e') % <3> a4=sym('[1/3,pi/7,sqrt(5),pi+sqrt(5)]') % <4> a24=a2-a4 a1 = 0.3333 0.4488 2.2361 5.3777 a2 = [ 1/3, pi/7, sqrt(5), 6054707603575008*2^(-50)] a3 = [ 1/3-eps/12, pi/7-13*eps/165, sqrt(5)+137*eps/280, 6054707603575008*2^(-50)] a4 = [ 1/3, pi/7, sqrt(5), pi+sqrt(5)] a24 = [ 0, 0, 0, 189209612611719/35184372088832-pi-5^(1/2)] 【例5.1.1-2】演示:几种输入下产生矩阵的异同。 a1=sym([1/3,0.2+sqrt(2),pi]) % <1> a2=sym('[1/3,0.2+sqrt(2),pi]') % <2> a3=sym('[1/3 0.2+sqrt(2) pi]') % <3> a1_a2=a1-a2 % a1 = [ 1/3, 7269771597999872*2^(-52), pi] a2 = [ 1/3, 0.2+sqrt(2), pi] a3 = [ 1/3, 0.2+sqrt(2), pi] a1_a2 = [ 0, 1.4142135623730951010657008737326-2^(1/2), 0]

matlab符号运算函数大全

m a t l a b符号运算函数大 全 The Standardization Office was revised on the afternoon of December 13, 2020

算术符号操作 命令 +、-、*、.*、\、.\、/、./、^、.^、’、.’ 功能符号矩阵的算术操作 用法如下: A+B、A-B 符号阵列的加法与减法。 若A与B为同型阵列时,A+B、A-B分别对对应分量进行加减;若A与B中至少有一个为标量,则把标量扩大为与另外一个同型的阵列,再按对应的分量进行加减。 A*B 符号矩阵乘法。 A*B为线性代数中定义的矩阵乘法。按乘法定义要求必须有矩阵 A的列数等于矩阵B的行数。即:若 A n*k* B k*m=(a ij)n*k.*(b ij)k*m= C n*m=(c ij)n*m,则,i=1,2,…,n; j=1,2,…,m。或者至少有一个为标量时,方可进行乘法操作,否则 将返回一出错信息。 A.*B 符号数组的乘法。 A.*B为按参量A与B对应的分量进行相乘。A与B必须为同型 阵列,或至少有一个为标量。即: A n*m.* B n*m=(a ij)n*m.*(b ij)n*m= C n*m=(c ij)n*m,则c ij= a ij* b ij, i=1,2,…,n;j=1,2,…,m。 A\B 矩阵的左除法。 X=A\B为符号线性方程组A*X=B的解。我们指出的是,A\B近 似地等于inv(A)*B。若X不存在或者不唯一,则产生一警告信 息。矩阵A可以是矩形矩阵(即非正方形矩阵),但此时要求方 程组必须是相容的。 A.\B 数组的左除法。 A.\B为按对应的分量进行相除。若A与B为同型阵列时, A n*m.\ B n*m=(a ij)n*m.\(b ij)n*m= C n*m=(c ij)n*m,则c ij= a ij\ b ij,i=1,2,…,n; j=1,2,…,m。若若A与B中至少有一个为标量,则把标量扩大为 与另外一个同型的阵列,再按对应的分量进行操作。 A/B 矩阵的右除法。 X=B/A为符号线性方程组X*A=B的解。我们指出的是,B/A粗 略地等于B*inv(A)。若X不存在或者不唯一,则产生一警告信 息。矩阵A可以是矩形矩阵(即非正方形矩阵),但此时要求方 程组必须是相容的。 A./B 数组的右除法。 A./B为按对应的分量进行相除。若A与B为同型阵列时, A n*m./ B n*m=(a ij)n*m./(b ij)n*m= C n*m=(c ij)n*m,则c ij= a ij/b ij,i=1,2,…,n; j=1,2,…,m。若A与B中至少有一个为标量,则把标量扩大为与 另外一个同型的阵列,再按对应的分量进行操作。 A^B 矩阵的方幂。

MATLAB符号计算实验报告

实验六符号计算 学院:数计学院班级:1003班姓名:黄晓丹学号:1051020144 一、实验目的 1、了解富符号对象和数值对象之间的差别,以及它们之间的互相转换 2、了解符号运算和数值运算的特点、区别和优缺点 3、掌握符号对象的基本操作和运算,以及符号运算的基本运用 二、实验内容 1、符号常数形成和使用 (1)符号常数形成中的差异 >> a1=[1/3,pi/7,sqrt(5),pi+sqrt(5)] a1 = 0.3333 0.4488 2.2361 5.3777 >> a2=sym([1/3,pi/7,sqrt(5),pi+sqrt(5)]) a2 = [ 1/3, pi/7, sqrt(5),

6054707603575008*2^(-50)] >> a3=sym('[1/3,pi/7,sqrt(5),pi+sqrt(5)]') a3 = [ 1/3, pi/7, sqrt(5), pi+sqrt(5)] >> a24=a2-a3 a24 = [ 0, 0, 0, 189209612611719/35184372088832-pi-5^(1/2)] (2)把字符表达式转化为符号变量 >> y=sym('2*sin(x)*cos(x)') y = 2*sin(x)*cos(x) >> y=simple(y)

y = sin(2*x) (3)用符号计算验证三角等式 >> syms fai1 fai2;y=simple(sin(fai1)*cos(fai2)-cos(fai1)*sin(fai2)) y = sin(fai1-fai2) (4)求矩阵的行列式值、逆和特征值 >> syms a11 a12 a21 a22;A=[a11,a12;a21,a22] A = [ a11, a12] [ a21, a22] >> DA=det(A),IA=inv(A),EA=eig(A) DA =

Matlab符号计算(含作业)

第 2 章符号计算 符号计算: 解算数学表达式、方程不是在离散化的数值点上进行,而是凭借一系列恒等式,数学定理,通过推理和演绎,获得解析结果。 符号计算建立在数值完全准确表达和推演严格解析的基础之上,所得结果完全准确。 特点: 一.相对于MATLAB的数值计算“引擎”和“函数库”而言,符号计算的“引擎”和“函数库”是独立的。 二.在相当一些场合,符号计算解算问题的命令和过程,显得比数值计算更自然、更简明。 三.大多数理工科的本科学生在学过高等数学和其他专业基础课以后,比较习惯符号计算的解题理念和模式。 2.1符号对象和符号表达式 MATLAB依靠基本符号对象(包括数字、参数、变量)、运算符及一些预定义函数来构造和衍生符号表达式和符号方程。 2.1.1基本符号对象和运算算符 1.生成符号对象的基本规则 ●任何基本符号对象(数字、参数、变量、表达式、函数)都必须借助 专门的符号命令sym、syms、symfun定义。 ●任何包含符号对象的表达式或方程,将继承符号对象的属性。

2.精准符号数字和符号常数 符号(类)数字的定义: sym(Num) 采用精准数值类数创建精准的符号数字(推荐格式!) sc=sym(Num) 采用精准数值类数创建精准的符号常数sc(推荐格式!) 说明:若输入量Num是精准的浮点数(如0.321、10/3等),能生成精准的符号数字; 若输入量Num是诸如sin(0.3)的数值表达式,那么就只能生成由数字表达式获得的16位精度的近似符号数字。 sym('Num') 采用有理分数字符串创建精准的符号数字 sc=sym('Num') 采用有理分数字符串创建精准的符号常数sc 说明: Num必须处于(英文状态下的)单引号内,构成字符串(关于字符串参见附录A); 只有当字符串数字'Num'采用诸如321/1000、10/3等整数构成的有理分数形式表达时,sym('Num') 才能生成精准的符号数字; 若字符串数字用诸如0.321、3.21e-1等“普通小数或科学记述数”表达,那么只能产生“近似符号数字”。在默认情况下,该近似符号数字为32位精度。 【例2.1-1】 (1)创建完全精准的符号数字或数字表达式 clear all 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 (2)产生具有32位精度的“近似”符号数字(杜绝使用!) S1=sin(sym('0.3')) % sym的输入量是字符串小数,生成32位精度下的 % 近似符号数,进而在sin作用下给出近似符号数。 S2=sin(sym('3e-1')) % syms的输入量是字符串科学记述数。 eRS=vpa(abs(R1-S1),64); disp(['S1属于什么类别?答:',class(S1)]) disp(['S1与R1是否相同?答: ',int2str(logical(R1==S1))]) disp('S1与R1的误差为') disp(double(eRS)) S1 = 0.29552020666133957510532074568503

matlab实验五多项式和符号运算

实验五:Matlab多项式和符号运算 一、实验目的 1.掌握Matlab多项式的运算。 2.了解符号运算。 二、实验内容 1.将多项式()(2)(3)(7)(1) =-+-+化为x的降幂排列。 P x x x x x syms x; y=(x-2)*(x+3)*(x-7)*(x+1); expand(y) ans = x^4-5*x^3-19*x^2+29*x+42 2.求一元高次方程的根。 98765432 --++--++= 53015027313658204100576-28800 x x x x x x x x x syms x y; y=x^9-5*x^8-30*x^7+150*x^6-1365*x^4-820*x^3+410 0*x^2+576*x-2880; solve(y,x) ans = 6.81947687944124431946 1.42761488953013276419+.8192491831*i 2.865487219+2.49263348244446271927*i

-1.887673354+1.812452594*i -.9583509633 -5.922730991 -1.887673354-1.812452594*i 2.865487219-2.49263348244446271927*i 1.42761488953013276419-.8192491831*i 3.求一元高次方程的根,并画出左边多项式函数在[2,2] x∈-区间内的曲线。 42 -+= x x 210 a=[1 0 -2 0 1]; r=roots(a) syms x; x=-2:2; y=[1 0 -2 0 1]; plot(x,y) r = 1.0000 + 0.0000i 1.0000 - 0.0000i -1.0000 -1.0000

完整word版,MATLAB符号运算

符号运算 科学计算包括数值计算和符号计算两种计算,数值计算是近似计算;而符号计算则是绝对精确的计算。 符号变量的生成和使用 1、符号变量、符号表达式和符号方程的生成 (1)、使用sym函数定义符号变量和符号表达式 单个符号变量 sqrt(2) sym(sqrt(2)) %显示精确结果 a=sqrt(sym(2)) %显示精确结果 double(a) sym(2)/sym(3) %显示精确结果 2/5+1/3 sym(2/5+1/3) %显示精确结果 sym(2)/sym(5)+sym(1)/sym(3) %显示精确结果 sym函数定义符号表达式:单个变量定义法,整体定义法 单个变量定义法 a=sym('a') b=sym('b') c=sym('c') x=sym('x') f=a*x^2+b*x+c 整体定义法 f=sym('a*x^2+b*x+c') g=f^2+4*f-2 (2)、使用syms函数定义符号变量和符号表达式 一次可以创建任意多个符号变量syms var1 var2 var3… syms a b c x f=a*x^2+b*x+c g=f^2+4*f-2 (3)、符号方程的生成 函数:数字和变量组陈的代数式 方程:函数和等号组成的等式 用sym函数生成符号方程: equation1=sym('sin(x)+cos(x)=1') 2、符号变量的基本操作 (1)、findsym函数用于寻找符号变量 findsym(f):找出f表达式中的符号变量 findsym(s,n):找出表达式s中n个与x接近的变量 syms a alpha b x1 y findsym(alpha+a+b)

matlab符号计算实验报告

1. 已知x=6,y=5, 利用符号表达式求z =>> syms x >> z=(x+1)/(sqrt(x+3)-sqrt(y)); >> subs(z,x,5) ans =6/(8^(1/2)-y^(1/2)) >> subs(ans,6) ans = 15.8338 2. 分解因式。 (1)x y -44; >> syms x y >> factor(x^4-y^4) ans =(x-y)*(x+y)*(x^2+y^2) (2)x x x +++642 12575151 >> syms x >> factor(125*x^6+75*x^4+15*x^2+1) ans =(5*x^2+1)^3 3. 化简表达式 (1)sin cos cos sin ββββ-1212; >> syms x y >> f=sin(x).*cos(y)-cos(x).*sin(y); >> sfy1=simple(f) 结果:sfy1 =sin(x-y) (2)x x x +++248321 >> syms x >> f=(4*x^2+8*x+3)/(2*x+1);sfy1=simplify(f) sfy1 =2*x+3 4、求下列极限,将完成实验的程序写到文件sy1.m 中: (1) (2) (3) (4) (5) (1)>> syms x >> F1=atan(x)/(x); >> w=limit(F1) w =1 (2)>> syms x F2=((1+x)/(1-x))^(1/x); >> w=limit(F2) w =exp(2) (3)>> syms x F3=(x.*log(1+x))/(sin(x^2)); >> w=limit(F3) w =1 (4)>> syms x F4=atan(x)/(x); >> w=limit(F4,x,inf) w =0 (5)>> syms x F5=(1/(1-x)-1/(1-x^3)); >> w=limit(F5,x,1) w =NaN 5、求下列函数的导数,将完成实验的程序写到文件sy2.m 中: 1、 >> x = sym('x'); >> y1=(cos(x))^3-cos(3*x); >> diff(y1)ans =-3*cos(x)^2*sin(x)+3*sin(3*x) 2、 >> x = sym('x'); >> y2=x.*sin(x).*(log(x)); >> diff(y2)ans =sin(x)*log(x)+x*cos(x)*log(x)+sin(x) 3、 >> x = sym('x'); >> y3=(x.*exp(x)-1)/sin(x); >> diff(y3) ans =(exp(x)+x*exp(x))/sin(x)-(x*exp(x)-1)/sin(x)^2*cos(x) 4、 x x x x F 1011lim 2??? ??-+=→3 1115lim()11x F x x →=---20sin )1ln(lim 3x x x F x +=→x x F x arctan lim 10→=arctan 4lim x x F x →∞=x x y 3cos cos 13-=x x x y ln sin 2=x xe y x sin 13-=cos x y e x =

matlab符号运算符

Matlab符号运算符的使用 一、&&/||/&/| |:数组逻辑或 ||:先决逻辑或 &:数组逻辑与 &&:先决逻辑与 &&和||被称为&和|的short circuit形式。 先决逻辑符号含义: 先判断左边是否为真;若为真,则不再判断右边;若为假,才继续进行或运算 先判断左边是否为假;若为假,则不再判断右边;若为真,才继续进行与运算两种运算符号的区别: 先决逻辑运算的运算对象只能是标量 数组逻辑运算可为任何维数组,运算符两边维数要相同 举例分析: A&B :首先判断A的逻辑值,然后判断B的值,然后进行逻辑与的计算。 A&&B:首先判断A的逻辑值,如果A的值为假,就可以判断整个表达式的值为假, 就可以判断整个表达式的值为假,就不需要再判断B的值。这种用法非常有用, 如果A是一个计算量较小的函数,B是一个计算量较大的函数,那么首先判断A 对减少计算量是有好处的。 另外这也可以防止类似被0除的错误。 Matlab中的if和while语句中的逻辑与和逻辑或都是默认使用short-circuit形式。// 这可能就是有时候用&和| 会报错的原因。

二、系统结构体内的变量 一般都是小写。 matlab区分大小写。 三、== 表示逻辑相等,返回结果,相等为1,不等为0。 四、.*(times)点乘 times Array multiply 数组乘 Syntax c = a.*b c = times(a,b) Description c = a.*b multiplies arrays a an d b element-by-element and returns th e result in c. Inputs a and b must have the same size unless one is a scalar. 注释:a、b要同尺寸,或其中一个为标量。 c = times(a,b) is calle d for th e syntax a.*b when a or b is an object. Example a = [1 2 3]'; b = [5 6 7]'; c = a.*b; 五、矩阵或向量共轭转置“’”和转置“.’” 若矩阵由实数构成,二者作用一样;

实验3 Matlab 符号运算及求函数极值

实验3 Matlab 符号运算及求函数极值一、实验目的和要求 掌握用Matlab软件进行符号运算以及求函数的极值。 二、实验环境 Windows系列操作系统,Matlab软件。 三、实验内容 1.用MATLAB进行符号运算; 2.编程求函数的极值。 四、实验步骤 3.开启软件平台——Matlab,开启Matlab编辑窗口; 4.根据求解步骤编写M文件; 5.保存文件并运行; 6.观察运行结果(数值或图形); 7.根据观察到的结果和体会写出实验报告。 五、示例 1.计算一元函数的极值 例1求 2 2 344 1 x x y x x ++ = ++ 的极值 解首先建立函数关系: s yms x y=(3*x^2+4*x+4)/( x^2+x+1); 然后求函数的驻点: dy=diff(y); xz=solve(dy) xz= [0] [-2] 知道函数有两个驻点x 1=0和x 2 =-2, 接下来我们通过考察函数的图形,则它的极值情况和许多其它特性是一目了然的。而借助MATLAB的作图功能,我们很容易做到这一点。 例2 画出上例中函数的图形

解 syms x y=(3*x^2+4*x+4)/( x^2+x+1); 得到如下图形 ezplot(y) 2.计算二元函数的极值 MATLAB 中主要用diff 求函数的偏导数,用jacobian 求Jacobian 矩阵。 例1 求函数42823z x xy y =-+-的极值点和极值. 首先用diff 命令求z 关于x,y 的偏导数 >>clear; syms x y; >>z=x^4-8*x*y+2*y^2-3; >>diff(z,x) >>diff(z,y) 结果为 ans =4*x^3-8*y ans =-8*x+4*y 即348,84z z x y x y x y ??=-=-+??再求解方程,求得各驻点的坐标。一般方程组的符号解用solve 命令,当方程组不存在符号解时,solve 将给出数值解。求解方程的MA TLAB 代码为:

MATLAB实验——符号运算讲解

实验一符号运算 班级:电气4班姓名:叶元亮学号:B2012052409 一、实验目的 1、了解符号、数值、字符等数据类型的差别 2、了解符号运算的特点、优缺点 3、掌握符号变量的创建和运算,以及其运算的基本应用 4、掌握基本的符号绘图指令 二、实验内容 1、指出下面的 M1,M2,M3 分别是什么,并上机验证。 取a=1、b=2、c=3、d=4,M1=[a,b;c,d],M2='[a,b;c,d]',M3=sym('[a,b;c,d]'); >> a=1,b=2,c=3,d=4 a = 1 b = 2 c = 3 d = 4 >> M1=[a,b;c,d] M1 =

1 2 3 4 >> M2='[a,b;c,d]' M2 = [a,b;c,d] >> M3=sym('[a,b;c,d]') M3 = [ a, b] [ c, d] 结论:M1是矩阵,2是字符串,M3是字符变量。 2、下面2种取值情况下,计算b a b a- + 并赋给相应情况下的c1、c2,问c1、c2相等吗,为什么?上机验证。 (1) a1=1010; b1=10-10; (2)将a1、a2作为符号变量赋给a2、b2; >> a1=1e10; b1=1e-10; >> c1=(a1+b1-a1)/b1 c1 = >> a2=sym(a1); b2=sym(b1); >> c2=(a2+b2-a2)/b2 c2 = 1

结果:c1~=c2,因为c1=0,c2=1,a1、b1是具体的数值,a2、b2是符号变量。 3、符号表达式中自由变量的确定生成符号变量a 、b 、x 、X 、Y 、 k=3、z=a y w c sin +,表达式为 Y k bx azX f )(2++=。 (1)找出f 中的全部自由符号变量 (2)在f 中确定最优先的自由符号变量 (3)在f 中确定2个和3个自由变量时的执行情况 (4)试通过对各符号变量与x 的ASCII 值做绝对差值,分析自 由变量优秀顺序,能得出什么结论? >> syms a b x X Y k=sym('3'); z=sym('c*sqrt(w)+y*sin(a)'); f=a*z*X+(b*x^2+k)*Y; >> findsym(f) ans = X, Y, a, b, c, w, x, y >> findsym(f,1) ans = x >> findsym(f,2) ans = x,y

实验二2MATLAB地符号计算与可视化

实验二MATLAB的符号计算与可视化 1:完成教材实验三第1节“1.创建符号表达式和符号表达式的操作”中(1)-(5)部分的内容,分别用sym和syms创建符号表达式f和g,并对它们进行相关操作,思考每一条命令的作用是什么,并提交命令行和结果; (1)创建符号变量。 ①使用sym命令创建符号表达式: >> f=sym('sin(x)') f = sin(x) >> g=sym('y/exp(-2*t)') g = y*exp(2*t) ②使用syms命令创建符号表达式: >> syms x y t >> f=sym(sin(x)) f = sin(x) >> g=sym(y/exp(-2*t)) g = y*exp(2*t) (2):自由变量的确定:

>> symvar(g) ans = [ t, y] >> symvar(g,1) ans = y >> findsym(g,2) ans = y,t (3):用常数替换符号变量: >> x=0:10; >> y=subs(f,x) y = Columns 1 through 8 0 0.8415 0.9093 0.1411 -0.7568 -0.9589 -0.2794 0.6570 Columns 9 through 11 0.9894 0.4121 -0.5440 练习:用y替换x,查看结果及其数据类型。 z=subs(f,y) z = Columns 1 through 8

0 0.7456 0.7891 0.1407 -0.6866 -0.8186 -0.2758 0.6107 Columns 9 through 11 0.8357 0.4006 -0.5176 >> class(z) ans = double (4):符号对象与数值的转换和任意精度控制: >> f1=subs(f,'5') f1 = sin(5) >> y1=double(f1) y1 = -0.9589 >> y2=eval(f1) y2 = -0.9589 练习:将y1用sym函数转换为符号对象,并用’d’,’f’,’e’,’r’4种格式表示。>> y2=sym(y1,'d') y2 = -0.95892427466313845396683746002964

MATLAB符号计算函数用法总结

MATLAB符号计算函数用法总结 符号计算是对未赋值的符号对象(可以是常数、变量、表达式)进行运算和处理。MTALAB具有符号数学工具箱(Symbolic Math toolbox),将符号运算结合到MATLAB的属具运算环境。符号数学工具箱是建立在Maple软件基础上的。 算术符号操作: 命令有:+、-、*、.*、\、.\、/、./、^、.^、’、.’ 用法如下: A+B、A-B符号阵列的加法和减法。 若A与B为同型阵列时,A+B、A-B分别对对应分量进行加减;若A与B中至少有一个为标量,则把标量扩大为与另外一个同型的阵列,再按对应的分量进行加减。 A*B符号矩阵乘法。 A*B为线性代数中定义的矩阵乘法。按乘法定义要求必须有矩阵A的列数等于矩阵B的行数。即:若 An*k*Bk*m=(aij)n*k.*(bij)k*m=Cn*m=(cij)n*m,则,i=1,2,…,n;j=1,2,…,m。 或者至少有一个为标量时,方可进行乘法操作,否则将返回一出错 信息。 A.*B符号数组的乘法。 A.*B为按参量A与B对应的分量进行相乘。A与B必须为同型阵列,或至少有一个为标量。即: An*m.*Bn*m=(aij)n*m.*(bij)n*m=Cn*m=(cij)n*m,则cij= aij* bij,i=1,2,…,n; j=1,2,…,m。 A\B矩阵的左除法。 X=A\B为符号线性方程组A*X=B的解。我们指出的是,A\B近似地等于inv(A)*B。若X不存在或者不唯一,则产生一警告信息。矩阵A可以是矩形矩阵(即非正方形矩阵),但此时要

求方程组必须是相容的。 A.\B数组的左除法。 A.\B为按对应的分量进行相除。若A与B为同型阵列时, An*m.\Bn*m=(aij)n*m.\(bij)n*m=Cn*m=(cij)n*m,则cij= aij\ bij,i=1,2,…,n; j=1,2,…,m。若若A与B中至少有一个为标量,则把标量扩大为与另外一个同型的阵列,再按对应的分量进行操作。 A/B矩阵的右除法。 X=B/A为符号线性方程组X*A=B的解。我们指出的是,B/A粗略地等于B*inv(A)。若X不存在或者不唯一,则产生一警告信息。矩阵A可以是矩形矩阵(即非正方形矩阵),但此时要求方程组必须是相容的。 A./B数组的右除法。 A./B为按对应的分量进行相除。若A与B为同型阵列时, An*m./Bn*m=(aij)n*m./(bij)n*m=Cn*m=(cij)n*m,则cij= aij/bij,i=1,2,…,n; j=1,2,…,m。若A与B中至少有一个为标量,则把标量扩大为与另外一个同型的阵列,再按对应的分量进行操作。 A^B矩阵的方幂。 计算矩阵A的整数B次方幂。若A为标量而B为方阵,A^B用方阵B的特征值与特征向量计算数值。若A与B同时为矩阵,则返回一错误信息。 A.^B数组的方幂。 A.^B为按A与B对应的分量进行方幂计算。若A与B为同型阵列时, An*m..^Bn*m=(aij)n*m..^(bij)n*m=Cn*m=(cij)n*m,则cij= aij^bij,i=1,2,…,n; j=1,2,…,m。若A与B中至少有一个为标量,则把标量扩大为与另外一个同型的阵列,再按对应的分量进行操作。 A'矩阵的Hermition转置。 若A为复数矩阵,则A'为复数矩阵的共轭转置。即,若A=(aij)=(xij+i*yij),则 。

matlab符号运算函数大全

3.1算术符号操作 命令+、-、*、.*、\、.\、/、./、^、.^、’、.’ 功能符号矩阵的算术操作 用法如下: A+B、A-B 符号阵列的加法与减法。 若A与B为同型阵列时,A+B、A-B分别对对应分量进行加减;若A与B中至少有一个为标量,则把标量扩大为与另外一个同型的阵列,再按对应的分量进行加减。 A*B 符号矩阵乘法。 A*B为线性代数中定义的矩阵乘法。按乘法定义要求必须有矩阵A的列数等于矩 阵B的行数。即:若A n*k*B k*m=(a ij)n*k.*(b ij)k*m=C n*m=(c ij)n*m,则,i=1,2,…,n; j=1,2,…,m。或者至少有一个为标量时,方可进行乘法操作,否则将返回一出错信 息。 A.*B 符号数组的乘法。 A.*B为按参量A与B对应的分量进行相乘。A与B必须为同型阵列,或至少有一 个为标量。即:A n*m.*B n*m=(a ij)n*m.*(b ij)n*m=C n*m=(c ij)n*m,则c ij= a ij* b ij,i=1,2,…,n; j=1,2,…,m。 A\B 矩阵的左除法。 X=A\B为符号线性方程组A*X=B的解。我们指出的是,A\B近似地等于inv(A)*B。 若X不存在或者不唯一,则产生一警告信息。矩阵A可以是矩形矩阵(即非正方 形矩阵),但此时要求方程组必须是相容的。 A.\B 数组的左除法。 A.\B为按对应的分量进行相除。若A与B为同型阵列时, A n*m.\ B n*m=(a ij)n*m.\(b ij)n*m= C n*m=(c ij)n*m,则c ij= a ij\ b ij,i=1,2,…,n;j=1,2,…,m。若若 A与B中至少有一个为标量,则把标量扩大为与另外一个同型的阵列,再按对应 的分量进行操作。 A/B 矩阵的右除法。 X=B/A为符号线性方程组X*A=B的解。我们指出的是,B/A粗略地等于B*inv(A)。 若X不存在或者不唯一,则产生一警告信息。矩阵A可以是矩形矩阵(即非正方 形矩阵),但此时要求方程组必须是相容的。 A./B 数组的右除法。 A./B为按对应的分量进行相除。若A与B为同型阵列时, A n*m./ B n*m=(a ij)n*m./(b ij)n*m= C n*m=(c ij)n*m,则c ij= a ij/b ij,i=1,2,…,n;j=1,2,…,m。若A 与B中至少有一个为标量,则把标量扩大为与另外一个同型的阵列,再按对应的 分量进行操作。 A^B 矩阵的方幂。 计算矩阵A的整数B次方幂。若A为标量而B为方阵,A^B用方阵B的特征值 与特征向量计算数值。若A与B同时为矩阵,则返回一错误信息。 A.^B 数组的方幂。 A.^B为按A与B对应的分量进行方幂计算。若A与B为同型阵列时, A n*m..^ B n*m=(a ij)n*m..^(b ij)n*m= C n*m=(c ij)n*m,则c ij= a ij^b ij,i=1,2,…,n;j=1,2,…,m。若 A与B中至少有一个为标量,则把标量扩大为与另外一个同型的阵列,再按对应 的分量进行操作。

实验四 MATLAB符号运算

实验四MATLAB符号运算 一、实验目的: 1、掌握定义符号对象的方法; 2、掌握符号表达式的运算法则以及符号矩阵运算。 3、掌握求符号函数极限及导数的方法。 4、掌握求符号函数定积分和不定积分的方法。 二、实验原理 1、符号常量、符号变量、符号表达式的创建 (1) 使用sym( )创建 输入以下命令,观察Workspace 中A、B、f是什么类型的数据,占用多少字节的内存空间。 >>A=sym('1') %符号常量 >>B=sym('x') %符号变量 >>f=sym('2*x^2+3y-1') %符号表达式 >>clear >>f1=sym('1+2') %有单引号,表示字符串 >>f2=sym(1+2) %无单引号 >>f3=sym('2*x+3') >>f4=sym(2*x+3) %为什么会出错 >>x=1 >>f4=sym(2*x+3) 通过看MATLAB 的帮助可知,sym( )的参数可以是字符串或数值类型,无论是哪种类型都会生成符号类型数据。 (2) 使用syms 创建 >>clear >>syms x y z %注意观察x,y,z都是什么类型的,它们的内容是什么 >>x,y,z >>f1=x^2+2*x+1 >>f2=exp(y)+exp(z)^2 >>f3=f1+f2 通过以上实验,知道生成符号表达式的第二种方法:由符号类型的变量经过运算(加减乘除等)得到。又如: >>f1=sym('x^2+y +sin(2)') >>syms x y >>f2=x^2+y+sin(2) >>x=sym('2') , y=sym('1') >>f3=x^2+y+sin(2)

2014秋实验四_MATLAB的符号计算二

2014年10月26日星期日 湖北科技学院 MATLAB 专业:电气工程及其自动化班级:电气一班 姓名:尹锥(133521015)指导教师:刘芳华 电子与信息工程学院

实验四MATLAB的符号计算(二) 一、实验目的 1.掌握MATLAB7.0 subs、simple、simplify、finverse等函数的应用; 2.掌握利用MATLAB7.0计算极限和级数的方法,计算复合、反函数的方法; 3.了解利用MATLAB7.0计算taylor级数。 4.掌握利用MATLAB7.0来求解常微分方程的方法。 5.掌握利用MATLAB7.0符号计算中的ezplot及ezplot3绘图方法。 二、实验内容 1.设x为符号变量, 42 ()21 f x x x =++,32 ()635 g x x x x =+++,试进行如下运算。 (1) ()() f x g x +, (2) ()() f x g x ?, (3)对 () f x进行因式分解, (4)求 () g x的反函数。 2

2.(1)指出下面程序中的f1、f2、f3、f4、f5的值。f5=subs(f,{a,x},{0:6,0:pi/6:pi}) 3

(2)指出下面替换的结果。 3. 用符号计算验证三角等式: sin(?1)cos(?2)-cos(?1)sin(?2) =sin(?1-?2) 4

4.设,求 7.求微分方程的解:y'''-y''=x,y''(2)=4,y'(1)=7,y(1)=8 5

8.计算函数级数 2 1 n x S n ∞ = =∑ 9. f(x)=e x分别求5阶、6阶泰勒展开式 10.符号函数绘图法绘制函数x=sin(3t)cos(t),y=sin(3t)sin(t)的图形,t的变化范围为[0,2π]。 6

实验 MATLAB符号运算功能

实验3 MATLAB 符号运算功能 实验目的:掌握MATLAB 符号运算功能的基本使用方法 1.符号矩阵的建立及符号矩阵的运算; 2.符号矩阵的简化; 3.符号矩阵的极限和微积分; 4.代数方程求解; 5.一元函数图象简易画法. 实验内容: 1. 设)1()(--=x e x x g x 1) 将)(x g 写成MATLAB 符号表达式; 2) 求出符号表达式)('x g ; 3) 利用"subs "命令求出)4(g 和)4('g ; 4) 利用"plot "命令画出函数)(x g 在区间[-3,3]上的光滑图象; 5) 利用"ezplot "命令画出函数)(x g 在区间[-3,3]上的图象并与4)所得结果进行比较. 比较. 运行命令: syms x; g=[x*(exp(x)-x-1)] diff(g) G=subs(g,[4]) G1=subs(diff(g),4) x=-3:0.01:3; y=x.*(exp(x)-x-1); plot(x,y) ezplot(g,[-3,3]) 程序运行结果: g = x*(exp(x)-x-1) ans = exp(x)-x-1+x*(exp(x)-1) G = 198.3926 G1 =

263.9908 2. 设)1()(1--=x e x x g x ,1)(22+=x x g 1)利用"ezplot "命令画图估计函数)(1x g 与)(2x g 图象交点的x 值; 2) 利用"solve "命令求出函数)(1x g 与)(2x g 图象交点处x 的精确值. 3. 说明下面程序中每个命令的作用: syms x h f = exp(sin(x)) m = (subs(f, x+h)-f)/h f1 = limit(m, h, 0) subs(f1, pi) X = -10:.05:10; F = subs(f, X); F1 = subs(f1, X); plot(X, F, ’b’, X, F1, ’r’) 解释程序运行的结果. 4. 设)3cos ()(+-=x e x x f x 1) 利用定积分的定义(无限求和)计算?3 0)(dx x f 的近似值(有限求和),改变求和的项数对结果的变化进行比较; 2) 利用符号积分的命令"int "计算?3 0)(dx x f 的值,并与1)所得结果进行比较。

matlab符号运算函数大全

3.1 算术符号操作 命令+、-、*、.*、\、.\、/、./、^、.^、’、.’ 功能符号矩阵的算术操作 用法如下: A+B、A-B 符号阵列的加法与减法。 若A与B为同型阵列时,A+B、A-B分别对对应分量进行加减;若A与B中至少有一个为标量,则把标量扩大为与另外一个同型的阵列,再按对应的分量进行加减。 A*B 符号矩阵乘法。 A*B为线性代数中定义的矩阵乘法。按乘法定义要求必须有矩阵A 的列数等于矩阵B的行数。即:若 A n*k* B k*m=(a ij)n*k.*(b ij)k*m= C n*m=(c ij)n*m,则,i=1,2,…,n; j=1,2,…,m。或者至少有一个为标量时,方可进行乘法操作,否则将 返回一出错信息。 A.*B 符号数组的乘法。 A.*B为按参量A与B对应的分量进行相乘。A与B必须为同型阵列, 或至少有一个为标量。即: A n*m.* B n*m=(a ij)n*m.*(b ij)n*m= C n*m=(c ij)n*m,则c ij= a ij* b ij, i=1,2,…,n;j=1,2,…,m。 A\B 矩阵的左除法。

X=A\B为符号线性方程组A*X=B的解。我们指出的是,A\B近似 地等于inv(A)*B。若X不存在或者不唯一,则产生一警告信息。矩 阵A可以是矩形矩阵(即非正方形矩阵),但此时要求方程组必须 是相容的。 A.\B 数组的左除法。 A.\B为按对应的分量进行相除。若A与B为同型阵列时, A n*m.\ B n*m=(a ij)n*m.\(b ij)n*m= C n*m=(c ij)n*m,则c ij= a ij\ b ij, i=1,2,…,n;j=1,2,…,m。若若A与B中至少有一个为标量,则把标 量扩大为与另外一个同型的阵列,再按对应的分量进行操作。 A/B 矩阵的右除法。 X=B/A为符号线性方程组X*A=B的解。我们指出的是,B/A粗略 地等于B*inv(A)。若X不存在或者不唯一,则产生一警告信息。矩 阵A可以是矩形矩阵(即非正方形矩阵),但此时要求方程组必须 是相容的。 A./B 数组的右除法。 A./B为按对应的分量进行相除。若A与B为同型阵列时, A n*m./ B n*m=(a ij)n*m./(b ij)n*m= C n*m=(c ij)n*m,则c ij= a ij/b ij,i=1,2,…,n; j=1,2,…,m。若A与B中至少有一个为标量,则把标量扩大为与另 外一个同型的阵列,再按对应的分量进行操作。 A^B 矩阵的方幂。

相关文档