我试图找到曲线 $ y= x^2+3x+2 $ 和 $ y=x^2+2x+1$ 之间的交点。为此,我编写了以下 python 程序:
from numpy import *
import numpy as np
for x in np.arange(-100, 100, 0.0001):
y_1=x**2+3*x+2
y_2=x**2+2*x+1
if round(y_1, 5)==round(y_2,5):
print x
print 'end'
控制台显示:
-0.999999996714
end
我有三个问题。
1) 为什么我必须在声明?为什么我不能简单地将它们包含在 from numpy import*
行之后?
2) 当我将np.arange
中的步骤指定为小数点后4位时,为什么输出为小数点后12位?
3)为什么不输出-1.0000?
请对我宽容一点,我刚刚开始使用 python,我想尝试用它来解决一些联立方程。
谢谢
jack
最佳答案
- 因为
y_1
和y_2
行正在计算特定值,而不是定义函数。普通 Python 没有内置的符号方程概念。 (尽管您可以通过多种方式实现符号方程。) - 因为 Python 中使用的二进制 float 无法精确表示 0.0001(以 10 为底)。因此,步数是四舍五入的,所以你的步数并不完全是万分之一。 Python
print
语句不会四舍五入,因为没有具体的指令来执行此操作,因此您可以准确地获得系统正在使用的值,即使这并不完全是您要求的值。 - 同样的原因:由于步长不完全是千分之一,因此函数足够接近以在四舍五入下测试为相等的点并不完全位于 -1。
关于python - 意外的小数位数和语法查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39577927/