北航-MATLAB教程答案(张志涌).doc
《北航-MATLAB教程答案(张志涌).doc》由会员分享,可在线阅读,更多相关《北航-MATLAB教程答案(张志涌).doc(19页珍藏版)》请在冰豆网上搜索。
1数字1.5e2,1.5e3中的哪个与1500相同吗?
1.5e3
2请指出如下5个变量名中,哪些是合法的?
abcd-2 xyz_3 3chan a变量 ABCDefgh
2、5是合法的。
3在MATLAB环境中,比1大的最小数是多少?
1+eps
4设a=-8,运行以下三条指令,问运行结果相同吗?
为什么?
w1=a^(2/3) w2=(a^2)^(1/3) w3=(a^(1/3))^2
w1=-2.0000+3.4641i;w2=4.0000;w3=-2.0000+3.4641i
5指令clear,clf,clc各有什么用处?
clear 清除工作空间中所有的变量。
clf 清除当前图形。
clc 清除命令窗口中所有显示。
第二章
1说出以下四条指令产生的结果各属于哪种数据类型,是“双精度”对象,还是“符号”符号对象?
3/7+0.1双;sym(3/7+0.1)符;sym('3/7+0.1')符;;vpa(sym(3/7+0.1))符;
2在不加专门指定的情况下,以下符号表达式中的哪一个变量被认为是自由符号变量.
sym('sin(w*t)'),sym('a*exp(-X)'),sym('z*exp(j*th)')
symvar(sym('sin(w*t)'),1)waz
3
(1)试写出求三阶方程正实根的程序。
注意:
只要正实根,不要出现其他根。
(2)试求二阶方程在时的根。
(1)reset(symengine)
symsxpositive
solve(x^3-44.5)
ans=
(2^(2/3)*89^(1/3))/2
(2)求五阶方程的实根
symsapositive %注意:
关于x的假设没有去除
solve(x^2-a*x+a^2)
Warning:
Explicitsolutioncouldnotbefound.
>Insolveat83
ans=
[emptysym]
symsxclear
symsapositive
solve(x^2-a*x+a^2)
ans=
a/2+(3^(1/2)*a*i)/2
a/2-(3^(1/2)*a*i)/2
4观察一个数(在此用@记述)在以下四条不同指令作用下的异同。
a=@,b=sym(@), c=sym(@,'d'),d=sym('@')
在此,@分别代表具体数值7/3,pi/3,pi*3^(1/3);而异同通过vpa(abs(a-d)),vpa(abs(b-d)),vpa(abs(c-d))等来观察。
l理解准确符号数值的创建法。
l高精度误差的观察。
(1)x=7/3
x=7/3;a=x,b=sym(x),c=sym(x,'d'),d=sym('7/3'),
a=
2.3333
b=
7/3
c=
2.3333333333333334813630699500209
d=
7/3
v1=vpa(abs(a-d)),v2=vpa(abs(b-d)),v3=vpa(abs(c-d))
v1=
0.0
v2=
0.0
v3=
0.00000000000000014802973661668756666666667788716
(2)x=pi/3
x=pi/3;a=x,b=sym(x),c=sym(x,'d'),d=sym('pi/3'),
a=
1.0472
b=
pi/3
c=
1.047197551196597631317786181171
d=
pi/3
v1=vpa(abs(a-d)),v2=vpa(abs(b-d)),v3=vpa(abs(c-d))
v1=
0.0
v2=
0.0
v3=
0.00000000000000011483642827992216762806615818554
(3)x=pi*3^(1/3)
x=pi*3^(1/3);a=x,b=sym(x),c=sym(x,'d'),d=sym('pi*3^(1/3)')
a=
4.5310
b=
1275352044764433/281474976710656
c=
4.5309606547207899041040946030989
d=
pi*3^(1/3)
v1=vpa(abs(a-d)),v2=vpa(abs(b-d)),v3=vpa(abs(c-d))
v1=
0.00000000000000026601114166290944374842393221638
v2=
0.00000000000000026601114166290944374842393221638
v3=
0.0000000000000002660111416629094726767991785515
5求符号矩阵的行列式值和逆,所得结果应采用“子表达式置换”简洁化。
l理解subexpr指令。
A=sym('[a11a12a13;a21a22a23;a31a32a33]')
DA=det(A)
IA=inv(A);
[IAs,d]=subexpr(IA,d)
A=
[a11,a12,a13]
[a21,a22,a23]
[a31,a32,a33]
DA=
a11*a22*a33-a11*a23*a32-a12*a21*a33+a12*a23*a31+a13*a21*a32-a13*a22*a31
IAs=
[d*(a22*a33-a23*a32),-d*(a12*a33-a13*a32),d*(a12*a23-a13*a22)]
[-d*(a21*a33-a23*a31),d*(a11*a33-a13*a31),-d*(a11*a23-a13*a21)]
[d*(a21*a32-a22*a31),-d*(a11*a32-a12*a31),d*(a11*a22-a12*a21)]
d=
1/(a11*a22*a33-a11*a23*a32-a12*a21*a33+a12*a23*a31+a13*a21*a32-a13*a22*a31)
6求的符号解,并进而用该符号解求,,的准确值。
lsymsum,subs的应用。
l从实例中,感受指令所给出的关于符号解的含义。
symsxk
f=x^(k);
Z1=symsum(f,k,0,inf)
Z1=
piecewise([1<=x,Inf],[abs(x)<1,-1/(x-1)])
subs(Z1,x,{sym('-1/3'),sym('1/pi'),sym('3')})
ans=
[3/4,-1/(1/pi-1),Inf]
7对于,求。
(提示:
理论结果为)
l符号变量的限定性定义的作用。
symsk;
x=sym('x','positive');
f_k=2/(2*k+1)*((x-1)/(x+1))^(2*k+1);
s=simple(symsum(f_k,k,0,inf))%结果与理论值lnx相符!
s=
piecewise([abs(x-1)〖注意〗
l解答中,条件abs(x-1)n约束一:
x-10 此式总成立,说明“无约束”。
n情况二:
-(x-1)0 此为“约束”,满足题意。
8
(1)通过符号计算求的导数。
(2)然后根据此结果,求和。
ldiff,limit指令的应用。
l如何理解运行结果。
symst
y=abs(sin(t))
d=diff(y)%求dy/dt
d0_=limit(d,t,0,'left')%求dy/dt|t=0-
dpi_2=limit(d,t,pi/2)%求dy/dt|t=pi/2
y=
abs(sin(t))
d=
sign(sin(t))*cos(t)
d0_=
-1
dpi_2=
0
9求出的具有64位有效数字的积分值。
l符号积分的解析解和符号数值解。
l符号计算和数值计算的相互校验。
(1)符号积分
symsxclear
symsx
y=exp(-abs(x))*abs(sin(x))
si=vpa(int(y,-10*pi,1.7*pi),64)
y=
abs(sin(x))/exp(abs(x))
si=
1.087849499412904913166671875948174520895458535212845987519414166
(2)数值计算复验
xx=-10*pi:
pi/100:
1.7*pi;
sn=trapz(exp(-abs(xx)).*abs(sin(xx)))*pi/100
sn=
1.0877
10计算二重积分。
l变上限二重积分的符号计算法。
symsxy
f=x^2+y^2;
r=int(int(f,y,1,x^2),x,1,2)
r=
1006/105
11在区间,画出曲线,并计算。
l在符号计算中,经常遇到计算结果是特殊经典函数的情况。
l如何应用subs获得超过16位有效数字的符号数值结果。
l初步尝试ezplot指令的简便。
(1)符号计算
symstx;
f=sin(t)/t;
y=int(f,t,0,x) %将得到一个特殊经典函数
y5=subs(y,x,sym('4.5'))
ezplot(y,[0,2*pi])
y=
sinint(x)
y5=
1.6541404143792439835039224868515
(2)数值计算复验
tt=0:
0.001:
4.5;
tt
(1)=eps;
yn=trapz(sin(tt)./tt)*0.001
yn=
1.6541
12在的限制下,求的一般积分表达式,并计算的32位有效数字表达。
l一般符号解与高精度符号数值解。
symsx
symsnpositive
f=sin(x)^n;
yn=int(f,x,0,pi/2)
y3s=vpa(subs(yn,n,sym('1/3')))
y3d=vpa(subs(yn,n,1/3))
yn=
beta(1/2,n/2+1/2)/2
y3s=
1.2935547796148952674767575125656
y3d=
1.2935547796148951782413405453553
13求方程的解。
lsolve指令中,被解方程的正确书写,输出量的正确次序。
eq1='x^2+y^2=1';
eq2='x*y=2';
[x,y]=solve(eq1,eq2,'x','y')
x=
(1/2+(15^(1/2)*i)/2)^(1/2)/2-(1/2+(15^(1/2)*i)/2)^(3/2)/2
-(1/2+(15^(1/2)*i)/2)^(1/2)/2+(1/2+(15^(1/2)*i)/2)^(3/2)/2
(1/2-(15^(1/2)*i)/2)^(1/2)/2-(1/2-(15^(1/2)*i)/2)^(3/2)/2
-(1/2-(15^(1/2)*i)/2)^(1/2)/2+(1/2-(15^(1/2)*i)/2)^(3/2)/2
y=
(1/2+(15^(1/2)*i)/2)^(1/2)
-(1/2+(15^(1/2)*i)/2)^(1/2)
(1/2-(15^(1/2)*i)/2)^(1/2)
-(1/2-(15^(1/2)*i)/2)^(1/2)
14求微分方程的通解,并绘制任意常数为1时解的图形。
l理解指令dsolve的正确使用。
l对dsolve输出结果的正确理解。
lezplot指令绘图时,如何进行线色控制。
l如何覆盖那些不能反映图形窗内容的图名。
(1)求通解
reset(symengine)
clear
symsyx
y=dsolve('0.2*y*Dy+0.25*x=0','x')
y=
2^(1/2)*(C3-(5*x^2)/8)^(1/2)
-2^(1/2)*(C3-(5*x^2)/8)^(1/2)
(2)根据所得通解中不定常数的符号写出“对其进行数值替代的指令”
yy=subs(y,'C3',1) %将通解中的C3用1代替
yy=
2^(1/2)*(1-(5*x^2)/8)^(1/2)
-2^(1/2)*(1-(5*x^2)/8)^(1/2)
(3)观察通解中两个分解的平方是否相同
yy
(1)^2==yy
(2)^2
ans=
1
(4)于是可考虑函数的平方关系
symsY
fxy=Y^2-yy
(1)^2
fxy=
Y^2+(5*x^2)/4-2
(5)根据平方关系式画完整曲线
clf
ezplot(fxy,[-2,2,-2,2])
axissquare
gridon
(6)假如直接用“分解”画曲线,那么将是不完整的
ezplot(yy
(1)),holdon
cc=get(gca,'Children');
set(cc,'Color','r')
ezplot(yy
(2)),axis([-22-22])
legend('y
(1)','y
(2)'),holdoff;
title('') %覆盖不完全的图名
grid
axissquare
15求一阶微分方程的解。
l初值微分方程的符号解。
lpretty指令的使用。
x=dsolve('Dx=a*t^2+b*t','x(0)=2','t')
pretty(x) %比较易读的表达形式
x=
(t^2*(3*b+2*a*t))/6+2
2
t(3b+2at)
----------------+2
6
16求边值问题的解。
(注意:
相应的数值解法比较复杂)。
l边值微分方程的符号解。
[f,g]=dsolve('Df=3*f+4*g','Dg=-4*f+3*g','f(0)=0,g(0)=1')
f=
sin(4*t)*exp(3*t)
g=
cos(4*t)*exp(3*t)
(1)数值数组及其运算
习题3及解答
6要求在闭区间上产生具有10个等距采样点的一维数组。
试用两种不同的指令实现。
第1章数值计算中产生自变量采样点的两个常用指令的异同。
%方法一
t1=linspace(0,2*pi,10)
%方法二
t2=0:
2*pi/9:
2*pi %要注意采样间距的选择,如这里的2*pi/9.
t1=
Columns1through7
00.69811.39632.09442.79253.49074.1888
Columns8through10
4.88695.58516.2832
t2=
Columns1through7
00.69811.39632.09442.79253.49074.1888
Columns8through10
4.88695.58516.2832
1由指令rng('default'),A=rand(3,5)生成二维数组A,试求该数组中所有大于0.5的元素的位置,分别求出它们的“全下标”和“单下标”。
第1章数组下标的不同描述:
全下标和单下标。
第1章sub2ind,int2str,disp的使用。
第1章随机发生器的状态控制:
保证随机数的可复现性。
rng('default')
A=rand(3,5)
[ri,cj]=find(A>0.5);
id=sub2ind(size(A),ri,cj);
ri=ri';cj=cj';
disp('')
disp('大于0.5的元素的全下标')
disp(['行号',int2str(ri)])
disp(['列号',int2str(cj)])
disp('')
disp('大于0.5的元素的单下标')
disp(id')
A=
0.81470.91340.27850.96490.9572
0.90580.63240.54690.15760.4854
0.12700.09750.95750.97060.8003
大于0.5的元素的全下标
行号1212231313
列号1122334455
大于0.5的元素的单下标
12458910121315
1已知矩阵,运行指令B1=A.^(0.5),B2=A^(0.5),可以观察到不同运算方法所得结果不同。
(1)请分别写出根据B1,B2恢复原矩阵A的程序。
(2)用指令检验所得的两个恢复矩阵是否相等。
第1章数组运算和矩阵运算的不同。
第1章如何判断两个双精度数组是否相等。
第1章norm指令的应用。
A=[1,2;3,4];
B1=A.^0.5
B2=A^0.5
A1=B1.*B1;
A2=B2*B2;
norm(A1-A2,'fro') %求误差矩阵的F-范数,当接近eps量级时,就认为实际相等
B1=
1.00001.4142
1.73212.0000
B2=
0.5537+0.4644i0.8070-0.2124i
1.2104-0.3186i1.7641+0.1458i
ans=
8.4961e-016
1在时间区间[0,10]中,绘制曲线。
要求分别采取“标量循环运算法”和“数组运算法”编写两段程序绘图。
第1章加强理解数组运算的机理和应用。
第1章初步使用subplot,plot,xlabel,ylabel等指令绘图。
%标量循环运算法
t=linspace(0,10,200);
N=length(t);
y1=zeros(size(t));
fork=1:
N
y1(k)=1-exp(-0.5*t(k))*cos(2*t(k));
end
subplot(1,2,1),plot(t,y1),xlabel('t'),ylabel('y1'),gridon
%数组运算法
y2=1-exp(-0.5*t).*cos(2*t);
subplot(1,2,2),plot(t,y2),xlabel('t'),ylabel('y2'),gridon
1先运行clear,formatlong,rng('default'),A=rand(3,3),然后根据A写出两个矩阵:
一个对角阵B,其相应元素由A的对角元素构成;另一个矩阵C,其对角元素全为0,而其余元素与对应的A阵元素相同。
第1章常用指令diag的使用场合。
clear,
formatlong
rng('default')
A=rand(3,3)
B=diag(diag(A))
C=A-B
A=
0.8147236863931790.9133758561390190.278498218867048
0.9057919370756190.6323592462254100.546881519204984
0.1269868162935060.0975404049994100.957506835434298
B=
0.81472368639317900
00.6323592462254100
000.957506835434298
C=
00.9133758561390190.278498218867048
0.90579193707561900.546881519204984
0.1269868162935060.0975404049994100
1先运行指令x=-3*pi:
pi/15:
3*pi;y=x;[X,Y]=meshgrid(x,y);warningoff;Z=sin(X).*sin(Y)./X./Y;产生矩阵Z。
(1)请问矩阵Z中有多少个“非数”数据?
(2)用指令surf(X,Y,Z);shadinginterp观察所绘的图形。
(3)请写出绘制相应的“无裂缝”图形的全部指令。
第1章初步感受三维曲面的绘制方法。
第1章非数N