Euler和Fibonacci在脚本

时间:2015-10-09 21:56:58

标签: matlab fibonacci eulers-number

我在Matlab中写了两个函数;一个解决了输入的阶乘,另一个解决了Fibonacci序列的第n项。我现在正在尝试为每个函数创建一个脚本 - 一个用于计算欧拉数到10个小数,另一个用于计算倒数斐波那契数到10个小数。

Image here

我分别为factorial和Fibonacci序列创建了以下两个函数。

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

但这会返回错误并且显然没有公差设置,所以如果它确实有效,它将是无限的。我从来没有将函数放入脚本中,所以任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

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

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,但不应该。为这种情况准备你的功能!

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保存到MATLAB路径某处的get_fib.m(总是包含当前目录),您可以将其称为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值的循环截止值有关,即无限和的近似值。首先,您可以采用给定的近似最大阶数,如果它能够正常工作,那么您可以继续实现容差。