MATLAB实验题 答案.docx
《MATLAB实验题 答案.docx》由会员分享,可在线阅读,更多相关《MATLAB实验题 答案.docx(26页珍藏版)》请在冰点文库上搜索。
MATLAB实验题答案
(必做题)
MATLAB实验一:
矩阵的使用
1.略
2.在matlab的命令窗口里完成如下计算,其中t的值分别取-1,0,1,表达式如下:
functionmyfun1
t=-1:
1;
y=sqrt(3)/2*exp(-4*t).*sin(4*sqrt(3*t)+pi/3);
disp(y);
3.自行产生一个5行5列的数组,得到最中间的三行三行矩阵。
Functionmyfun3
A=magic(5);
B=A([2:
4],[2:
4]);
Disp(B);
4.用magic产生一个5*5的矩阵,将这个矩阵的第二行与第三行互换位置
functionmyfun4
a=magic(5);
b=a([1,3,2,4,5],:
);
disp(b);
5.求方程组的根
x1+4x2-3x3=2
2x1+5x2-x3=11
x1+6x2+x3=12
functionmyfun5
A=[14-3;25-1;161];
B=[2;11;12];
X=inv(A)*B;
disp(X);
6.已知:
一个多项式的系数向量是p=[1-6-72-27],求这个多项式的根。
functionmyfun6
p=[1-6-72-27];
y=roots(p);
disp(y);
7.已经两个多项式的系数分别是:
[1234]和[14916],请求这两个多项式的乘积,及商和余数。
functionmyfun7
a=[1234];
b=[14916];
c=conv(a,b);
[s,r]=deconv(a,b);
disp(c);
disp(s);
disp(r);
8.给定一个多项式的根是[-5-3+4i-3-4i],求原来的多项式
functionmyfun8
r=[-5-3+4i-3-4i];
p=poly(r);
disp(poly2sym(p));%disp是用于程序中
9.A=[234;
157;
625]
用什么函数,保证第一列排序的时候,其他列跟着变化。
最后的结果是:
[157;
234;
625]
functionmyfun9
A=[234;157;625];
[r,p]=sort(A);
Result1=A(p(:
1),:
);%按第一列进行排列
disp(result1);
Result2=A(p(:
2),:
);%按第二列进行排列
disp(result2);
[m,n]=sort(A,2);
Result3=A(:
n(1,:
));%按第一行进行排列
disp(result3);
10.functionmyfun10%先做函数文件
x=linspace(-2,3);
y=sin(x)+x-3;
plot(x,y);
grid;
>>x=fzero(@(x)sin(x)+x-3,3)%根据画出的图找出零点的大概位置,然后利用fzero在找出的点附近求零点
结果是:
2.1798
MATLAB实验二:
元胞和结构定义
1.自行产生一个5行5列的数组,用两种方法得到最中间的三行三行矩阵。
functionmyfun11
a=magic(5);
b=a([2:
4],[2:
4]);%第一种方法
disp(b);
a([15],:
)=[];%第二种方法:
先删除1,5两行的数据,亦可先删除1,5两列的数据
a(:
[15])=[];%再删除1,5两列的数据
disp(a);
2.根据a=reshape(-4:
4,3,3)做一个矩阵,然后
(1)取出所有大于0的元素构成一个向量(可推广到从一个矩阵里筛选出符合条件的元素组成一个向量)
(2)将原矩阵中大于0的元素正常显示,而小于等于0的元素全部用0来表示(可推广到将原矩阵中不符合条件的全用0来表示,符合条件的值不变)。
(思考:
大于0的正常显示,小于等于0的用-10来表示)
functionmyfun12
a=reshape(-4:
4,3,3);
b=a(a>0);
c=(a>0).*a+(a<=0).*0;
disp(b);
disp(c);
3.建立如下一个元胞数组,现在要求计算第一个元胞第4行第2列加上第二个元胞+第三个元胞里的第二个元素+最后一个元胞的第二个元素。
a={pascal(4),'hello';17.3500,7:
2:
100}
functionmyfun13
a={pascal(4),'hello';17.3500,7:
2:
100};
r=a{1}(4,2)+a{2}+a{3}
(2)+a{4}
(2);
disp(r);
4.建立一个结构体的数组,包括3个人,字段有姓名,年龄,分数,其中分数由随机函数产生一个3行10列的数据表示了有10门课程,每门课程有三个阶段的分数。
问题是:
问题1,如何找到第2个人的分数并显示出来
问题2,如何找到第2个人的每门课程3个阶段的平均分数并显示出来
问题3,全班同学(指这3个学生)的10门课程的每门课程的平均分如何计算出来?
要求放到一个数组里。
问题4,找到这个班所有同学的姓名放到一个元胞数组里
functionmyfun14
student=struct('name',{'l1','l2','l3'},'age',{10,11,12},'score',{100*rand(3,10),100*rand(3,10),100*rand(3,10)});
a=student
(2).score;
b=mean(student
(2).score);
c=[mean(student
(1).score);mean(student
(2).score);mean(student(3).score)];
d={student
(1).name,student
(2).name,student(3).name};
disp(c);
5.给定一个图像文件,格式是jpg,通过inportdata引入这个文件,查看引入后数据保存是一个数组,是100*100*3的一个数组,这是一个三维的数组,表明有100*100个点,每个点有RGB三个方面决定的。
现在,要求将这些点的中间部分30个象素宽度的正方形用黑点表示。
functionmyfun15
img=importdata('white.jpg');
img([300:
380],[400:
600],:
)=0;
image(img);
imwrite(img,'white2.jpg','jpg');
6.手动构造一个长宽页是1000*1000*3的图像,每个图像的点有三个0-255之间的随机值构成。
然后使用image函数显示这个图像,再用imwrite函数保存这个图像,使这个图像用图片浏览器也能够查看。
functionmyfun16
img=uint8(255*rand(100,100,3));
image(img);
imwrite(img,'newpic.jpg','jpg');
MATLAB实验三:
M文件编写
1.给定一个矩阵
a=
123
456
编写一个M函数,要求输入是a,输出有三个:
平均数,标准差,秩。
程序运行后分析其性能指标(主要从时间上分析)
function[a,s,r]=myfun17(x)
[m,n]=size(x);
a=sum(x)/m;
s=sqrt(sum(x.^2)/m-a.^2);
r=rank(x);
>>profview
2.编写一个M函数,将一个给定图片文件里的白色全部换成另一种颜色,比如说:
将白色转成黑色。
functionmyfun18
img=importdata('white.jpg');
[m,n,p]=size(img);
fori=1:
m
forj=1:
n
if(img(i,j,:
)>225)
img(i,j,:
)=0;
end
end
end
image(img);
3.要求编写一个M函数文件,完成求三角函数,x变化范围从-pi到pi,求出相应的y的值,并画出图,然后使用编译器生成EXE,脱离MATLAB环境运行。
functionmyfun19%先建立函数文件
x=-pi:
0.3:
pi;
y=sin(x);
plot(x,y);
>>mbuild–setup%之后按照指示操作,则建立好环境
>>mcc–mmyfun19%生成独立运行的程序文件
MATLAB实验四:
文件的输入与输出
1.定义一个2*2的元胞数组,放入相应的数据,然后保存到MAT文件中,清除内存后,然后再调入内存。
查看数据是否改变。
>>a=a={'hello',magic(5);[-3:
0.1:
5],17.3500}
>>savea.mat%mat也可以省略,默认的格式就是mat格式
>>savewana%保存文件名为wan,变量为a
Save(‘wan.mat’,’a’);
>>clearall
>>loada
2.实验用图像:
pic.jpg.(注意,此图片是灰度图片,本题是针对灰度图片的处理)使用imread函数将图像读入Matlab。
根据产生灰度变换函数T1,使得:
0.3rr<0.35
d=0.105+2.6333(r–0.35)0.35≤r≤0.65
1+0.3(r–1)r>0.65
用T1对原图像pic.jpg进行处理,查看结果。
并打印出来。
functionmyfun21
rgb=importdata('pic.jpg');
r=im2double(rgb);
desimg=[r<0.35].*r*0.3+[r<=0.65&r>=0.35].*(0.105+2.6333*(r-0.35))+[r>0.65].*(1+0.3*(r-1));
imshow(desimg);
imwrite(desimg,'huidu.jpg','jpg');
3.自己查阅资料找出中国近10年人口数,制成txt文件,格式如下:
199011.3456
199112.3566
…
然后将数据引入到内存,并绘制出相应的人口变化曲线图。
functionmyfun22
a=load('-ascii','number.txt');%work中有名为number的txt文件
plot(a(:
1),a(:
2));
4.使用通用读函数importdata读入一个声音文件hello.wav,将所有的数据反序排列后,播放声音,听效果,最后,将数据保存成另外的的声音文件名helloRev.wav。
functionmyfun23
a=importdata('hello.wav');
m=flipud(a.data);
n=a.fs;
sound(m,n);
wavwrite(m,n,'helloRev.wav');
MATLAB实验五:
图形绘制与分析
1.海尔,联想,方正近四年销售的数据如下。
data=[3000,2334,3444,6663;2342,3422,2111,4453;3232,2334,5433,3500];请做出如下图表。
functionmyfun24
data=[3000,2334,3444,6663;2342,3422,2111,4453;3232,2334,5433,3500];
bar(data);
title('各品牌销售比较图');
set(gca,'XTickLabel',{'海尔','联想','方正'});
legend('2006','2007','2008','2009');
2.已知在三维空间里,x,y,z的变化规律如下,试用plot3来做出其图形。
z=0:
0.1:
40;
x=cos(z).^2;
y=sin(z)+cos(z);
functionmyfun25
z=0:
0.1:
40;
x=cos(z).^2;
y=sin(z)+cos(z);
plot3(x,y,z);
3.根据下面的方程绘制图形,y=sin(x)+x,然后再分别用多项式拟合函数和用拟合工具进行拟合。
functionmyfun26
x=-2*pi:
0.1:
2*pi;
y=sin(x)+x;
ky5=polyfit(x,y,5);
y5=polyval(ky5,x);
ky7=polyfit(x,y,7);
y7=polyval(ky7,x);
ky9=polyfit(x,y,9);
y9=polyval(ky9,x);
plot(x,y,'r',x,y5,'g',x,y7,'b',x,y9,'k');
4.在0-450范围内,x,y均每隔50产生一个数,这样产生一个10*10网格区域,用randn函数来产生一个10*10的随机矩阵(标准差是10,平均数是20),使用surf来作出这个三维的曲面图。
然后使用interp2进行二次插值,插值函数使用三次杨条插值函数,在原来的第一个分隔区域里产生5个小区域,并最后画出图形。
functionmyfun27
x=0:
50:
450;
y=0:
50:
450;
[x1y1]=meshgrid(x,y);
z1=10*randn(10,10)+20;
subplot(1,2,1);
surf(x1,y1,z1);
x=0:
10:
450;
y=0:
10:
450;
[x2y2]=meshgrid(x,y);
z2=interp2(x1,y1,z1,x2,y2,'spline');
subplot(1,2,2);
surf(x2,y2,z2);
5.有数据如下:
x=[-3-2.5-2-1.5-1-0.500.511.522.53];
y=[-0.14112-0.59847-0.9093-0.99749-0.84147-0.4794300.479430.841470.997490.90930.598470.14112];
数据点如下图中兰方块所示,要求编写函数对原数据进行linear和spline一次插值运算,得到结果如下:
答:
functionmyfun28
x=[-3,-2.5,-2,-1.5,-1,-0.5,0,0.5,1,1.5,2,2.5,3];
y=[-0.14112,-0.59847,-0.9093,-0.99749,-0.84147,-0.47943,0,0.47943,0.84147,0.99749,0.9093,0.59847,0.14112];
xi=-3:
0.2:
3;
y1=interp1(x,y,xi,'linear');
subplot(1,2,1);
plot(xi,y1,'r*');
title('linear');
y2=interp1(x,y,xi,'spline');
subplot(1,2,2);
plot(xi,y2,'r*');
title('spline');
(选做题)
1.求解方程组:
functionmyfun1
a=[-1,1,2;3,-1,1;-1,3,4];
b=[2;6;4];
x1=a\b
x2=inv(a)*b
2.用magic产生一个5*5的矩阵,将这个矩阵的第2列与第5列互换位置。
functionmyfun2
a=magic(5);
disp(a);
b=a(:
[15342]);
disp(b);
3.编写一个M函数,求和S=1+2+3+…+1000
functions=myfun3
s=0;
fori=1:
1000
s=s+i;
end
4.定义一个矩阵,放入相应的数据,然后保存到MAT文件中,清除内存后,然后再调入内存。
查看数据是否改变。
>>a=magic(5)
a=
17241815
23571416
46132022
101219213
11182529
>>savewan.mata
>>clearall
>>loadwan
5.根据下面的方程绘制图形,y=cos(x)+x,x取值-pi-pi,然后用多项式拟合函数进行拟合。
functionmyfun26
x=-pi:
0.1:
pi;
y=cos(x)+x;
newy5=polyfit(x,y,5);%进行5次拟合
y5=polyval(newy5,x);
newy7=polyfit(x,y,7);%进行7次拟合
y7=polyval(newy7,x);
newy9=polyfit(x,y,9);%进行9次拟合
y9=polyval(newy9,x);
plot(x,y,'r',x,y5,'g',x,y7,'b',x,y9,'k');
6.创建一个5行5列的magic矩阵,删除其中的第二、三行与第三、四列。
使其变成3行3列的矩阵。
functionmyfun6
a=magic(5)
a([23],:
)=[];%删除2,3行
a(:
[34])=[];%删除3,4列
disp(a);
7.建一个2行2列的元胞数组,a={zeros(2,2,2),’hello’;1758,int16(1:
10)},请在此基础上创建一个新的8行8列元胞数组。
functionmyfun7
a={zeros(2,2,2),'hello';1758,int16(1:
10)};
disp(a);
b={rand(2,2,2),'hi';17.58,int16(1:
20)};
disp(b);
c=[a,b];
disp(c);
d=[a,b;c];
disp(d);
e=[d,d;d,d];
disp(e);
8.要求编写一个函数文件,将一个给定图片的所有颜色都变深(变深多少自己斟酌),其中黑色为0,白色为255
functionmyfun8
img=importdata('pic.jpg');
[m,n,p]=size(img);
fori=1:
m
forj=1:
n
img(i,j,:
)=img(i,j,:
)+30;
end
end
image(img);
9.根据下面的方程绘制图形,y=cos(2x)+sin(x),然后用5次多项式进行拟合。
functionmyfun8
x=-pi:
0.1:
pi;
y=cos(2*x)+sin(x);
subplot(1,2,1);
plot(x,y,'k');
newy5=polyfit(x,y,5);%进行5次拟合
y5=polyval(newy5,x);
subplot(1,2,2);
plot(x,y5,'r');
10.要求编写一个M函数,完成下列函数的求解:
y=sin(x);y=sin(x+pi);y=sin(x+pi/3);y=sin(x+pi/2)自变量x的变化范围从-pi到pi,要求四个图像画在同一个图形窗体中。
functionmyfun9
x=-pi:
0.2:
pi;
y1=sin(x);
y2=sin(x+pi);
y3=sin(x+pi/3);
y4=sin(x+pi/2);
subplot(2,2,1);
plot(x,y1);
subplot(2,2,2);
plot(x,y2);
subplot(2,2,3);
plot(x,y3);
subplot(2,2,4);
plot(x,y4);
11.矩阵的使用:
多项式
在[-1,3]之间求值并画出相应的曲线。
>>x=-1:
0.2:
3;y=x.^3+4*x.^2-7.*x-10;plot(x,y);grid
>>fzero(@(x)x^3+4*x^2-7*x-10,2)%根据画图找出零点的大概位置是2
12.元胞和结构的定义:
创建一个元胞数组A{1,1}=’JamesBond’ ;A{1,2}=[12 ;34 ;56] ;A{2,1}=pi ;A{2,2}=zeros(5) ;请读取A元胞数组中的数字5。
>>A{1,1}='JamesBond';A{1,2}=[12;34;56];A{2,1}=pi;A{2,2}=zeros(5) ;
>>A{1,2}(3,1)
functionmyfun12
A{1,1}='JamesBond';
A{1,2}=[12;34;56];
A{2,1}=pi;
A{2,2}=zeros(5);
[mn]=size(A{1,2});
fori=1:
m
forj=1:
n
if(A{1,2}(i,j)==5)
disp(A{1,2}(i,j));
break;
end
end
end
13.M文件的编写
计算分段函数
functiony=f(x)
ifx==10
y=cos(x+1)+sqrt(x^2+1);
disp(y);
else
y=x*sqrt(x+sqrt(x));
disp(x);
end
14.函数文件的编写:
编写函数文件,求半径为r的圆的周长和面积。
function[l,s]=yuan(r);
l=2*pi*r;
s=pi*r^2;
15.图形绘制和分析:
绘制
在[-3,3]上以0.3为步长各数据点的条形图。
functionmyfun15
x=-3:
0.3:
3;
y=exp(-x.^2);
bar(x,y);
16.多项式拟合:
用一个三次多项式在区间[0,20]内逼近函数sin(x)。
functionmyfun16
x=0:
0.1:
20;
y=x.^3+x.^2+1;
newy3=polyfit(x,y,3);
y3=polyval(newy3,x);
plot(x,y,'k',x,y3,'r');
第一章:
基本概念
17.
答案
z1=3+4i
z2=1+2i
z3=2*exp(pi/6*i)
z=z1*z2/z3
第二章:
矩阵
18.已知a=magic(5),得到结果如下:
a=
17241815
23571416
46132022
101219213
11182529
现在要将第2行与第4行互换,第2列与第4列互换,得到结果如下:
17812415
102119123
42013622
23147516
11225189
答案
pos=[14325]
a(pos,pos)
19.见教材p85,其中的数据可以给出文本文件或者由下面的式子表达
a=[10*rand(24,1)+15,1*rand(24,1)+30,2*rand(24,1)+45],这是24行3列的一个矩阵,第一列表示温度,第二列表示湿度,第三列表示气压。
要求如下:
(1)将温度数据取出
(2)找出一天中最高温度
(3)按温度进行从小到大(默认)排序
(4)求出最高温度的时刻
(5)按温度进行