脚本中的欧拉和斐波那契近似



我用Matlab编写了两个函数;一个是求输入的阶乘另一个是求斐波那契数列的第n项。我现在正试图为每个函数制作一个脚本-一个计算欧拉数到10个小数,另一个计算倒数斐波那契数到10个小数。

图片在这里

我已经分别为阶乘和斐波那契数列创建了以下两个函数。

function [ nfactorial ] = get_fact( n )
%input a non-negative integer
%output is factorial of that integer
for i=0:n
    nfactorial=prod(1:n);
end

function [ F ] = get_fib( k )
if k < 0
    fprintf('positive integer please')
end
k = k + 1;
F(1) = 0;    % 0th Fibonacci term
F(2) = 1;    % 1st Fibonacci term
F(3) = 1;    % 2nd Fibonacci term
i = 4;
while k >= i
    F(i) = F(i-1) + F(i-2);
    i = i + 1;
end
   F = F(k)
end

我该如何把这些放到脚本中呢?

我试着:

for i = 0:n
    e = prod(1 / get_fact( i ))
end

但是这个返回错误,显然没有容差集,所以如果它有效,它将是无限的。我从来没有把一个函数到一个脚本,所以任何帮助将不胜感激。

函数的语法和调用函数在每种情况下都很好。另一方面,你的函数有一些语义问题。

In get_fact:

function [ nfactorial ] = get_fact( n )
%input a non-negative integer
%output is factorial of that integer
for i=0:n
    nfactorial=prod(1:n);
end

prod(1:n)将从1乘到n,参见help :help prod。所以它自己精确地计算了阶乘!不需要对i进行循环:您只需一遍又一遍地计算相同的东西。更严重的是:get_fact(0)会给你0,这是不应该的。为这种情况准备函数!

In get_fib:

function [ F ] = get_fib( k )
if k < 0
    fprintf('positive integer please')
end
k = k + 1;
F(1) = 0;    % 0th Fibonacci term
F(2) = 1;    % 1st Fibonacci term
F(3) = 1;    % 2nd Fibonacci term
i = 4;
while k >= i
    F(i) = F(i-1) + F(i-2);
    i = i + 1;
end
   F = F(k)
end

如果k<0,则打印一条消息,但之后不做任何额外的操作。这应该是一个错误消息,因此您应该使用error而不是fprintf,或者将F=NaN; return写在fprintf之后,以便提前从函数返回(没有正式错误)。否则,这个函数对我来说似乎很好。

现在,如果您将get_fact保存到get_fact.mget_fib保存到get_fib.m在您的MATLAB路径(始终包括当前目录)的某个地方,您可以将它们称为get_fact(3)和类似的get_fib()

但是你的电话也有问题:

for i = 0:n
    e = prod(1 / get_fact( i ))
end

这里您将再次调用e = prod(1 / get_fact( i ))为每个i在每一步覆盖e 。你显然不想这样。你应该定义一个向量来代替e,并在最后对其内容求和,或者在每次迭代中增加标量e的值(但随后你必须将其初始化为0),而prod(1/get_fact(i))只会给你1/get_fact(i),因为这个量是一个标量。在任何情况下,你都需要一个和,你必须用不同的方法来做(见前面的几句话)。

你的老师所说的公差与循环的截止有关,当你增加e的值时,即无限和的近似值。首先,你可以取一个给定的最大阶近似,如果它能正常工作,那么你就可以实现容差了。

相关内容

  • 没有找到相关文章