使用以下系列计算 π 的值(Matlab 转换)

Compute the value of π using the following series (Matlab conversion)

我刚开始使用 Python 并不能真正掌握它..

我在 Matlab 中编写了代码,但很难在 Python 中以正确的方式转换它。

你能帮忙吗?

 x=0;
    for i=1:1000
         x=x+(1/((((2*i)-1)^2)*(((2*i)+1^2))));
         z=sqrt((x*16)+8);
         error=abs(z-pi);
         if (error < 10^-8)
            i
            break
         end
    end

谢谢

import math

...

x = 0
for i in range(1,1001):
    x = x + (1 / (((2 * i - 1) ** 2) * ((2 * i + 1) ** 2)))
    z = math.sqrt((x * 16) + 8)
    error = abs(z - math.pi)
    if error < 10 ** -8:
        print(i)
        break

下面这段代码相当于你用Matlab写的。

from math import pi, sqrt

x = 0
error_tolerance = 1e-8

for i in range(1, 1001):
    x += 1 / (((2 * i - 1) ** 2) * ((2 * i + 1) ** 2))
    z = sqrt((x * 16) + 8)
    error = abs(z - pi)
    if error < error_tolerance:
        print(i)
        break

Python 和 Matlab 之间的主要区别可以从这段代码中看出:

  • Indentation: For循环、while循环、if语句、函数定义等隔离使用正确缩进而不是起始关键字和 end。您可以看到 for 循环语句以冒号结尾,并且 for 循环内的所有内容都缩进了制表符或 4 个空格。 break 关键字进一步缩进,因为它仅在错误小于指定容差时执行。

  • 运算符: 可以看到凸起的幂符号^已经被**。这是因为 ^ 表示按位异或运算。您可能还会注意到 x += ... 已被使用而不是 x = x + ...。这两种说法是等价的,只是第一种方式更简洁。

  • 分号: Python不需要使用分号来静音variable/constant.相反,要找出变量的值是什么,只需使用 print(...) 语句。

  • For 循环: 而不是像 Matlab 那样只迭代线性序列,在 Python 每个 for 循环将迭代指定的可迭代序列中的下一个项目。在这种情况下,我们使用内置的 range 函数生成一个从 1 到 1000 的整数列表,并且在每个循环中 i 将被设置为这个线性序列中的下一个值。

  • 非内置函数: Python的基本内置函数集不包含 sqrt 函数或 pi 常量定义。相反,它们被分离到一个名为 math 的单独模块中,旁边还有许多其他数学函数,例如 sincosine 等。

  • if 条件周围的括号: 您可以在 if 语句条件周围使用括号。但是,对于像这样的简单条件,它们是没有必要的。

这两种语言之间存在 许多 差异,我刚刚强调了您提供的 Matlab 代码与其等效的 Python 代码之间最显着的差异。要了解有关 Python 的更多信息,我建议查看在线教程,您可以通过 Google 搜索或在此站点上找到大量常见问题的答案。

编辑: 我注意到您在执行数学序列时有一个小错误,并已更新它以匹配您 link 中提供的公式。我还删除了不必要的括号