Python 计算π的值;使用以下系列(Matlab转换)
我刚开始使用Python,还没有真正掌握它的窍门 我在Matlab中编写了代码,但很难在Python中以正确的方式进行转换 你能帮忙吗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
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语句、函数定义等使用正确的缩进而不是起始关键字和
进行隔离。您可以看到for循环语句以冒号结尾,for循环中的所有内容都缩进了一个制表符或4个空格。end
关键字进一步缩进,因为它仅在错误小于指定公差时执行break
- 运算符:您可以看到提升功率符号
已替换为^
。这是因为**
表示按位异或操作。您可能还注意到,已使用了^
而不是x+=…
。这两种说法是等价的,第一种说法更简洁x=x+…
- 分号:Python不需要使用分号来禁用变量/常量。相反,要找出变量的值,只需使用
语句即可print(…)
- For循环:在Python中,每个For循环将迭代指定的iterable序列中的下一项,而不是像Matlab那样迭代线性序列。在这种情况下,我们使用内置的
函数生成1到1000的整数列表,在每个循环中range
将被设置为该线性序列中的下一个值i
- 非内置函数:Python的基本内置函数集不包含
函数或sqrt
常量定义。相反,这些函数被分成一个单独的模块,名为pi
,以及许多其他数学函数,如math
,sin
,等等cosine
- if条件周围的括号:您可以在if语句条件周围使用括号。然而,对于像这样的简单条件,它们不是必需的
编辑:我注意到您在实现数学序列时出现了一个轻微错误,并对其进行了更新,以匹配链接中提供的公式。我还删除了不必要的括号谢谢你的回答,但是当我在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