matlab实验报告69013.docx
- 文档编号:24205525
- 上传时间:2023-05-25
- 格式:DOCX
- 页数:18
- 大小:137.68KB
matlab实验报告69013.docx
《matlab实验报告69013.docx》由会员分享,可在线阅读,更多相关《matlab实验报告69013.docx(18页珍藏版)》请在冰豆网上搜索。
matlab实验报告69013
实验报告
课程名称:
可视化计算机语言
实验项目名称:
matlab程序设计
学院:
信息工程学院
专业:
电子信息工程
指导教师:
报告人:
学号:
班级:
实验时间:
实验报告提交时间:
教务部制
一、实验目的与要求:
1、熟练掌握matlab的程序流程控制结构.
2、熟悉掌握M文件的结构和函数调用。
3、掌握内联函数和函数句柄的使用.
4、了解程序性能剖析窗口。
二、内容和步骤:
MATLAB的语法规则简洁,编程效率高,作为一个完整的程序语言,MATLAB也有各种程序流程控制,文件格式和函数调用的规则,通过对函数的调用就能够组成庞大的程序,完成复杂的功能.
1.使用程序流程控制
Fibonacci数列的各元素为:
1、1、2、3、5、8、。
..满足一下关系
F1=1F2=1Fn=Fn-1+Fn—2
用M函数文件实现,数列的元素个数为输入变量.
(1)按M函数文件格式创建文件开头。
functionf=shiyan0501(n)
%SHIYAN0501
%Fibonacci数列
%n元素个数
%f构成Fibonacci数列向量
%
%copyright2015—11-25
(2)用while循环实现程序功能
f
(1)=1;
f
(2)=1;
i=2;
whilei〈=n
f(i+1)=f(i-1)+f(i);
i=i+1;
End
运行后,输入参数10,运行结果如下所示:
(3)使用for循环实验
fori=2:
n
f(i+1)=f(i—1)+f(i);
end
运行结果如下所示:
(4)当某个元素大于50时,退出循环结构,程序修改如下:
fori=2:
n
iff(i)>10
break
else
f(i+1)=f(i-1)+f(i);
end
end
当某个元素大于50,程序便退出循环结构
当n=10,最后一个元素刚好是大于50的,正好退出循环结构
当n=12时,第十个元素对应的f(i)大于50,于是退出循环结构,不再运行f(11),f(12)了.
(5)将该.m文件生成P码文件
>>pcodeshiyan0501
将shiyan0501.m删除,重新运行该文件夹,结果如下所示:
练习:
将该M文件函数改为M脚本文件,将数列元素个数通过键盘输入,程序应该如何修改?
①将M文件函数另存为M脚本文件;
②在函数前加
n=input(’pleaseinputanum:
’)
便可通过键盘键入文件
运行结果如下所示:
pleaseinputanum:
12
n=
12
ans=
1123581321345589
2.使用函数调用
计算arcsin(x),
(1)子函数factorial计算n!
子函数factorial计算n!
输入参数为n,使用for循环实现的阶乘,输出参数为阶乘。
在matlab界面中选择“file->new—>function”命令,创建一个新的函数文件,修改输入输出参数和函数名。
functionf=factorial(n)%[output_args]=Untitled7(input_args)
%UNTITLED7此处显示有关此函数的摘要
%此处显示详细说明
f=1;
form=1:
n
f=m*f;
(2)子函数cal.子函数cal是计算系数
functionk=cal(n1)
%计算系数
form=1:
n1
k=factorial(2*n1)/(2^(2*n1)*(factorial(n1))^2*(2*n1+1));
end
输入参数n=5
运行结果如下图所示:
>>cal(5)
ans=
0。
0224
本函数中调用了求阶乘的子函数factorial
(3)主程序shiyan0502.求主函数计算arcsinx,输入参数为x,输出参数为arcsinx的计算结果。
程序如下所示:
functiony=shiyan0502(x)
%shiyan0502arcsinx
n=1;
ifabs(x)〈1
y=x;
whilecal(n)>0.0001
y=y+cal(n)*x^(2*n+1);
n=n+1;
end
else
disp('输入错误');
y=0;
return
end
运行结果:
〉>y=shiyan0502(0.7)
y=
0.7754
当输入参数不满足条件是退出程序:
〉>y1=shiyan0502
(2)
输入错误
y1=
0
练习:
如果不使用子函数factorial,而直接在cal函数中计算阶乘,应如何修改程序。
修改cal函数如下所示:
functionk=cal(n1)
%计算系数
f=1;
f1=1;
form=1:
2*n1
f1=m*f1;
end
form=1:
n1
f=m*f;
end
k=f1/(2^(2*n1)*f^2*(2*n1+1));
end
调用程序shiyan0502,运行结果如下所示:
〉>y=shiyan0502(0。
7)
y=
0。
7754
运行结果与使用子函数factorial的运行结果一致。
(4)使用程序性能剖析。
选择菜单‘view’—〉‘profile’命令;或使用在命令窗口输入‘profileviewer'命令都可以打开程序性能剖析窗口.
在程序性能剖析窗口的‘命令输入栏’中输入需要剖析的命令,‘y=shiyan0502(0。
7)',然后单击‘startprofiling’按钮,
查看剖析报告。
(5)程序的调试。
当有多个函数调用时,由于函数变量的工作空间是独立的,被调用的函数执行结束后变量消失,因此调试时要使用matlab调试器查看运行过程中的变量值。
①设置断点。
在需要查看的程序的地方设置断点,
〉>shiyan0502(0.7)
K>〉y
y=
0.7000
K>〉x=0。
5
x=
0.5000
在K〉>输入x=0.5即可将x的值从0.7修改为0。
5.
去除断点,查看结果:
ans=
0.7236
结果与x值为0.7时不一致,当x=0.7时,y=0。
7754,由此可知,x的值已被修改。
②单步运行
>>shiyan0502(0。
7)
9n=n+1;
K>>
按单步运行键:
可看到箭头不断的移动:
(6)使用函数句柄。
在命令窗口使用函数句柄调用函数。
〉〉h_shiyan0502=@shiyan0502
h_shiyan0502=
@shiyan0502
>>y=feval(h_shiyan0502,0。
5)
y=
0。
5236
(7)使用全局变量。
Matlabe的编程不提倡使用全局变量,本例中的程序主要是为了查看全局变量的概念。
将n作为全局变量,子函数factorial不修改,子函数cal程序和主函数shiyan0502修改如下:
functiony=shiyan0502(x)
%shiyan0502arcsinx
globaln;
n=1;
ifabs(x)〈1
y=x;
whilecal(n)>0。
0001
y=y+cal(n)*x^(2*n+1);
n=n+1;
end
else
disp('输入错误');
y=0;
return
end
functionk=cal(n1)
globaln
form=1:
n
k=factorial(2*n)/(2^(2*n)*(factorial(n))^2*(2*2*n+1));
End
global为设置的全局变量,子函数没有输入变量,而用全局变量n传递。
在全局变量前设置断点,然后运行程序,当程序运行到断点处停止,接着不断使用单步运行调试,结果如下所示:
|
|
|
练习:
使用单步运行调试,查看全局变量n的变化,并在工作空间查看n;
3、利用泛函命令实现数值分析
①创建函数shiyan0503实现上述表达式关系。
functiony=shiyan0503(t)
%shiyan0503y=(sin(t))。
^2。
*exp(a*t)—b*abs(t)
a=0.1;
b=0.5;
y=(sin(t))。
^2.*exp(a*t)-b*abs(t);
②查看该函数的输出波形,如下图所示:
③利用函数名求零点,在上图中可以看相互在0的附近有2个过零点
x1=fzero('shiyan0503',0。
5)
x2=fzero('shiyan0503’,-0.5)
运行结果如下所示:
〉>shiyan0503_1
x1=
0.5198
x2=
-0.5993
④利用函数句柄求过零点
〉>x1=fzero(@shiyan0503,0.5)
x1=
0.5198
>>x2=fzero(@shiyan0503,-0.5)
x2=
—0.5993
⑤利用函数句柄求极小值,由②图可知,极小值有多个,查看其中2个
>>x1=fminbnd(@shiyan0503,0。
1,0.7)
x1=
0。
2511
〉>x2=fminbnd(@shiyan0503,2,5)
x2=
3。
3233
练习:
利用函数句柄求[-1,1]的面积。
>>x=—1:
0.1:
1;
〉〉y=shiyan0503(x);
〉〉area=trapz(x,y)%用梯形计算积分
area=
0.0485
〉〉area1=quad(@shiyan0503,—1,1)%用quad计算积分
area1=
0.0469
(2)使用内联函数
①创建内联函数f
>>a=0.1;
〉〉b=0.5;
〉>f=inline(’(sin(t)).^2。
*exp(。
1*t)—0。
5*abs(t)',’t’)
f=
内联函数:
f(t)=(sin(t)).^2。
*exp(.1*t)-0.5*abs(t)
②绘制曲线图
〉>t=—10:
0.1:
10;
〉〉y=feval(f,t);
〉〉plot(t,y)
③求过零点
〉>x1=fzero(f,0。
5)
x1=
0.5198
④求极小值
〉〉x2=fminbnd(f,0。
1,0.7)
x2=
0.2511
练习:
利用内联函数求8附近的极小值
x=fminbnd(f,7。
9,8.1)
x=
8。
0999
x2=fminbnd(f,7。
99,8。
01)
x2=
8。
0099
(3)使用字符串
①创建字符串
〉>g=’(sin(x))。
^2。
*exp(。
1*x)-.5*abs(x)'
g=
(sin(x)).^2。
*exp(。
1*x)-.5*abs(x)
②绘制曲线图
>>x=—10:
0。
1:
10;
〉>y=eval(g,x);
>〉plot(x,y)
运行程序得到下图:
③求零点
>>x1=fzero(g,0.5)
x1=
0。
5198
自我练习:
(1)编写函数计算输入参数r为圆半径的圆面积和周长。
程序如下所示:
g='pi*r^2'
k=’2*pi*r’
r=input('请输入圆的半径r:
’)
disp('圆的面积:
’)
y=eval(g,r)
disp('圆的周长:
’)
y1=eval(k,r)
运行结果如所示:
假设输入圆的半径为3
g=
pi*r^2
k=
2*pi*r
请输入圆的半径r:
3
r=
3
圆的面积:
y=
28。
2743
圆的周长:
y1=
18。
8496
(2)创建内联函数计算y=sin(r)/r,使用函数句柄调用,并绘制曲线。
>>y=inline('sin(r)。
/r')
y=
内联函数:
y(r)=sin(r)./r
〉>x=—10:
0。
1:
10;
〉〉f=feval(y,x);
>>plot(x,f)
运行结果如下图所示:
三、实验结论:
通过该实验较为熟练地掌握matlab的一些基本操作,掌握熟练掌握matlab的程序流程控制结构,
熟悉掌握M文件的结构和函数调用,掌握内联函数和函数句柄的使用,了解程序性能剖析窗口.
指导教师批阅意见:
成绩评定:
指导教师签字:
年月日
备注:
注:
1、报告内的项目或内容设置,可根据实际情况加以调整和补充.2、教师批改学生实验报告时间应在学生提交实验报告时间后10日内。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlab 实验 报告 69013