我刚开始使用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
谢谢
答案 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
的单独模块以及许多其他数学函数,例如pi
,math
等。
围绕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