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

时间:2018-04-12 08:14:32

标签: python type-conversion series pi

我刚开始使用Python而无法真正掌握它......

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

Image

你能帮忙吗?

 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

谢谢

2 个答案:

答案 0 :(得分:2)

以下代码段等同于您在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之间的主要区别是:

  • 缩进: 对于循环,while循环,if语句,函数定义等使用正确的缩进而不是起始关键字和{{1 }}。你可以看到for循环语句以冒号结束,for循环中的所有内容都被一个标签OR 4空格缩进。 end关键字进一步缩进,因为它仅在错误小于指定容差时执行。

  • 运算符: 您可以看到已将凸起的幂标记break替换为^。这是因为**表示按位XOR运算。您可能还注意到已使用^代替x += ...。这两个陈述是等价的,第一种方式更简洁。

  • 分号: Python不需要使用分号来静音变量/常量。相反,要找出变量的值,只需使用x = x + ...语句。

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

  • 非内置函数: Python的内置函数基础集不包含i函数或{{ 1}}常量定义。相反,它们被分成一个名为sqrt的单独模块以及许多其他数学函数,例如pimath等。

  • 围绕if条件的括号: 如果声明条件,您可以使用括号。但是,对于像这样的简单条件,它们不是必需的。

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

编辑:我注意到您的数学序列的实现存在轻微错误,并已更新它以匹配链接中提供的公式。我还删除了不必要的括号

答案 1 :(得分:0)

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