首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >脚本中的近似欧拉数

脚本中的近似欧拉数
EN

Stack Overflow用户
提问于 2015-10-10 19:53:16
回答 1查看 1.6K关注 0票数 0

我正在编写一个脚本,它调用一个函数get_fact来计算欧拉数到小数点10位。我的职责是:

代码语言:javascript
复制
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
end

现在我想通过n个从0到无穷远的循环并取1/get_fact(i)之和来计算欧拉数。

我如何写中断,以便停止循环在小数点第10位?我不允许在我的脚本中使用欧拉号。

到目前为止,我已经:

代码语言:javascript
复制
for i = 0:inf
    prod((1/ get_fact(i)))
end

但这是一个无限系列。

我在考虑用

代码语言:javascript
复制
if prod((1/ get_fact(i))) > 1E-10
break
end

但我不确定这是否是解决问题的正确方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-10 20:41:11

首先,我将重写您的函数,以便找到阶乘,使之变得更简单。

代码语言:javascript
复制
function n = factorial(n)
    n = prod(1:n);
end

您的问题中的循环是不必要的,因为您从不使用循环变量i。但是,对于我的解决方案,我不会使用这个函数,因为它可能非常慢,因为您必须在每次循环迭代中计算冗余信息。

如果您仍然希望使用for循环,则需要将其重写到

代码语言:javascript
复制
function f = factorial(n)
    f = 1; % 0 factorial
    for i = 1:n
        f = f * i;
    end
end

您可以使用自然对数和logs的规则来确定一个非常准确的e值,您可以与之进行比较。您可以对照的e值是由x^(1 / log(x))给出的,其中x可以是除1以外的任何正整数,比如2。我们可以看到这个

现在,我们如何检查,我们计算了一个值的e到小数点10位的准确性。考虑到上面的be的一个非常精确的表示,我们可以与它进行比较,以确定何时达到了精确的解。

代码语言:javascript
复制
x = 2; % Any positive number other than 1
c = x^(1 / log(x));
...
if (abs(e - c) < 1e-10)
    break;
end

在我的解中,e是我用无穷和计算出来的近似值。备注:当e - c是负数时,绝对值是用来防止误报的。

现在,一种计算无限和的有效方法。我们可以利用阶乘的计算方法,而不必在每次迭代中计算它,大大提高了效率。首先,我们需要一个求和变量e来跟踪我们的近似解。然后,我们需要另一个变量来跟踪阶乘,在我的例子中是f。由于0是一个有趣的案例,我们将从它开始

代码语言:javascript
复制
e = 0;
f = 1; % 0 factorial

e = e + 1 / f;

现在我们有了无穷和中的第一个元素。接下来,我们可以使用无限和来计算一个更精确的e近似。可以在每次迭代过程中更新阶乘,f = f * n;将导致

代码语言:javascript
复制
for n = 1:inf
    f = f * n; % Compute new factorial
    e = e + 1 / f; % Infinite sum
    ...
end

现在把它放在一起产生

代码语言:javascript
复制
x = 2; % Any positive number other than 1
c = x^(1 / log(x));

e = 0;
f = 1; % 0 factorial

e = e + 1 / f;

for n = 1:inf
    f = f * n; % Compute new factorial
    e = e + 1 / f; % Infinite sum
    if (abs(e - c) < 1e-10)
        break;
    end
end
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33058333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档