意外的小数位数和语法查询

时间:2016-09-19 16:33:45

标签: python numpy

我试图找到曲线$ y = x ^ 2 + 3x + 2 $和$ y = x ^ 2 + 2x + 1 $之间的交点。为此,我编写了以下python程序:

-0.999999996714
end

控制台显示:

y_1=x**2+3*x+2

我有三个问题。

1)为什么我必须在for语句中包含y_2=x**2+2*x+1from numpy import*?为什么我不能简单地在行np.arange之后包含它们?

2)当我将if sum(order) > sum(stock): return False, [] 中的步骤指定为4位小数时,为什么输出为12位小数?

3)为什么不输出-1.0000?

请放轻松我,我刚刚开始使用python并且认为我会尝试用它来解决一些联立方程式。

谢谢,

杰克

2 个答案:

答案 0 :(得分:2)

  1. 因为[&]+y_1行计算特定值,而不是定义函数。普通Python没有内置的符号方程概念。 (虽然你可以用各种方式实现符号方程。)
  2. 因为Python中使用的二进制浮点不能精确地表示0.0001(基数10)。因此,该步骤是四舍五入的,因此您的步骤不是万分之一。 Python y_2语句没有舍入,没有这样做的具体说明,因此您可以获得系统正在使用的值,即使这并不是您要求的值。
  3. 同样的原因:由于这些步骤并不完全是万分之一,所以函数在圆整度下足够接近测试的点不完全是-1。

答案 1 :(得分:1)

1)首先,你有(可能)多余的导入语句:

from numpy import *
import numpy as np

第一个语句从包中导入__all__变量,第二个语句导入numpy包,然后将其别名为np。通常的惯例是将numpy导入np,所以我会删除你的第一行并保留第二行。

现在为了更清楚地回答您的问题,您需要在for循环中包含方程,因为x使用np.array循环表示for中的每个元素。

2和3)该值可能被解释为方程式中的浮点数。舍入误差是python(和大多数编程语言)如何解释分数所固有的。 See more here