matlab实验报告.docx
《matlab实验报告.docx》由会员分享,可在线阅读,更多相关《matlab实验报告.docx(21页珍藏版)》请在冰点文库上搜索。
matlab实验报告
1.练习下面指令,写出每个指令的作用。
cd,clear,dir,path,help,who,whos,save,load。
Cd将用户目录设置成当前目录
Clear用于删除MATLAB工作空间中的变量(预定义变量不能被删除)
Dir列举当前文件夹里(或指定文件夹)所有的文件与文件夹
Path把用户目录临时纳入搜索路径
Help是查询函数语法的最基本方法,查询信息直接显示在命令窗口
Who显示在MATLAB工作空间中驻留的变量名清单
Whos显示在MATLAB工作空间中驻留的变量名清单以及它们的维数、所占字节数以及变量的类型
Save生成MAT文件,保存workspace中的变量到文件中(其中MAT文件可以把当前MATLAB工作空间中的一些有用的变量长久地保留下来)
Load在workspace中载入mat 文件中的数据。
3.求
的算术运算结果。
用MATLAB运行的过程和结果如下:
x=(12+2*(7-4))/3^2x=2
4.求出下列表达式的值,然后显示matlab工作空间的使用情况并保存全部变量:
用MATLAB运行的过程和结果如下:
>>Z1=2*sin(85*pi/180)/(1+exp
(2))
Z1=0.2375>>x=[2,1+2i;-0.45,5];
Z2=log(x+sqrt(1+x^2))/2
Z2=0.7114-0.0253i0.8968+0.3658i
0.2139+0.9343i1.1541-0.0044i
6.写出完成下列操作的命令:
(1)建立3阶单位矩阵A;
(2)建立5*6随机矩阵C,其元素为[100,200]范围内的随机整数;
(3)产生均值为1,方差为0.2的50个正态分布的随机数;(4)产生和A同样大小的幺矩阵;
(5)将矩阵A的对角线元素加30;(6)从矩阵A提取对角线元素,并以这些元素构成对角阵B。
(1)>>eye(3)
ans=100
010
001
(2)>x=100+(200-100)*rand(5,6)
x=181.4724109.7540115.7613114.1886165.5741175.7740
190.5792127.8498197.0593142.1761103.5712174.3132
112.6987154.6882195.7167191.5736184.9129139.2227
191.3376195.7507148.5376179.2207193.3993165.5478
163.2359196.4889180.0280195.9492167.8735117.1187
(3)>>y=1+sqrt(0.2)*rand(10,5)
y=1.31581.19621.12341.33601.3760
1.01421.17061.30401.11411.1137
1.12381.34231.29301.22631.3642
1.02061.35561.07271.31261.1089
1.04341.08361.05321.39841.4156
1.36831.21901.22291.42901.1565
1.31071.19931.42921.24471.0879
1.14181.28901.15221.06201.1123
1.42501.31721.26171.06681.2755
1.01541.33751.10011.11521.2117
>>
(4)>>A=eye(3)
A=100
010
001
>>ones(size(A))
ans=111
111
111
>>
(5>>A+30*eye(size(A))
ans=3100
0310
0031
>>
(6)>>C=diag(A);B=diag(C)
B=100
010
001
7.已知:
求下列表达式的值:
(1)
和
(其中I为单位矩阵)
(2)
和
(3)
和
(4)
和
(5)
和
(1)>>A=[12,34,-4;34,7,87;3,65,7];
B=[1,3,-1;2,0,3;3,-2,7];
K11=A+6*B
K11=1852-10
467105
215349
(2)>>K21=A*B
K22=A.*B
K21=684462
309-72596
154-5241
K22=121024
680261
9-13049
(3)>>K31=A^3
K32=A.^3
K31=3722623382448604
247370149188600766
78688454142118820
K32=172839304-64
39304343658503
27274625343
(4)>>K41=A/B
K42=B\A
K41=16.4000-13.60007.6000
35.8000-76.200050.2000
67.0000-134.000068.0000
K42=109.4000-131.2000322.8000
-53.000085.0000-171.0000
-61.600089.8000-186.2000
(5)>>K51=[A,B]
K52=[A([1,3],:
);B^2]
K51=1234-413-1
34787203
36573-27
K52=1234-4
3657
451
11019
20-540
8.下面是一个线性方程组:
(1)求方程的解。
(2)将方程右边向量元素
改为0.53,再求解,并比较
的变化和解的相对变化。
(1)>>formatrat;H=hilb(4)
H=11/21/31/4
1/21/31/41/5
1/31/41/51/6
1/41/51/61/7
>>A=H(1:
3,2:
4)
A=1/21/31/4
1/31/41/5
1/41/51/6
>>B=[0.95;0.67;0.52]
B=19/20
67/100
13/25
>>X=inv(A)*B
X=6/5
3/5
3/5
(2)>>formatrat;H=hilb(4);A=H(1:
3,2:
4);B=[0.95;0.67;0.53];X=inv(A)*B
X=3
-33/5
33/5
1.编写求解方程的根的函数(这个方程不一定为一元二次方程,因的不同取值而定),这里应根据的不同取值分别处理,有输入参数提示,当时应提示“为恒不等式!
”。
并输入几组典型值加以检验。
程序:
disp('关于方程ax^2+bx+c=0')
a=input('请输入系数a=');
b=input('b=');
c=input('c=');
ifa==0&&b==0
ifc==0
disp('解为全体实数');
else
disp('为恒不等式!
');
end
else
P=[a,b,c];
x=roots(P)
enddisp('关于方程ax^2+bx+c=0')
a=input('请输入系数a=');
b=input('b=');
c=input('c=');
ifa==0&&b==0
ifc==0
disp('解为全体实数');
else
disp('为恒不等式!
');
end
else
P=[a,b,c];
x=roots(P)
end
实验结果:
>>Untitled
关于方程ax^2+bx+c=0
请输入系数a=0
b=0
c=2
为恒不等式!
Untitled
关于方程ax^2+bx+c=0
请输入系数a=0
b=0
c=0
解为全体实数
Untitled
关于方程ax^2+bx+c=0
请输入系数a=3
b=4
c=1
x=
-1.0000
-0.3333
2.输入一个百分制成绩,要求输出成绩等级A+、A、B、C、D、E。
其中100分为A+,90分~99分为A,80分~89分为B,70分~79分为C,60分~69分为D,60分以下为E。
要求:
(1)用switch语句实现。
(2)输入百分制成绩后要判断该成绩的合理性,对不合理的成绩应输出出错信息。
g=input('请输入成绩');
ifg<0||g>100
disp('错误,输入的成绩应为0~100间的数')
else
g=fix(g/10);
switchg
case{10}
disp('A+');
case{9}
disp('A');
case{8}
disp('B');
case{7}
disp('C');
case{6}
disp('D')
otherwise
disp('E');
end
end
试验结果:
>>sys
请输入成绩100
A+
sys
请输入成绩50
E
sys
请输入成绩-10
错误,输入的成绩应为0~100间的数
3.利用for循环语句编写计算n!
的函数程序,取n分别为-89、0、3、5、10验证其正确性(输入n为负数时输出出错信息)。
>>n=input('请输入n=');
ifn<0
disp('错误,n取值必须为正数');
else
y=1;
fori=1:
n
y=y*i;
end
disp('n!
=');
disp(y)
end
试验结果:
>>sys
请输入n=-3
错误,n取值必须为正数
sys
请输入n=10
n!
=
3628800
4.Fibonacci数组的元素满足Fibonacci规则:
,;且。
现要求该数组中第一个大于10000的元素。
>>a
(1)=1;
a
(2)=1;
k=3;
a(k)=a(k-1)+a(k-2);
whilea(k)<10000
k=k+1;
a(k)=a(k-1)+a(k-2);
end
ak=a(k)
k
输出结果:
ak=10946
k=21
5.根据
,求
的近似值。
当n分别取100、1000、10000时,结果是多少?
程序:
n=[100100010000];
forj=1:
3
y=0;
k=n(j);
fori=1:
k
y=y+1/i/i;
end
pai=sqrt(6*y);
disp('n=');
disp(n(j));
disp('π的近似值为');
disp(pai);
end
试验结果:
>>sys
n=100
π的近似值为
3.1321
n=1000
π的近似值为
3.1406
n=10000
π的近似值为3.1415
1.将图形窗口分成两格,分别绘制正割和余割函数曲线,并加上适当的标注。
要求:
1)必须画出0到
,即一个周期的曲线。
2)正割曲线为红色点划线输出,余割曲线为蓝色实线输出。
3)图形上面表明正割和余割公式,横轴标x,纵轴标y。
4)将图形窗口分成两格,正割在上,余割在下。
>>x1=linspace(0,2*pi,60);
x2=linspace(0,2*pi,1000);
s=1./(cos(x1)+eps);
c=1./(sin(x2)+eps);
subplot(2,1,1);
plot(x1,s,’r-.’);
title(‘sec(x)’);
xlabel(‘X’);
ylabel(‘Y’);
subplot(2,1,2);
plot(x2,c,’b-‘);
title(‘csc(x)’);
axis([0,2*pi,-200,200]);
xlabel(‘X’);
ylabel(‘Y’);
2.将图形窗口分成两个窗格,分别绘制出函数:
在[0,3]区间上的曲线,并利用axis调整轴刻度纵坐标刻度,使
在[0,12]区间上,
在[-2,1.5]区间上。
>>x=0:
pi/100:
3;
y1=2*x+5;
y2=x.^2-3*x+1;
subplot(1,2,1);
plot(x,y1);
title('y1=2x+5');
axis([0,3,0,12]);
subplot(1,2,2);
plot(x,y2);
title('y2=x^2-3x+1');
axis([0,3,-2,1.5]);
5.生成一个圆柱体(可用cylinder函数),并进行光照和材质处理。
[x,y,z]=cylinder(3);
subplot(2,2,1);
surf(x,y,z);
shadinginterp;
title('未处理');
holdon;
subplot(2,2,2);
surf(x,y,z);
title('光照处理');
light('Position',[-5,-5,0]);
shadinginterp;
lightingflat;
holdon;
subplot(2,2,3);
surf(x,y,z);
title('材质处理');
materialshiny;
shadinginterp;
lightingphong;
holdon;
subplot(2,2,4);
surf(x,y,z);
title('光照、材质处理');
light('Position',[-5,-5,0]);
materialshiny;
shadinginterp;
lightingflat;
holdon;
1.利用matlab提供的rand函数生成30,000个符合均匀分布的随机数,然后检验随机数的性质:
(1)均值和标准方差;
(2)最大元素与最小元素;
(3)大于0.5的随机数个数占总数额百分比。
(1)>>a=rand(300,100);
b=mean(mean(a));
c=mean(mean((a-b).*(a-b)))
c=0.0835
b=0.4988
(2)x=max(max(a))
y=min(min(a))
x=1.0000
y=4.8345e-005
(3)>>f=length(find(a>0.5))/30000
f=0.5006
3.
(1)求函数
在点
的数值导数。
>>x=linspace(0,2*pi,20);
y=sin(x).^2+cos(x).^2;
dy=diff(y);
p=polyfit(x(1,2:
end),dy,7);
ans=polyval(p,[pi/6pi/4pi/3pi/2])
ans=1.0e-016*
0.55350.90900.3726-0.6325
(2)用数值方法求积分
>>x=0:
0.01:
1;
y=log(1+x)./(1+x.^2);
trapz(x,y)
ans=0.2722
4.求方程
在
附近的根。
functionf=fz(x)
%UNTITLEDSummaryofthisfunctiongoeshere
%Detailedexplanationgoeshere
f=3*x+sin(x)-exp(x);
end
>>fzero('fz',1.5)
ans=1.8900
5.求函数
在(0,1)内的最小值。
functionf=fz(x)
%UNTITLEDSummaryofthisfunctiongoeshere
%Detailedexplanationgoeshere
f=(x^3+cos(x)+x*log(x))/exp(x);
end
>>[x,fval]=fminbnd('fz',0,1)
x=0.5223
fval=0.3974
1.分解因式
(1)
(2)5135
答:
(1)symsxy
f=x^4-y^4
factor(f)
f=x^4-y^4
ans=(x-y)*(x+y)*(x^2+y^2)
(2)f=5135
factor(f)
f=5135
ans=51379
2.
答:
symsx
f=x*(exp(sin(x))+1)-2*(exp(tan(x))-1)/sin(x)^3
limit(f,x,inf,'left')
f=
x*(exp(sin(x))+1)-(2*exp(tan(x))-2)/sin(x)^3
ans=NaN
1.利用imread()函数读取一幅图像,假设其名为flower.tif,存入一个数组中;
>>path(path,'G:
\work\软件\matlab实验\实验七图片')
>>I=imread('flower.tif');
2.利用whos命令提取该读入图像flower.tif的基本信息;
>>whosI
NameSizeBytesClassAttributes
I202x270x4218160uint8
3.利用imshow()函数来显示这幅图像;
>>imshow(I(:
:
1:
3))
2.文件my_exam.dat包含的混合的字母和数值如下:
Joe gradeA 4.9 pass
susan gradeD 2.0 fail
robgradeC3.1pass
用textread函数把4列数据全部读出来取出放在4个变量中
答:
>>[namegragradesanswer]=textread('my_exam.dat','%s%s%f%s')
name='Joe'
'susan'
'rob'
gra=
'gradeA'
'gradeD'
'gradeC'
grades=
4.9000
2.0000
3.1000
answer=
'pass'
'fail'
'pass'
3.计算当x=[01]时f(x)=exp(x)的值,并将结果写入到文件my.txt中。
答:
x=0:
0.1:
1;
y=[x;exp(x)];
fid=fopen('G:
\my.txt','wt');
fprintf(fid,'%6.2f%12.8f\n',y);
fclose(fid);
4.将5行5列“魔方阵”存入二进制文件中。
答:
代码:
fid=fopen('E:
\my1.dat','w');
a=magic(5);
fwrite(fid,a,'long');
fclose(fid);
从二进制文件中读取“魔方阵”。
fid=fopen('E:
\my1.dat','r');
[A,count]=fread(fid,[5,inf],'long');
fclose(fid);
A
A=
17241815
23571416
46132022
101219213
11182529