使用以下系列计算 π 的值(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
的单独模块中,旁边还有许多其他数学函数,例如 sin
、cosine
等。
if 条件周围的括号: 您可以在 if 语句条件周围使用括号。但是,对于像这样的简单条件,它们是没有必要的。
这两种语言之间存在 许多 差异,我刚刚强调了您提供的 Matlab 代码与其等效的 Python 代码之间最显着的差异。要了解有关 Python 的更多信息,我建议查看在线教程,您可以通过 Google 搜索或在此站点上找到大量常见问题的答案。
编辑: 我注意到您在执行数学序列时有一个小错误,并已更新它以匹配您 link 中提供的公式。我还删除了不必要的括号
我刚开始使用 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
的单独模块中,旁边还有许多其他数学函数,例如sin
、cosine
等。if 条件周围的括号: 您可以在 if 语句条件周围使用括号。但是,对于像这样的简单条件,它们是没有必要的。
这两种语言之间存在 许多 差异,我刚刚强调了您提供的 Matlab 代码与其等效的 Python 代码之间最显着的差异。要了解有关 Python 的更多信息,我建议查看在线教程,您可以通过 Google 搜索或在此站点上找到大量常见问题的答案。
编辑: 我注意到您在执行数学序列时有一个小错误,并已更新它以匹配您 link 中提供的公式。我还删除了不必要的括号