练习3 MATLAB程序设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
练习4 MATLAB 程序设计
一、目的和要求
(1)掌握MAM 的程序流程控制结构。 (2)掌握M 文件的结构。 (3)掌握函数调用和参数传递。 (4)了解程序性能剖析窗口。
(5)掌握利用函数句柄进行数值分析。 二、内容和步骤
MATLAB 的语法规则简洁,编程效率高,作为一个完整的程序语言,MATLAB 也有其各种程序流程控制、文件格式和函数调用的规则,通过函数的调用就能够组成庞大的程序,完成复杂的功能。 1.使用程序流程控制
Fibonacci 数列的各元素为:1,1,2,3,5,8,…,满足以下关系:
2
1211
1--+===n n n F F F F F
用M 函数文件实现,数列的元素个数为输入变量。
(l )按M 函数文件格式创建文件开头。 function f=shiyan0501(n) %SHIYAN0501 Fibonacci % Fibonacci 数列 % n 元素个数
% f 构成Fibonacci 数列向量 (2)用While 循环实现程序功能。 f(1)=1;f(2)=1;i=2; while i<=n f(i+1)=f(i-1)+f(i); i =i+1;
end
在命令窗口输入调用命令调用函数,元素个数n=10, 结果:(
)
(3)使用for 循环实现,重新编制上述函数。 结果:(
)
(4)当Fibonacci 数列中某个元素大于50时,用“break ”命令退出循环结构,修改程序如下: 结果:(
)
(5)将该.m 文件生成P 码文件: >>pcode shiyan0501
将 shiyan0501.m 删除,重新调用函数文件,执行结果如下: 结果:(
)
2.使用函数调用
计算
2
5
21
22
2432(2)!arcsin ,143
1645
2
(!)(21)
n n
x
x n x x x x n n +⨯⨯⨯≈+
+
++
<⨯⨯⨯+ 其中。
x 为输人参数,当x 不满足条件时就不计算,并显示提示;当12+n x 前的系数<0.00001时,则循环结束。
使用主函数和子函数调用来实现各项系数的运算,主函数计算各项和;子函数cal 计算系数
)
12(1
)!(2
)!2(2
2+n n n n
;子函数 factorial 求阶乘n !。主函数调用子函数cal ,子函数cal 再调用子函数
factorial ,本程序是函数的嵌套调用。
(1)子函数 factorial 计算n !,输入参数为 n ,使用 for 循环实现阶乘,输出参数为阶乘。 (2)子函数cal 计算系数)
12(1
)!(2
)!2(2
2+n n n n
,输入参数是n ,输出参数是计算结果。
function f=cal(n)
f=factorial(2*n)/(2^(2*n)*(factorial(n))^2*(2*n+1)); 本函数中调用了求阶乘的子函数factorial 。 练习:用for 、while 分别编写factorial 子函数。 结果:(
)(3)主函数shiyan0502。主函数计算arcsin x,输入参数是x,输出参数是计算结果。
Function y=shiyan0502(n)
% shiyan0502 arcsin x
n=1;
if abs(x)<1
y=x;
while cal(n)>0.00001
y=y+cal(n)*x^(2*n+1);
n=n+1;
end
else
disp(‘输入出错’)
y=0;
return
end
当输入参数不满足条件时,退出程序。
结果:(
)(4)程序的调试。当有多个函数调用时,由于函数变量的工作空间是独立的,被调用的函数执行结束后变量就消失,因此调试时要使用MATLAB调试器来查看运行过程中的变量值。
①设置断点。在需要查看程序的地方设置断点,使用选单“Breakpoints”→“Set/Clear Breakpoints”,或单击F12快捷键,或者单击工具栏的按钮实现,则在设置断点的程序行前出现大红圆点;然后选择“Run”选单,程序就会执行到设置断点的位置,暂住执行;这时将光标移到需要查看的变量上停留片刻,就可以看到该变量的当前值。在MATLAB命令窗口中显示提示符“k >>”,可以输入命令查看或修改变量。
②单步运行。调试中的单步运行很有用,当需要查看像循环过程中变量的变化时,可以使用单步运行来实现。单步运行使用选单“Debug”→“Step”,或单台F10快捷键,或者单击工具栏的按钮实现;
如果需要单步进入子函数,则可以使用“Step In ”命令,或单击Fll 快捷键,或单击工具栏的按钮。例如主函数shiyan0502可以单步运行,进入子函数cal 。同样,在单步运行程序暂停时,将光标移到需要查看的变量上停留片刻,就可以看到该变量的当前值。 (5)使用函数句柄。在命令窗口使用函数句柄来调用函数: >>h_shiyan0502=@shiyan0502 >>y=feval(@shiyan0502,0.5) 结果:(
)
3.利用泛函命令实现数值分析 已知5.0b ,1.0a ,t b e
)t (sin )t (f at
2
==-=,利用范函命令求其过零点和极小值。
(1) 创建函数shiyan0503实现上述表达式关系。
function y=shiyan0503(t)
% shiyan0503 y=(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); (2) 查看该函数的输出波形。
>>x=-10:0.1:10; 图形:( ) >>plot(x, shiyan0503(x)) >>set(gca,’ygrid ’,’on ’) (3) 利用函数名求过零点。
>>x1=fzero(‘shiyan0503’,0.5) %求在0.5附近处的过零点 结果:( )
>>x2=fzero(‘shiyan0503’,-0.5) %求在-0.5附近处的过零点 结果:( ) (4) 利用函数句柄求过零点。
>>x1=fzero(@shiyan0503,0.5)
结果:( )
>>x2=fzero(@shiyan0503,-0.5)
结果:( ) (5) 利用函数句柄求极小值。
>>x1=fminbnd(@shiyan0503,0.1,0.7) %求在0.1~0.7间的极小值 结果:( )
>>x2=fminbnd(@shiyan0503,2,5) %求在2~5间的极小值 结果:( )