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

Python 计算π的值;使用以下系列(Matlab转换),python,type-conversion,series,pi,Python,Type Conversion,Series,Pi,我刚开始使用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

我刚开始使用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
x=0;
对于i=1:1000
x=x+(1/((2*i)-1^2)*((2*i)+1^2));
z=sqrt((x*16)+8);
误差=abs(z-pi);
如果(错误<10^-8)
我
打破
结束
结束
多谢各位

import math

x=0
对于范围内的i(11001):
x=x+(1/((2*i-1)**2)*((2*i+1)**2)))
z=数学sqrt((x*16)+8)
error=abs(z-math.pi)
如果错误<10**-8:
印刷品(一)
打破

以下代码段与您在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
从数学导入pi,sqrt
x=0
误差_公差=1e-8
对于范围(11001)内的i:
x+=1/((2*i-1)**2)*((2*i+1)**2))
z=sqrt((x*16)+8)
误差=abs(z-pi)
如果误差<误差\公差:
印刷品(一)
打破
在这段代码中可以看到Python和Matlab之间的主要区别:

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

  • 运算符:您可以看到提升功率符号
    ^
    已替换为
    **
    。这是因为
    ^
    表示按位异或操作。您可能还注意到,已使用了
    x+=…
    而不是
    x=x+…
    。这两种说法是等价的,第一种说法更简洁

  • 分号:Python不需要使用分号来禁用变量/常量。相反,要找出变量的值,只需使用
    print(…)
    语句即可

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

  • 非内置函数:Python的基本内置函数集不包含
    sqrt
    函数或
    pi
    常量定义。相反,这些函数被分成一个单独的模块,名为
    math
    ,以及许多其他数学函数,如
    sin
    cosine
    ,等等

  • if条件周围的括号:您可以在if语句条件周围使用括号。然而,对于像这样的简单条件,它们不是必需的

这两种语言之间还有很多不同之处,我刚刚强调了您提供的Matlab代码与其Python等效代码之间最显著的差异。要了解更多关于Python的信息,我建议您阅读在线教程,您可以通过谷歌搜索或在本网站上找到大量常见问题的答案


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

谢谢你的回答,但是当我在mathlab中手工计算时,我得到的结果是I=174,在这段代码中,结果是I=999。你能检查一下图像吗?也许我算错了什么?谢谢你的帮助我的坏消息是范围(11001)而不是范围(11000)。但是,当我在mathlab中执行你的代码时,在循环结束时,我得到了I=1000我编辑了我的代码尝试一下,一个括号遗漏了感谢你的努力,我现在得到了正确的答案。你忘记了一个括号!((2*i+1)^2)非常感谢您的澄清和如此详细的回答。为了更好地理解python的工作原理,我将观看一些教程。很高兴我能提供帮助。祝你好运
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