matlab 实验6 函数及其调用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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