MATLAB程序设计实验.docx
- 文档编号:6316302
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:21
- 大小:54.35KB
MATLAB程序设计实验.docx
《MATLAB程序设计实验.docx》由会员分享,可在线阅读,更多相关《MATLAB程序设计实验.docx(21页珍藏版)》请在冰豆网上搜索。
MATLAB程序设计实验
实用标准文案
科学计算与数据处理实验报告
学号
姓名
实验名称
MATLAB程序设计实验
实验目的
1.掌握M文件的编辑、调试和性能剖析方法
2.掌握MATLAB脚本和函数的设计方法
3.掌握MATLAB程序的基本语法、关系运算和控制结构
4.掌握串演算函数的用法
实验方案
1.编写两段简短的代码,演示MATLAB脚本和函数的不同:
脚本和函数的不同点是:
函数需要通过function来声明,一般有输入参数和输出参数。
脚本是按顺序一条一条命令逐行执行。
编写一个函数文件myfun.m和一个脚本文件myfunscript.m,来演示脚本和函数的不同。
2.编写程序演示控制结构的用法:
编写程序分别来演示循环(for、while)、分支(if-else-end、switch-case)和异常处理(try-catch)控制结构的用法。
3.编写程序分别演示以下命令的功能。
return的返回功能,input的输入功能。
keyboard语句常用在程序调试和运行中的变量修改。
用户在程序中使用keyboard语句,在系统执行此语句时,将停止文件的执行,显示提示符“K>>”并把控制权交给键盘,等待用户的输入。
当pause语句执行时,系统暂停执行,等待用户按任意键继续执行。
break终止本次循环,跳出最内层循环中剩下的语句。
error输出错误信息。
lasterr显示或返回上一条出错的信息。
warning遇到错误需要给使用者必要的提示,warning语句是常见的警告提示语句。
精彩文档.
实用标准文案
。
lastwarn存放最新的警告信息是执行包含.串演算实验:
设计实验演示以下函数的功能和用法。
eval4feval是调用某个函数的另一个方法。
MATLAB表达式/命令的字符串,.程序调试实验:
对程序错误进行调试,总结调试过程,指出并改正所给程5序的出错语句,记录程序出错时和调通后显示的图形。
进行relaxzzy(300)profileviewer)对6.程序性能剖析实验:
利用剖析器(被调用次数,记录其执行时间、relaxzzy函数中最耗时的语句,找出运行分析,并指出该语句是否可以被加速。
实验记录
脚本和函数的不同:
.编写两段简短的代码,演示MATLAB1:
函数文件)(1myfun.m文件名:
functiony=myfun(a,b)
disp(sprintf('Myfirstinputis%s',inputname
(1)))
disp(sprintf('Mysecondinputis%s',inputname
(2)))
y=a+b;
运行结果:
>>x=5;y=6;y=myfun(x,y)
?
祍映物瑳椠灮瑵椠?
硜?
Mysecondinputisy
>>y=
11
精彩文档.
实用标准文案
脚本文件:
(2)
myfunscript.m文件名:
a=2;
b=2;
clf;
x=-a:
0.2:
a;
y=-b:
0.2:
b;
fori=1:
length(y)
forj=1:
length(x)
ifx(j)+y(i)>1
z(i,j)=0.5457*exp(-0.75*y(i)^2-3.75*x(j)^2-1.5*x(j));
elseifx(j)+y(i)<=-1
z(i,j)=0.5457*exp(-0.75*y(i)^2-3.75*x(j)^2+1.5*x(j));
elsez(i,j)=0.7575*exp(-y(i)^2-6.*x(j)^2);
end
end
end
axis([-a,a,-b,b,min(min(z)),max(max(z))]);
colormap(flipud(winter));surf(x,y,z);
运行结果:
精彩文档.
实用标准文案
0.80.60.40.20221100-1-1-2-2
编写程序演示控制结构的用法:
2.:
循环)for1(>>symsnfact_n
>>fact_n=1;
>>n=input('pleaseenterapositiveinteger:
');
pleaseenterapositiveinteger:
5
>>fact_n=1;
>>forii=1:
n
fact_n=fact_n*ii;
end
>>fprintf('Thefactionalfunctionof%fis:
%f\n',n,fact_n);
Thefactionalfunctionof5.000000is:
120.000000
:
循环2()Whileclear
精彩文档.
实用标准文案
symsxnsum_xsum_x2xbarstd_dev
n=0;sum_x=0;sum_x2=0;
x=input('Pleaseenterthefirstsample:
');
whileisnumeric(x)&&isempty(x)==0
n=n+1;
xmat(n)=x;
sum_x=sum_x+x;
x=input('Pleaseenternextsample');
end
x_bar=sum_x/n;
forii=1:
n
sum_x2=sum_x2+(xmat(ii)-x_bar)^2;
end
std_dev=sqrt(sum_x2/n);
fprintf('Thenumberofdatapointsis:
%f\n',n);
fprintf('Themeanofthisdatasetis:
%f\n',x_bar);
fprintf('Thestandarddeviationis:
%f\n',std_dev);
运行结果:
Pleaseenterthefirstsample:
12
Pleaseenternextsample24
Pleaseenternextsample12
Pleaseenternextsample23
精彩文档.
实用标准文案
Pleaseenternextsample23
Pleaseenternextsample1
Pleaseenternextsample45
Pleaseenternextsample45
Pleaseenternextsample45
Pleaseenternextsample21
Pleaseenternextsample12
Pleaseenternextsample11
Pleaseenternextsample111
Pleaseenternextsample11
Pleaseenternextsample45
Pleaseenternextsample45
Pleaseenternextsample45
Pleaseenternextsample1
Pleaseenternextsample1
Pleaseenternextsample1
Pleaseenternextsample1
Pleaseenternextsample1
Pleaseenternextsample1
Pleaseenternextsample1
Pleaseenternextsample1
Pleaseenternextsample1
精彩文档.
实用标准文案
Pleaseenternextsample1
Pleaseenternextsample1
Pleaseenternextsample1
Pleaseenternextsample1
Pleaseenternextsample1
Pleaseenternextsample1
Pleaseenternextsample1
Pleaseenternextsample1
Pleaseenternextsample1
Pleaseenternextsample1
Pleaseenternextsample1
Pleaseenternextsample1
Pleaseenternextsample1
Pleaseenternextsample1
Pleaseenternextsample1
Pleaseenternextsample1
Pleaseenternextsample1
Pleaseenternextsample1
Pleaseenternextsample1
Pleaseenternextsample1
Pleaseenternextsample1
Pleaseenternextsample1
精彩文档.
实用标准文案
Pleaseenternextsample1
Pleaseenternextsample1
Pleaseenternextsample1
Pleaseenternextsample1
Pleaseenternextsample11
Pleaseenternextsample
Thenumberofdatapointsis:
53.000000
Themeanofthisdatasetis:
10.886792
Thestandarddeviationis:
19.950562
:
)if-else-end分支(3clc
clear
symsnumber1number2sum2numberssub2numbers
number1=input('pleaseenternumber1as:
');
number2=input('pleaseenternumber2as:
');
n=input('ifyouwanttoexecutesumcalculation,youshouldenter
otherwiseenter-1;');
ifn==1
fprintf('thesumofthetwonumbers%f\nand%f\n
is%f\n',number1,number2,number1+number2);
elseifn==-1
fprintf('thesumofthetwonumbers%f\nand%f\nis%f\n',
精彩文档.
实用标准文案
number1,number2,number1-number2);
end
运行结果:
pleaseenternumber1as:
5
pleaseenternumber2as:
7
ifyouwanttoexecutesumcalculation,youshouldenter,otherwise
enter-1;1
thesumofthetwonumbers5.000000
and7.000000
is12.000000
分支:
4)switch(clear
symsscore
score=input('pleaseenterthescoreofthestudentsubjectthatyou
wanttokonw','s');
switch(score)
case{'A','a'}
!
');?
这门课你做的非常好disp('
case{'B','b'}
');良好disp('
case{'C','c'}
');
中等disp('
精彩文档.
实用标准文案
case{'D','d'}
');及格disp('
case{'E','e'}
')对不起,你需要重修!
disp('
otherwise
)disp('对不起,输入错误!
end
运行结果:
pleaseenterthescoreofthestudentsubjectthatyouwanttoknow
a
!
该门课你做的非常好:
try-catch异常处理(5)
clear
clc
A=sym(input('pleaseentermatrixA=','s'))
B=sym(input('pleaseentermatrixB=','s'))
try
disp('ThemultiplicationofAandBis')
C=A*B
catch
try
disp('ThedoltmultiplicationofAandBis')
精彩文档.
实用标准文案
D=A.*B
catch
disp('ThetwomatricesAandBcannotbeexecutedmatrixand
dotmultiplication.');
end
end
运行结果:
输入正确时的运行结果:
pleaseentermatrixA=[2345]
A=
[2,3,4,5]
pleaseentermatrixB=[3456]
B=
[3,4,5,6]
ThemultiplicationofAandBis
ThedoltmultiplicationofAandBis
D=
6,12,20,30][
输入错误时的运行结果:
pleaseentermatrixA=[2345]
A=
[2,3,4,5]
精彩文档.
实用标准文案
pleaseentermatrixB=[34]
B=
[3,4]
dotandbeexecutedmatrixmatricesAandBcannotThetwo
multiplication.
:
编写程序分别演示以下命令的功能3.:
return的功能和用法
(1)
s=0;
fori=1:
50
s=s+i;
ifs>=500
')disp('您要的结果是:
disp(s)
return
end
end
运行结果:
您要的结果是:
528
的功能和用法:
input
(2)
clc
clear
精彩文档.
实用标准文案
');请输入数字a=input('ifa>0
')输入的大于零disp('
elseifa==0
')disp('输入的等于零
else
')disp('输入的小于零
end
运行结果:
1
请输入数字:
输入的大于零:
keyboard的功能和用法(3)clear
clc
');输入被除数:
x=input('');输入除数:
y=input('ify==0
0');errordlg('除数不能为
keyboard
n=x/y;
')您要的结果是:
disp('
disp(n)
精彩文档.
实用标准文案
else
n=x/y;
')您要的结果是:
disp('
disp(n)
end
运行结果:
5输入被除数:
0输入除数:
K>>1
ans=
1
的功能和用法:
(4)pausex=-pi:
pi/10:
pi
y1=cos(x);
subplot(1,2,1);
plot(x,y1);
pause(5)
y2=sin(x);
subplot(1,2,2);
plot(x,y2);
精彩文档.
实用标准文案
运行结果:
110.80.80.60.60.40.40.20.200-0.2-0.2-0.4-0.4-0.6-0.6-0.8-0.8-1-142-20-4-2024-4
的功能和用法:
break(5)
forn=1:
100
ifmod(n,6)~=0
continue
end
break
end
')6整除的数是:
disp('小于100的自然数中第一个能被
disp(n)
运行结果:
6整除的数是:
小于100的自然数中第一个能被6
:
的功能和用法(6)warningclear
精彩文档.
实用标准文案
clc
');输入被除数:
x=input('');y=input('输入除数:
ify==0
0');warning('除数不能为
else
n=x/y;
')您要的结果是:
disp(
disp(n)
end
运行的结果:
45输入被除数:
0
输入除数:
0!
Warning:
除数不能为:
(7)error的功能和用法clear
clc
');输入被除数:
x=input('');y=input('输入除数:
ify==0
0');除数不能为error('
else
精彩文档.
实用标准文案
n=x/y;
')disp(您要的结果是:
disp(n)
end
运行的结果:
45输入被除数:
0输入除数:
0!
?
?
?
除数不能为:
lasterr的功能和用法(8)>>lasterr
ans=
0
除数不能为:
lastwarn的功能和用法(9)
0');>>warning('被除数不能为0Warning:
被除数不能为0');除数不能为>>warning('0除数不能为Warning:
>>lastwarn
ans=
0除数不能为:
4.串演算实验:
eval
(1)的功能和用法
精彩文档.
实用标准文案
x=-pi:
pi/10:
pi;
subplot(2,1,1);
eval('plot(cos(x))');
subplot(2,1,2);
eval('plot(sin(x))')
运行结果:
10.50-0.5-1252010155010.50-0.5-12515200510
:
)feval的功能和用法(2>>temp=feval('feval2',3,5);
Myfirstinputis
Mysecondinputis_x0005_
>>temp
temp=
8
feval2.m文件名:
functiony=feval2(a,b)
精彩文档.
实用标准文案
disp(sprintf('Myfirstinputis%s',inputname
(1)))
disp(sprintf('Mysecondinputis%s',inputname
(2)))
y=a+b;
:
.程序调试实验5:
)出错时(1运行结果:
>>randn('seed',1);
>>x=randn(1,100);
>>Debug_Test(x);
?
?
?
Errorusing==>plot
Vectorsmustbethesamelengths.
Errorin==>Debug_Test>barzzy0at18
plot(xxmu,yy,'r','Linewidth',3)
Errorin==>Debug_Testat7
barzzy0(nn,xx,xmu,xstd)
2520151050321-1-3-20
精彩文档.
实用标准文案
:
2)改正后(。
改为xxmu=xmu*ones(size(yy))把原程序中的xxmu=xmu*size(yy)运行结果:
>>randn('seed',1),x=randn(1,100);Debug_Test(x)
ans=
1
6192092116413
2520151050321-3-2-10
:
6.程序性能剖析实验
精彩文档.
实用标准文案
函数中最耗时的语句是relaxzzy由上例图可知,...newplate(j,k)=(plate(jm1,km1)/2+plate(jm1,k)+...plate(jm1,kp1)/2+plate(j,km1)+plate(j,kp1)+精彩文档.
实用标准文案
plate(jp1,km1)/2+plate(jp1,k)+plate(jp1,kp1)/2)/6
次。
这个语句可以加速,用过,被调用次数为3000000其执行时间为0.651s向量化改为矩阵的形式,就可以加速了。
实验总结
函数文件都是由一系列脚本文件与MMATLAB脚本和函数的异同点:
M
(1)
脚本文件没有参数传递功能,但的语句组成的相对独立的一个运行体。
M函数文件的格式有严格规定,它必须以MM函数文件有此功能。
”开头。
函数文件与脚本文件的主要区别在于:
函数文件一function“
函数而脚本文件没有参数与返回结果。
都要有返回结果,般都要带参数,
而脚,运行完毕就自动被清除,运行期间有效,文件的变量是局部变量行完毕后仍被保存在内存中。
执本文件的变量是全局变量程序调试和性能剖析的方法:
程序调试的基本方法有:
设置或清MATLAB
(2)执行流当遇见函数时进入函数内部,stepout除断点,单步执行,stepin程跳出函数,观察变量或表达式的值。
性能剖析的方法有:
简单计算程序。
toc。
全面分析程序运行时间Profiler运行时间:
tic,,有效地使用matlabMATLAB程序运行速度的有效措施:
要学好(3)提高写核C-mexmatlab,能不用循环的地方,尽量不要使用。
向量化,使用心。
知道了函数文件和脚文件的编写,运行和调试。
(4)通过这次试验我掌握了M程序设计中的基本语法,matlab本文件的相同点和不同点。
同时也掌握了的分支结构switch和和forw
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 程序设计 实验