matlab教程详解 (5)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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(Leabharlann Baidu),g2=simple(g1)
g1 =
(2*x+1)/x
g2 =
2+1/x
【例5.2.1-6】简化
syms x;ff=cos(x)+sqrt(-sin(x)^2);
ssfy1=simplify(ff),ssfy2=simplify(ssfy1)
ssfy1 =
cos(x)+(-sin(x)^2)^(1/2)
ssfy2 =
cos(x)+(-sin(x)^2)^(1/2)
gg1=simple(ff),gg2=simple(gg1)
第五章
符号计算的特点:一,运算以推理解析的方式进行,因此不受计算误差积累问题困扰;二,符号计算,或给出完全正确的封闭解,或给出任意精度的数值解(当封闭解不存在时);三,符号计算指令的调用比较简单,经典教科书公式相近;四,计算所需时间较长,有时难以忍受。
在MATLAB中,符号计算虽以数值计算的补充身份出现,但涉及符号计算的指令使用、运算符操作、计算结果可视化、程序编制以及在线帮助系统都是十分完整、便捷的。
ans =
(x-a)*(x+a)
(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】写出矩阵 各元素的分子、分母多项式
【例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
[ 3 2 ]
[ x + 5 x - 3 ]
[3/2 -----------------]
[ (2 x - 1) (x - 1)]
[ ]
[ 4 ]
[---- 3 x + 4 ]
[ 2 ]
[ x ]
(2)
pretty(simplify(n./d))
【例5.2.1-5】简化
(1)
syms x;f=(1/x^3+6/x^2+12/x+8)^(1/3);
5.2.4
5.2.4.1
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 =
.543211520368250e-16
p2=vpa(p0)
Yf =
2*A*sin(1/2*tao*w)/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)
Mn =
1 2
3 4
Mc =
[a,b;c,d]
Ms =
[ a, b]
Ms 2x2 408 sym object
Grand total is 21 elements using 458 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)');
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的置换规则。
[ 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 =
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)
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
(2)
fg2=compose(f,g,u,fai,t)
fg2 =
x/(cos(y+t)^2+1)
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>
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】验证积分 。
syms A t tao w;yf=int(A*exp(-i*w*t),t,-tao/2,tao/2);Yf=simple(yf)
y =
sin(2*x)
【例5.1.1-4】用符号计算验证三角等式。
syms fai1fai2;y=simple(sin(fai1)*cos(fai2)-cos(fai1)*sin(fai2))
y =
sin(fai1-fai2)
【例5.1.1-5】求矩阵的行列式值、逆和特征根
syms a11 a12 a21 a22;A=[a11,a12;a21,a22]
(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]
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
[ 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)
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>
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 =
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>
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)]
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)]
MATLAB的升级和符号计算内核Maple的升级,决定着符号计算工具包的升级。但从用户使用角度看,这些升级所引起的变化相当细微。即使这样,本章还是及时作了相应的更新和说明。如MATLAB 6.5+版开始启用MapleVIII的计算引擎,从而克服了MapleV计算“广义Fourier变换”时的错误(详见第5.4.1节)。
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)
(1)
syms a x;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>
EXPR=a*z*X+(b*x^2+k)*Y;
(2)
findsym(EXPR)
ans =
X, Y, a, b, c, delta, theta, x, y
(3)
findsym(EXPR,1)
ans =
x
(4)
findsym(EXPR,2),findsym(EXPR,3)
ans =
x,y
ans =
x,y,theta
g =
x^(1/2)
fg=simple(compose(g,f))%验算g(f(x))是否等于x
fg =
x
【例5.2.2-2】求 的复合函数
(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)
gg1 =
cos(x)+i*sin(x)
gg2 =
exp(i*x)
5.2.2
【例5.2.2-1】求 的反函数
syms x;f=x^2;g=finverse(f)
Warning: finverse(x^2) is not unique.
> In D:\MATLAB6P5\toolbox\symbolic\@sym\finverse.m at line 43
sfy1 =
((2*x+1)^3/x^3)^(1/3)
sfy2 =
((2*x+1)^3/x^3)^(1/3)
(2)
g1=simple(Leabharlann Baidu),g2=simple(g1)
g1 =
(2*x+1)/x
g2 =
2+1/x
【例5.2.1-6】简化
syms x;ff=cos(x)+sqrt(-sin(x)^2);
ssfy1=simplify(ff),ssfy2=simplify(ssfy1)
ssfy1 =
cos(x)+(-sin(x)^2)^(1/2)
ssfy2 =
cos(x)+(-sin(x)^2)^(1/2)
gg1=simple(ff),gg2=simple(gg1)
第五章
符号计算的特点:一,运算以推理解析的方式进行,因此不受计算误差积累问题困扰;二,符号计算,或给出完全正确的封闭解,或给出任意精度的数值解(当封闭解不存在时);三,符号计算指令的调用比较简单,经典教科书公式相近;四,计算所需时间较长,有时难以忍受。
在MATLAB中,符号计算虽以数值计算的补充身份出现,但涉及符号计算的指令使用、运算符操作、计算结果可视化、程序编制以及在线帮助系统都是十分完整、便捷的。
ans =
(x-a)*(x+a)
(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】写出矩阵 各元素的分子、分母多项式
【例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
[ 3 2 ]
[ x + 5 x - 3 ]
[3/2 -----------------]
[ (2 x - 1) (x - 1)]
[ ]
[ 4 ]
[---- 3 x + 4 ]
[ 2 ]
[ x ]
(2)
pretty(simplify(n./d))
【例5.2.1-5】简化
(1)
syms x;f=(1/x^3+6/x^2+12/x+8)^(1/3);
5.2.4
5.2.4.1
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 =
.543211520368250e-16
p2=vpa(p0)
Yf =
2*A*sin(1/2*tao*w)/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)
Mn =
1 2
3 4
Mc =
[a,b;c,d]
Ms =
[ a, b]
Ms 2x2 408 sym object
Grand total is 21 elements using 458 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)');
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的置换规则。
[ 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 =
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)
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
(2)
fg2=compose(f,g,u,fai,t)
fg2 =
x/(cos(y+t)^2+1)
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>
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】验证积分 。
syms A t tao w;yf=int(A*exp(-i*w*t),t,-tao/2,tao/2);Yf=simple(yf)
y =
sin(2*x)
【例5.1.1-4】用符号计算验证三角等式。
syms fai1fai2;y=simple(sin(fai1)*cos(fai2)-cos(fai1)*sin(fai2))
y =
sin(fai1-fai2)
【例5.1.1-5】求矩阵的行列式值、逆和特征根
syms a11 a12 a21 a22;A=[a11,a12;a21,a22]
(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]
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
[ 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)
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>
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 =
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>
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)]
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)]
MATLAB的升级和符号计算内核Maple的升级,决定着符号计算工具包的升级。但从用户使用角度看,这些升级所引起的变化相当细微。即使这样,本章还是及时作了相应的更新和说明。如MATLAB 6.5+版开始启用MapleVIII的计算引擎,从而克服了MapleV计算“广义Fourier变换”时的错误(详见第5.4.1节)。
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)
(1)
syms a x;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>
EXPR=a*z*X+(b*x^2+k)*Y;
(2)
findsym(EXPR)
ans =
X, Y, a, b, c, delta, theta, x, y
(3)
findsym(EXPR,1)
ans =
x
(4)
findsym(EXPR,2),findsym(EXPR,3)
ans =
x,y
ans =
x,y,theta
g =
x^(1/2)
fg=simple(compose(g,f))%验算g(f(x))是否等于x
fg =
x
【例5.2.2-2】求 的复合函数
(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)
gg1 =
cos(x)+i*sin(x)
gg2 =
exp(i*x)
5.2.2
【例5.2.2-1】求 的反函数
syms x;f=x^2;g=finverse(f)
Warning: finverse(x^2) is not unique.
> In D:\MATLAB6P5\toolbox\symbolic\@sym\finverse.m at line 43