matlab 实验6 函数及其调用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数学实验练习六:函数

一、1)写一个 MATLAB 函数 piFun01.m 来计算下列级数:

f(n) = 4*(1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + ...)

其中 n 为函数的输入,代表上述级数的项数,级数和 f(n) 则是函数的输出。

解:function f=pifun01(n)

f=0;

for i=1:n

f=f+4*(-1)^(i+1)/(2*i-1);

end

>> piFun01(100000)

ans =

3.1416

2)使用 tic 和 toc 指令来测量 piFun01(100000) 的计算时间。如果你不知道如何使用这两个指令,请使用 help tic 及 help toc 来查出它们的用法。我的旧计算机是 Pentium 450MHz,所得的计算时间约为 2 秒。请说明你的计算机规格以及其计算时间。

解:function f=pifun01(n)

tic

f=0;

for i=1:n

f=f+4*(-1)^(i+1)/(2*i-1);

end

f=toc

二、写一个 MATLAB 的递归函数 fibo.m 来计算 Fibonacci 数列,

其定义如下:

fibo(n+2) = fibo(n+1)+fibo(n)

此数列的启始条件如下:

fibo(1) = 0, fibo(2) = 1.

a) fibo(25) 的返回的值是多少?

解:function f=fibo(n)

if n==1

f=0;

elseif n==2

f=1;

else

f=fibo(n-1)+fibo(n-2);

end

>> clear

>> fibo(25)

ans =

46368

b)使用 tic 和 toc 指令来测量 fibo(25) 的计算时间。我的计

算机是 Pentium 2GHz,所得的计算时间约为 3.35 秒。请说明你的计算机规格以及其计算时间。

解: function f=fibo(n)

tic

if n==1

f=0;

elseif n==2

f=1;

else

f=fibo(n-1)+fibo(n-2);

end

toc

c) 你们已学过离散数学,知道 Fibonacci 数列的第 n 项可以

直接表示成

fibo(n)={[(1+a)/2]^(n-1)-[(1-a)/2]^(n-1)}/a

其中 a 是 5 的平方根。写利用上式一个 MATLAB 的非递归函数 fibo2.m 来计算 Fibonacci 数列。

解:function f=fibo2(n)

if n==1

f=0;

elseif n==2

f=1;

else

fibo2(n)=(((1+sqrt(5))/2)^(n-1)-((1-sqrt(5))/2)^(n-

1))/sqrt(5);

f=fibo2(n)

end

>> fibo2(25)

f =

4.6368e+004

d) fibo2(25) 的值为何?是否和 fibo(25) 相同?

不相同

e)请计算 fibo2(25) 的计算时间,并和 fibo(25) 比较。

Elapsed time is 0.000060 seconds.

f)请比较并说明使用 fibo.m 和 fibo2.m 来计算 Fibonacci

数列的优缺点。

解:fibo.m 计算比较精确,而fibo2.m则计算比较粗糙,但运算数度要快

三、假设在期中考后,我们用一个向量 x 来储存每个人的考试成绩。

请写一个函数 ranking01.m,输入为成绩向量 x,输出则是此成绩的排名。例如,当 x = [92, 95, 58, 75, 69, 82] 时,ranking(x) 回传的排名向量则是 [2, 1, 6, 4, 5, 3],代表 92 分是排名第 2,95 分是排名第 1,58 分是排名第 6,等等。

提示

你可以使用循环(如 for-loop 和 while-loop 等)完成此作业,但是程序代码会比较凌乱,执行效率也会变差。所以请尽量利用sort 指令,而不要用到循

解:function a=ranking01(x)

c=length(x);

m=-sort(-x);

for i=1:c

a(i)=find(m==x(i)); end

相关文档
最新文档