MATLAB课后习题.docx
- 文档编号:25178554
- 上传时间:2023-06-05
- 格式:DOCX
- 页数:28
- 大小:79.86KB
MATLAB课后习题.docx
《MATLAB课后习题.docx》由会员分享,可在线阅读,更多相关《MATLAB课后习题.docx(28页珍藏版)》请在冰豆网上搜索。
MATLAB课后习题
MATLAB课后习题
5、利用rand函数产生(0,1)间的均匀分布的10*10随机矩阵A,然后统计A中大于等于0.6的元素的个数。
解:
A=rand(10);
B=A>=0.6;
C=sum(B);
count=sum(C)
运行结果(每次运行结果是不同的,仅作参考):
count=32
6、利用randn函数产生均值为0,方差为1的10*10随机矩阵A,然后统计A中大于-0.5且小于0.5的元素的个数。
解:
A=randn(10);
B=(A<0.5)&(A>-0.5);
C=sum(sum(B))
运行结果(每次运行结果是不同的,仅作参考):
C=48
1、解:
ifand(a<1,b<=0.5)
语句1;
elseifand(a<1,b>0.5)
语句2;
elseifand(a>=1,b<=0.5)
语句3;
else
语句4;
2、有一矩阵A,找出矩阵中值等于1的元素,并将它们重新排列成列向量B。
解:
A=2*rand(4);
k=find(A<=1);
A(k)=[];%删除下标为k的元素
B=A'
运行结果(每次运行结果是不同的,仅作参考)
B=
1.4769
1.8348
1.5310
1.1524
1.3667
1.0932
1.2889
1.2952
1.3580
3、在一测量矩阵A(100*3)中,存在有奇异值(假设大于100的置认为是奇异值),编程实
现删去奇异值所在的行。
解:
A=120*randn(10,3);
[i,j]=find(A>100);
A(i,:
)=[]%删去存在奇异值的行
4、在给定的100*100矩阵中,删去整行为0的行,删去整列为0的列。
解:
A=diag([1234],1)
B=any(A)
[i,j]=find(B==0)
A(:
i)=[]%删除全为0的列
B=any(A')
[i,j]=find(B==0)
A(j,:
)=[]%删除全为0的行
运行结果:
初始值:
A=
01000
00200
00030
00004
00000
操作后:
A=
1000
0200
0030
0004
1、将窗口分割成四格,分别绘制正弦、余弦、正切和余切函数曲线,并加上适当的标注。
程序为:
x=0:
pi/50:
2*pi;
k=[1265176101];
x(k)=[];%删除正切和余切的奇异点
figure
(1)
subplot(2,2,1)
plot(x,sin(x),'k--'),gridon
legend('\ity=sin(x)')
title('y=sin(x)')
xlabel('x'),ylabel('y')
subplot(2,2,2)
plot(x,cos(x),'r--'),gridon
legend('\ity=cos(x)')
title('y=con(x)')
title('简单柱体')
绘制球的程序为:
figure
(1)
subplot(2,1,1)
sphere
axisequal
title('半径为1的球')
subplot(2,1,2)
[x,y,z]=sphere;
x=2*x;
y=2*y;
z=2*z;
surf(x,y,z),axissquare
title('半径为2的球')
运行后的图形:
5、绘制三维条形图:
程序为:
Y=cool(7);
figure
(1)
subplot(2,2,1),bar3(Y,'detached'),title('Detached')
subplot(2,2,2),bar3(Y,0.25,'detached'),title('Width=0.25')
subplot(2,2,3),bar3(Y,'grouped'),title('Grouped')
subplot(2,2,4),bar3(Y,'stacked'),title('Stacked')
运行后的图形为:
6、绘制二维条形图
程序为:
Y=round(rand(5,3)*10);
figure
(1)
subplot(2,2,1),bar(Y,'group'),title('Group')
subplot(2,2,2),bar(Y,'stack'),title('Stack')
subplot(2,2,3),barh(Y,'stack'),title('Stack')
subplot(2,2,4),bar(Y,1.5),title('Width=1.5')
运行后的图形:
1、编写M函数实现:
求一个数是否为素数,在编写一主程序,要求通过键盘输入一个整数,然后完成判断其是否为素数。
解:
functionprime(x)
n=fix(sqrt(x));
fori=2:
n
ifrem(x,i)==0
a='fasle'
return
elsea='true'
end
end
运行结果:
>>x=56;
>>prime(x)
a=
fasle
2、编写程序完成从表示字符的响亮中删去空格,并求出字符个数。
解:
function[nstr,n]=del(str)
nstr=[];
k=find(str~='');
nstr=str(k);
n=length(nstr);
end
运行后为:
str='drhyfghgtesdhgfds';
>>[nstr,n]=del(str)
nstr=
drhyfghgtesdhgfds
n=
17
3、编写M函数统计十进制数值中’0‘的个数,然后编写脚本文件,实现统计所有自然数1~2006中0的个数。
解:
M函数为:
functiony=geshu(x)
s=num2str(x);
n=length(s);
m=0;
ifs
(1)=='0'
disp('xiserror');
return
end
fori=2:
n
ifs(i)=='0'
m=m+1;
end
end
y=m;
脚本文件为'jiu4':
sum=0;
forx=1:
2006
y=geshu(x);
sum=sum+y;
end
disp(sum)
运行结果为:
>>jiu4
504
4、利用menu函数输入选择参数ch。
当ch=1时,产生[-10,10]之间均匀分布的随机数;当ch=2时,产生[-5,5]之间均匀分布的随机数;当ch=3时,产生[-1,1]之间均匀分布的随机数;当ch=4时,产生均值为0,方差为1的正态分布随机数。
要求使用switch函数。
解:
s=menu('ch','1','2','3','4');
n=[];
switchs
case1,n=20*rand(3)-10
case2,n=10*rand(3)-5
case3,n=2*rand(3)-1
case4,n=randn(3)
otherwisedisp('error')
end
运行后:
按下2后:
n=
4.22740.43663.3897
3.00374.8478-0.6674
-2.14052.1568-0.2938
5、求阵列x的平均值和标准差
解:
function[mean1,stdev]=stat2(x)
[m,n]=size(x);
ifm==1
m=n;
end
s1=sum(x);s2=sum(x.^2);
mean1=s1/m;
stdev=sqrt(s2/m-mean1.^2);
运行后:
>>x=rand(4,4)+2;
>>[mean1,stdev]=stat2(x)
mean1=
2.52072.39222.64982.2539
stdev=
0.17130.18920.17250.2027
6、测试程序执行时间
%tech1.m
tic
i=0;
fort=0:
.01:
100
i=i+1;
y(i)=sin(t);
end
toc
%tech2.m
tic
t=0:
.01:
100;
y=sin(t);
Toc
运行后:
Elapsedtimeis0.015217seconds.
Elapsedtimeis0.000508seconds.
1、产生menu选择输出颜色
解:
s=menu('colorselection','red','green','blue','yellow','black')
switchs
case1,scolor='red';
case2,scolor='green';
case3,scolor='blue';
case4,scolor='yellow';
case5,scolor='black';
otherwisedisp('error')
end
Scolor
2、企业发放的奖金按个人完成的利润(I)提成。
分段提成比例wei即如王某完成25万元利润时,个人可得
y=10x10%+10x5%+5x2%(万元)
据此编写程序,求企业职工的奖金。
解
functionbonus=bon(I)
n=fix(I/100000)
if(n>4)
n=4;
end
bon1=100000*0.1;
bon2=0.05*(200000-100000);
bon3=0.02*(400000-200000);
switchn
case0,bonus=I*100000;
case1
bonus=bon1+0.05*(I-100000);
case{2,3}
bonus=bon1+bon2+0.02*(I-200000);
case4,bonus=bon1+bon2+bon3+0.01*(I-400000);
end
运行后:
>>I=1700000;
>>bonus=bon(I)
n=
17
bonus=
32000
3、有一分数序列2/1,3/2,5/3/,8/5……求前15项和。
解:
s=1;t=2;sum=0;
x=t/s;
sum=sum+x;
fori=1:
15
z=t;t=s+t;s=z;
x=t/s;
sum=sum+x;
end
sum
运行后:
>>qiuhe
sum=
26.1881
4、约瑟夫环
解:
n=input('pleaseinputn:
');
m=input('pleaseinputm:
');
b=1:
n;
i=1;c=0;s=0;
whiles ifb(i)~=0 c=c+1; ifc==m s=s+1;a(s)=b(i);b(i)=0; c=0; end end ifi==n i=0; end i=i+1; end a 运行后: >>yuese pleaseinputn: 12 pleaseinputm: 3 a= Columns1through8 369124817 Columns9through16 211510316520 Columns17through23 11921019151 5、编写程序计算x在(-3,3)上,并画出曲线。 解: functiony=func2(x) n=length(x); fori=1: n; if(x(i)>=-3)&&(x(i)<-1) y(i)=[-x(i).^2-4*x(i)-3]/2; elseif(x(i)>=-1)&&(x(i)<1) y(i)=-x(i).^2+1; else(x(i)>=1)&&(x(i)<3) y(i)=[-x(i).^2+4*x(i)-3]/2; end end 脚本为: x=-3: .01: 3; y=func2(x); figure (1) plot(x,y),gridon title('y=func2(x)') xlabel('x'),ylabel('y') 运行后: 1、求矩阵与的逆矩阵和行列式。 解: a=[535;374;798]; b=[242;679;836]; c1=inv(a) c2=det(a) d1=inv(b) d2=det(b) 运行后: c1= 10.000010.5000-11.5000 2.00002.5000-2.5000 -11.0000-12.000013.0000 c2= 2.0000 d1= 0.1531-0.18370.2245 0.3673-0.0408-0.0612 -0.38780.2653-0.1020 d2= 98.0000 2、解方程组 解: A=[321;1-13;24-4]; b=[76-2]; A\b' 运行后: ans= 1.0000 1.0000 2.0000 2、对一组数据进行分别采用y1(t)=c1+c2exp(-t),y2(t)=d1+d2t.*exp(-t)拟合. 解: t=[12345678910]'; y=[4.8424.3623.7543.3683.1693.0833.0343.0163.0123.005]'; a=[ones(size(t))exp(-t)]; C=a\y; b=[ones(size(t))t.*exp(-t)]; D=b\y; T=[10: -1: 1]'; y1=[ones(size(T))exp(-T)]*C; y2=[ones(size(T))T.*exp(-T)]*D; plot(T,y1,'r--',T,y2,'k-',t,y,'o'); legend('\ity1(t)=c1+c2exp(-t)','\ity2(t)=d1+d2t.*exp(-t)') title('曲线拟合') xlabel('\itt'),ylabel('\ity') 运行后: 4、矩阵,分别对a进行特征值分解、奇异值分解、LU分解、QR分解。 解: >>[v,d]=eig(a,b) v= -0.4330-0.2543-0.1744 -0.56570.9660-0.6091 -0.70180.04720.7736 d= 13.548200 04.83030 003.6216 >>a=[912;563;827]; >>[u,s,v]=svd(a) u= -0.56010.5320-0.6350 -0.4762-0.8340-0.2788 -0.67790.14620.7204 s= 15.523400 04.56480 003.3446 v= -0.82750.3917-0.4023 -0.3075-0.9156-0.2592 -0.4699-0.09070.8781 >>[l,u]=lu(a) l= 1.000000 0.55561.00000 0.88890.20411.0000 u= 9.00001.00002.0000 05.44441.8889 004.8367 >>[q,r]=qr(a) q= -0.69030.3969-0.6050 -0.3835-0.9097-0.1592 -0.61360.12210.7801 r= -13.0384-4.2183-6.8260 0-4.8172-1.0807 003.7733 5、求解微分方程。 解: functiondy=funf(t,y) dy=[5*y (1)-5*y (2)-6*y(3);3*y (1)-2*y (2)+5*y(3);2*y (1)-y (2)-4*y(3)]; 脚本文件: x0=[1,-4,5]'; tspan=[30,100]; [t,x]=ode45('funf',tspan,x0); plot3(x(: 1),x(: 2),x(: 3)),gridon title('微分方程曲线') 运行后: 微分方程组x’=10(-x+y);y’=28x-y-xz;z’=xy-8z/3,x0=[12,2,9],求微分方程在[0,30]上的解,并画出系统轨迹。 解: 脚本文件: 二维图: 三维图: 2、分别用多项式和指数函数进行拟合。 y1(t)=c1+c2t+c3t2,y2(t)=d1+d2exp(t) 解: t=[00.20.40.60.81.02.05.0]'; y=[1.01.511.882.132.292.402.60-4.00]'; B1=[ones(size(t))tt.*t]; B2=[ones(size(t))exp(t)]; A=B1\y; C=B2\y; T=[0: .1: 6]'; Y1=[ones(size(T))TT.*T]*A; Y2=[ones(size(T))exp(T)]*C; plot(T,Y1,'-',T,Y2,'--',t,y,'o') legend('\itY1','\itY2') 3、将(x-6)(x-3)(x-8)展开为系数多项式的形式。 解: >>a=[638]; >>pa=poly(a); >>ppa=poly2sym(pa) ppa= x^3-17*x^2+90*x-144 4、求解多项式x3-7x2+2x+40的根。 解: >>r=[1-7240]; >>p=roots(r); -0.2151 0.4459 0.7949 0.2707 5、求解在x=8时多项式(x-1)(x-2)(x-3)(x-4)的值。 解: >>p=poly([1234]); >>polyvalm(p,8) ans= 840 6、计算多项式乘法(x2+2x+2)(x2+5x+4)。 解: >>c=conv([122],[154]) c= 1716188 7、计算多项式除法(3x3+13x2+6x+8)/(x+4)。 解: >>d=deconv([31368],[14]) d= 312 9、微分方程组当t=0,=1;=-0.5,求微分方程组t~【0,25】上的解,并画出x1-x2的系统轨迹。 解: functiondy=fund(t,y) dy=[0.5-y (1);y (1)-4*y (2)]; 脚本文件: x0=[1,-0.5]; tspan=[0,20]; [T,Y]=ode23('fund',tspan,x0); figure (1) plot(T,Y(: 1),'r--',T,Y(: 2)) legend('\itx1','\itx2') 1.利用下标建立多维阵列。 产生一个3×3×2的多维矩阵A >>A=[572;012;342];%产生一个3*3矩阵 >>A(: : 2)=[273;428;203] A(: : 1)= 572 012 342 A(: : 2)= 273 428 203 2.利用MATLAB函数产生多维阵列。 利用MATLAB的函数(如rand、randn、ones、zeros等)都可直接产生多维阵列,在函数调用时可指定每一维的尺寸。 例如,为产生100×3×2维的正态分布随机数R,可输入 >>R=randn(100,3,2); >>A=5*ones(3,4,2);%产生元素相同的多维阵列 >>B=repmat(5,[342]);%产生元素相同的多维阵列 3.利用cat函数建立多维阵列 >>A=[28;05];B=[18;24]; >>C=cat(3,A,B); >>D=cat(4,A,B); >>size(C) ans=222 >>size(D) ans= 2212 这说明得到的C为2×2×2维,而D为2×2×1×2维。 1、冒泡法排序 functiony=bubblesort(x)%冒泡法排序. n=length(x); fori=1: n-1 forj=i+1: n ifx(i)>x(j) temp=x(i); x(i)=x(j); x(j)=temp; end end end y=x; 运行结果: >>x=[1234654257623]; >>y=bubblesort(x) y= 2512233476654 以上为按照升序排列的,若要降序,则 ifx(i) temp=x(i); x(i)=x(j); x(j)=temp; 即可 运行结果: >>x=[1221245194530]; >>y=bubblesort(x) y= 4530211912542 2、傅里叶变换 应用付立叶变换并求频谱图 clc;clf;clearall; fs=1000; t=0: 1/fs: 0.6; f1=200; f2=300; x=sin(2*pi*f1*t)+sin(2*pi*f2*t); subplot(4,1,1); plot(n,x); title('f1(100Hz)\f2(300Hz)的正弦信号,初相0'); xlabel('序列(n)'); gridon; number=512; y=fft(x,number); n=0: length(y)-1; f=fs*n/length(y); subplot(4,1,2); plot(f,abs(y)/max(abs(y))); holdon; plot(f,abs(fftshift(y))/max(abs(y)),'r'); title('f1\f2的正弦信号的FFT(512点)'); xlabel('频率Hz'); gridon; x=x+randn(1,length(x)); subplot(4,1,3); plot(n,x); t
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 课后 习题