第六次作业
- 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 s=piFun01(n)
a=1;
b=0;
for n=1:n
a=a+1/(4*n+1);
b=b+1/(4*n-1);
f(n)=a-b;
end
f(n)
end
2)使用tic 和toc 指令来测量piFun01(100000) 的计算时间。如果你不知道如何使用这两个指令,请使用help tic 及help toc 来查出它们的用法。
我的旧计算机是Pentium 450MHz,所得的计算时间约为2 秒。请说明你的计算机规格以及其计算时间。
>> tic;
piFun01(100000)
toc
ans =
0.7854
Elapsed time is 17.322828 seconds. Core i3 2310M
二、写一个MATLAB 的递归函数fibo.m 来计算Fibonacci 数列,其定义如下:
fibo(n+2) = fibo(n+1)+fibo(n)
此数列的启始条件如下:
fibo(1) = 0, fibo(2) = 1.
a) fibo(25) 的返回的值是多少?
function s=fibo(n)
fibo(1)=0;
fibo(2)=1;
for n=3:n
fibo(n)=fibo(n-1)+fibo(n-2);
end
fibo(n)
end
>> fibo(25)
ans =
46368
b) 使用tic 和toc 指令来测量fibo(25) 的计算时间。我的计算机是
Pentium 2GHz,所得的计算时间约为3.35 秒。请说明你的计算机规格
以及其计算时间。
>> tic; fibo(25); toc
ans =
46368
Elapsed time is 0.028889 seconds. Core i3 2310M
c) 你们已学过离散数学,知道Fibonacci 数列的第n 项可以直接表示成
fibo(n)={[(1+a)/2]^(n-1)-[(1-a)/2]^(n-1)}/a
其中a 是 5 的平方根。写利用上式一个MATLAB 的非递归函数
fibo2.m 来计算Fibonacci 数列。
function s=fibo2(n);
fibo2(n)=(((1+sqrt(5))/2)^(n-1)-((1-sqrt(5))/2)^(n-1))/sqrt(5);
fibo2(n)
end
d) fibo2(25) 的值为何?是否和fibo(25) 相同?
>> fibo2(25)
ans =
4.6368e+004
不同
e) 请计算fibo2(25) 的计算时间,并和fibo(25) 比较。
>> tic; fibo2(25); toc
ans =
4.6368e+004
Elapsed time is 0.000143 seconds.
比fibo(25)时间少
f)请比较并说明使用fibo.m 和fibo2.m 来计算Fibonacci 数列的优缺
点。
三、假设在期中考后,我们用一个向量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=ranking(x)
c=length(x);
m=-sort(-x);
for i=1:c
a(i)=find(m==x(i));
end
>> ranking([92, 95, 58, 75, 69, 82])
ans =
2 1 6 4 5 3