MATLAB程序设计与应用第二版课后题及实验答案全刘卫国.docx
《MATLAB程序设计与应用第二版课后题及实验答案全刘卫国.docx》由会员分享,可在线阅读,更多相关《MATLAB程序设计与应用第二版课后题及实验答案全刘卫国.docx(115页珍藏版)》请在冰豆网上搜索。
![MATLAB程序设计与应用第二版课后题及实验答案全刘卫国.docx](https://file1.bdocx.com/fileroot1/2023-1/26/7f60c17c-f910-4d8a-990e-436a4e996bcf/7f60c17c-f910-4d8a-990e-436a4e996bcf1.gif)
MATLAB程序设计与应用第二版课后题及实验答案全刘卫国
第二章
3.设矩阵A为
A=[24239216;6574241121;345987521;8424253121;4321456421];
(1)B=A(2:
5,1:
2:
5)
B=
652421
349821
842121
434521
(2)A(7)=[]
A=
246534843235422192498424521117553646212112121
(3)A+30
(4)size(A);ndims(A)
(5)题目有误
(6)reshape(x,3,4)
(7)abs(x)
(8)char(x)
4.L1=
000010000
L2=
111110000
L3=
000111000
L4=
456
5.
(1)B=A(1:
3,:
)
C=A(:
1:
2)
D=A(2:
4,3:
4)
E=B*C
B=
23.000010.0000-0.77800
41.0000-45.000065.00005.0000
32.00005.0000032.0000
C=
23.000010.0000
41.0000-45.0000
32.00005.0000
6.0000-9.5400
D=
65.00005.0000
032.0000
54.00003.1400
E=
1.0e+003*
0.9141-0.2239
1.20802.7123
1.1330-0.2103
(2)Eans=
01
00
01
E&D
ans=
11
01
11
E|D
ans=
11
11
11
~D|~E
ans=
00
10
00
find(A>=10&A<25)
ans=
1
5
6.
all(A)
ans=
0
any(A)
ans=
1
isnan(A)
ans=
0100000
isinf(A)
ans=
0011000
isfinite(A)
ans=
1000111
7.
A
(1).x1=’学号’;A
(1).x2=’姓名’;A
(1).x3=’专业’;A
(1).x4.x41=’成绩1’;……….
A
(2).x1=’学号’;A
(2).x2=’姓名’;A
(2).x3=’专业’;A
(2).x4.x41=’成绩1’;……….
A(3).x1=’学号’;A(3).x2=’姓名’;A(3).x3=’专业’;A(3).x4.x41=’成绩1’;……….
A(4).x1=’学号’;A(4).x2=’姓名’;A(4).x3=’专业’;A(4).x4.x41=’成绩1’;……….
A(5).x1=’学号’;A(5).x2=’姓名’;A(5).x3=’专业’;A(5).x4.x41=’成绩1’;……….
8.
(1)
size(B)
ans=
22
ndims(B)
ans=
2
(2)
B
(2)
ans=
[3x3double
B(4)
ans=
{3x3cell}
(3)
B(3)=[]
B=
[1][3x3double]{3x3cell}
B{3}=[]
B=
[1][3x3double][]
第三章
1.
(1)A=eye(3)
(2)A=100+100*rand(5,6)
(3)A=1+sqrt(0.2)*randn(10,50)
(4)B=ones(size(A))
(5)A+30*eye(size(A))
(6)B=diag(diag(A))
2.
B=rot90(A)
C=rot90(A,-1)
3.
B=inv(A);A的逆矩阵
C=det(A);A的行列式的值
D=A*B
E=B*A
D=E因此A与A-1是互逆的。
4.
A=[42-1;3-12;1230];
b=[2;10;8];
x=inv(A)*b
x=
-6.0000
26.6667
27.3333
5.
(1)
diag(A);主对角线元素
ans=
1
1
5
9
triu(A);上三角阵
ans=
1-123
01-42
0052
0009
tril(A);下三角阵
ans=
1000
5100
3050
111509
rank(A);秩
ans=
4
norm(A);范数
ans=
21.3005
cond(A);条件数
ans=
11.1739
trace(A);迹
ans=
16
(2)略
6.
A=[110.5;110.25;0.50.252]
A=
1.00001.00000.5000
1.00001.00000.2500
0.50000.25002.0000
[V,D]=eig(A)
V=
0.72120.44430.5315
-0.68630.56210.4615
-0.0937-0.69760.7103
D=
-0.016600
01.48010
002.5365
第四章
1.a=input('请输入一个4位数:
');
while(a<1000|a>9999)
a=input('输入错误,请重新输入一个4位数:
');
end
b=fix(a/1000);
c=rem(fix(a/100),10);
d=rem(fix(a/10),10);
e=rem(a,10);
b=b+7;
c=c+7;
d=d+7;
e=e+7;
b=rem(b,10);
c=rem(c,10);
d=rem(c,10);
e=rem(e,10);
g=b;b=d;d=g;
g=c;c=e;e=g;
a=1000*d+100*e+10*b+c;
disp(['加密后:
',num2str(a)])
2.a=input('请输入a:
');
b=input('请输入b:
');
c=input('请输入c:
');
x=0.5:
1:
5.5;
x1=(x>=0.5&x<1.5);
x2=(x>=1.5&x<3.5);
x3=(x>=3.5&x<=5.5);
y1=a.*(x.^2)+b.*x+c;
y2=a*(sin(b)^c)+x;
y3=log(abs(b+c./x));
y=y1.*x1+y1.*x2+y3.*x3;
disp(y)
3.x=fix(rand(1,20)*89)+10;
x1=fix(sum(x)/20);
disp(['平均数是:
',num2str(x1)])
m=(rem(x,2)==0&xn=find(m);
disp(['小于平均数的数是:
',num2str(x(n))]);
4.A=input('请输入20个数:
');
n=A;
a=n;
b=n;
forn=A
ifa>=n
a=n;
elseifb<=n
b=n;
end
end
disp(['min:
',num2str(a)])
disp(['max:
',num2str(b)])
请输入20个数:
[1234567891011121314151617181920]
min:
1
max:
20
5.s=0;
x=0;
forn=1:
64
c=2^x;
x=x+1;
s=s+c;
end
disp(['2的0次方到63次方的和是:
',num2str(s)])
2的0次方到63次方的和是:
184********709552000
6,
(1)sum1=0;
forn=1:
100
x=(-1)^(n+1)*(1/n);
sum1=sum1+x;
end
disp(['当n取100时:
sum=',num2str(sum1)])
当n取100时:
sum=0.68817
sum2=0;
forn=1:
1000
x=(-1)^(n+1)*(1/n);
sum2=sum2+x;
end
disp(['当n取1000时:
sum=',num2str(sum2)])
当n取1000时:
sum=0.69265
sum3=0;
forn=1:
10000
x=(-1)^(n+1)*(1/n);
sum3=sum3+x;
end
disp(['当n取10000时:
sum=',num2str(sum3)])
当n取10000时:
sum=0.6931
(2)
sum1=0;
forn=1:
2:
100
x=(-1)^(n+1)*(1/(n+1));
sum1=sum1+x;
end
disp(['当n取100时:
sum=',num2str(sum1)])
当n取100时:
sum=2.2496
sum1=0;
forn=1:
2:
1000
x=(-1)^(n+1)*(1/(n+1));
sum1=sum1+x;
end
disp(['当n取1000时:
sum=',num2str(sum1)])
当n取1000时:
sum=3.3964
sum1=0;
forn=1:
2:
10000
x=(-1)^(n+1)*(1/(n+1));
sum1=sum1+x;
end
disp(['当n取10000时:
sum=',num2str(sum1)])
当n取10000时:
sum=4.5473
(3)
sum1=0;
forn=1:
100
x=(1/4)^n;
sum1=sum1+x;
end
disp(['当n取100时:
sum=',num2str(sum1)])
当n取100时:
sum=0.33333
sum1=0;
forn=1:
1000
x=(1/4)^n;
sum1=sum1+x;
end
disp(['当n取1000时:
sum=',num2str(sum1)])
当n取1000时:
sum=0.33333
sum1=0;
forn=1:
10000
x=(1/4)^n;
sum1=sum1+x;
end
disp(['当n取10000时:
sum=',num2str(sum1)])
当n取1000时:
sum=0.33333
(4)
sum1=0;
forn=1:
100
x=[(2*n)*(2*n)]/[(2*n-1)*(2*n+1)];
sum1=sum1+x;
end
disp(['当n取100时:
sum=',num2str(sum1)])
当n取100时:
sum=100.4975
sum1=0;
forn=1:
1000
x=[(2*n)*(2*n)]/[(2*n-1)*(2*n+1)];
sum1=sum1+x;
end
disp(['当n取1000时:
sum=',num2str(sum1)])
当n取1000时:
sum=1000.4998
sum1=0;
forn=1:
10000
x=[(2*n)*(2*n)]/[(2*n-1)*(2*n+1)];
sum1=sum1+x;
end
disp(['当n取10000时:
sum=',num2str(sum1)])
当n取10000时:
sum=10000.5
7,
functionf=factor(n);
f
(1)=1;f
(2)=1;
fork=3:
n
f(k)=f(k-1)+f(k-2);
end
运行结果:
f=factor(10)
f=11235813213455
8.function[f1,f2]=factor(a,b);
f1=a*b;
f2=a.*b;
运行结果:
[f1,f2]=factor([1,2;12],[13;13])
f1=
39
39
f2=
16
16
9
functionf=factor(n,m);
y=0;
fork=1:
n
y=y+k^m;
end
10.
(1)S=108
(2)x=41220
y=246
第五章
1.
(1)x=-10:
0.1:
10;
y=100./(1+x.^2);
plot(x,y)
(2)x=-10:
0.1:
10;
y=1/(2*pi)*exp(-x.^2/2);
plot(x,y)
(3)ezplot('x^2+y^2=1')
(4)
t=-10:
0.1:
10;
x=t.^2;
y=5*t.^3;
plot(x,y)
2.
(1)
theta=0:
0.01:
2*pi;
rho=5*cos(theta)+4;
polar(theta,rho)
(2)
theta=0.001:
0.1:
2*pi;
rho=12./sqrt(theta);
polar(theta,rho)
(3)theta=0.001:
0.1:
2*pi;
rho=5./cos(theta)-7;
polar(theta,rho)
(4)
theta=0.001:
0.1:
2*pi;
rho=pi/3.*theta.^2;
polar(theta,rho)
3.
(1)
t=0:
pi/100:
2*pi;
x=cos(t);
y=sin(t);
z=t;
plot3(x,y,z)
(2)
u=0:
pi/100:
2*pi;
v=0:
pi/100:
2*pi;
x=(1+cos(u)).*cos(v);
y=(1+cos(u)).*sin(v);
z=sin(u);
plot3(x,y,z)
(3)
(4)
5.
plot函数:
>>x=linspace(-10,10,200);
>>y=[];
>>forx0=x
ifx0>0
y=[y,x0.^2+(1+x0).^(1/4)+5];
elseifx0==0
y=[y,0];
elseifx0<0
y=[y,x0.^3+sqrt(1-x0)-5];
end
end
>>plot(x,y)
fplot函数:
fplot('(x<0).*(x.^3+sqrt(1-x)-5)+(x==0).*0+(x>0).*(x.^2+(1+x).^(1/4)+5)',[-10,10])
第六章
1.
A=randn(10,5)
(1)mean(A);均值std(A);标准方差
(2)max(max(A));最大元素min(min(A));最小元素
(3)B=sum(A,2);A每行元素的和sum(B);A全部元素之和
(4)sort(A);A的每列元素按升序排列
sort(A,2,’descend’);A的每行元素按将序排列
2.
(1)
(2)
X=[149162536496481100];
Y=1:
10;
X1=1:
100;
Y1=interp1(X,Y,X1,'cubic')
3.
x=[165123150123141];
y=[187126172125148];
P=polyfit(x,y,3)
P=
1.0e+003*
-0.00000.0013-0.17798.4330
所以它的线性拟合曲线为:
p(x)=1.3x2—177.9x+8433
4.
(1)P1=[032];P2=[5-12];P3=[10-0.5];
P=conv(conv(P1,P2),P3)
P=
015.00007.0000-3.50000.5000-2.0000-2.0000
所以P(x)=15x5+7x4-3.5x3+0.5x2-2x-2
(2)
roots(P)
ans=
0.7071
0.1000+0.6245i
0.1000-0.6245i
-0.7071
-0.6667
(3)
i=0:
10;
xi=0.2*i;
polyval(P,xi)
ans=
-2.0000-2.3920-2.6112-1.70242.710415.000042.112094.1408184.9056332.5264560.0000
5.
(1)
建立函数文件:
functionf=fxy(u)
x=u
(1);y=u
(2);
f=3.*x.^2+2*x.*y+y.^2
在命令窗口中输入以下命令:
[U,fmin]=fminsearch('fxy',[1,1])
结果:
U=
1.0e-004*
-0.06750.1715
fmin=
1.9920e-010
(2)
f=inline('-sin(x)-cos(x.^2)');
fmax=fminbnd(f,0,pi)
fmax=
0.7310
6.
(1)x=[pi/6pi/4pi/3];
f=inline('sin(x).^2+cos(x).^2');
dx=diff(f([x,5*pi/12]))/(pi/12)可参见第157页例题6.19
dx=
000
x=pi/2时单独计算:
x=pi/2;
f=inline('sin(x).^2+cos(x).^2');
diff(f([x,pi]))/(pi/2)
ans=
0
(2)
x=1:
3;
f=inline('sqrt(x.^2+1)');
dx=diff(f([x,4]))
结果:
dx=
0.82190.92620.9608
7.
(1)
f=inline('sin(x).^5.*sin(5*x)');
quad(f,0,pi)
ans=
0.0982
(2)
f=inline('(1+x.^2)./(1+x.^4)');
quad(f,-1,1)
ans=
2.2214
(3)
f=inline('x.*sin(x)./(1+cos(x).^2)');
quad(f,0,pi)
ans=
2.4674
(4)
f=inline('abs(cos(x+y))');
dblquad(f,0,pi,0,pi)
ans=
6.2832
8.
N=64;%采样点数
T=5;%采样时间终点
t=linspace(0,T,N);%给出N个采样时间ti(i=1:
N)
y=exp(-t);%求各采样点样本值y
dt=t
(2)-t
(1);%采样周期
f=1/dt;%采样频率
Y=fft(y);%计算y的快速傅里叶变换Y
F=Y(1:
N/2+1);%F(k)=Y(k)
f=f*(0:
N/2)/N;%使频率轴f从0开始
plot(f,abs(F))%绘制振幅-频率图
9.
(1)
矩阵求逆法:
A=[235;374;1-71];
b=[10;3;5];
x=inv(A)*b
x=
-1.8060
-0.5373
3.0448
矩阵除法法:
A=[235;374;1-71];
b=[10;3;5];
x=A\b
x=
-1.8060
-0.5373
3.0448
矩阵分解法:
A=[235;374;1-71];
b=[10;3;5];
[L,U]=lu(A);
x=U\(L\b)
x=
-1.8060
-0.5373
3.0448
(2)方法同
(1)
10.
函数文件:
line_solution(A,b)
function[x,y]=line_solution(A,b)
[m,n]=size(A);
y=[];
ifnorm(b)>0
ifrank(A)==rank([A,b])
ifrank(A)==n
disp('原方程组有唯一解x');
x=A\b;
else
disp('原方程组有无穷个解,特解为x,齐次方程组的基础解系为y');
x=A\b;
y=null(A,'r');
end
disp('方程组无解');
x=[];
end
else
disp('原方程组有零解x');
x=zeros(n,1);
ifrank(A)disp('方程组有无穷个解,基础解系为y');
y=null(A,'r');
end
end
程序:
A=[21-11;42-21;21-1-1];
b=[1;2;1];
[x,y]=line_solution(A,b)
结果:
原方程组有无穷个解,特解为x,齐次方程组的基础解系为y
Warning:
Rankdeficient,rank=2,tol=4.3512e-015.
>Inline_solutionat11
方程组无解
x=
[]
y=
-0.50000.5000
1.00000
01.0000
00
11.
(1)
f=inline('x-sin(x)./x');
x=fzero(f,0.5)
x=
0.8767
(2)
f=inline('(sin(x).^2).*exp(-0.1.*x)-0.5.*abs(x)');
x=fzero(f,1.5)
x=
1.6738
12.
函数文件:
functionf=fxy(u)
x=u
(1)
y=u
(2)
f
(1)=x-0.6*sin(x)-0.3*cos(y)
f
(2)=y-0.6*cos(x)+0.3*sin(y)
在命令窗口输入以下命令:
x=fsolve('fxy',[0.5,0.5],optimset('Display','off'))
结果:
x=
0.63540.3734
15.
A=[-120;-12-1;-12-1;-12-1;02-1];
d=[-1;0;1];
B=spdiags(A,d,5,5);
b=[10000]';
x=(inv(B)*b)'
x=
0.83330.66670.50000.33330.1667
实验一MATLAB运算基础
1.先求下列表达式的值,然后显示MATLAB工作空间的使用情况并保存全部变量。
(1)
(2)
,其中
(3)
(4)
,其中t=0:
0.5:
2.5
解:
M文件:
z1=2*sin(85*pi/180)/(1+exp
(2))
x=[21+2*i;-0.455];
z2=1/2*l