练习3 MATLAB程序设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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间的极小值 结果:( )

相关文档
最新文档