Python - 计算两侧数字的计算公式

时间:2014-11-28 17:54:44

标签: python math python-3.x

对于图形计算器,我让用户输入一个等式,然后程序将运行x范围的等式,询问用户除x之外的任何变量的值。当方程以y=开始时,这很好。

但是,我还想解决更复杂的方程式,例如a*x**2+a*y**2+b*x+c*y+d=0

有没有办法解决这样的问题,y并不是唯一的,或者我必须将这些方程式转换为y=blahblahblah

1 个答案:

答案 0 :(得分:2)

你不会(在一般情况下)得到一个唯一的y = f(x)行。

例如x²+y²-1 = 0会得到一个单位圆,因此只有一个点可以绘制x = -1,x = 1,任意x的两个点都在-1,1 [和0点] for x in] -inf,-1 [u] 1,+ inf [

圆锥曲线

在您的情况下,您将显示两个变量x和y中的二次多项式的示例,其中没有混合项(即左侧的e x y)。即使添加这个术语,如果你限制多项式的次数,你得到一个圆锥截面,可以是圆形,椭圆形,抛物线或双曲线(和退化情况:一个点,一条线,两条线,或者根本没有任何东西)。

您始终可以将它们表达为enter image description here,它对应于圆锥和平面之间的交点,如下所示:

different cases better hyperbola

顺便说一句,所有图像/公式都来自维基百科。正如您在右侧看到的那样,双曲线(数字3)有两个不相交的部分。数字2显示圆和椭圆,数字1显示抛物线。

然后,您需要确定自己的情况,并找到合适的参数化来绘制。最容易理解所有这些,是关于该主题的课程,例如:https://www.khanacademy.org/math/algebra2/conics_precalc

识别您的圆锥曲线

幸运的是,matrix representation of a conic section会告诉你它是什么类型的。 计算行列式matrix determinant,检查它是否为非零。如果它为零,你就会有一个堕落的情况。

然后计算次要A33:m =B²-4AC(这是之前计算的一部分)。

  • 如果m < 0,这是一个双曲线。
    • 如果A + C = 0,则为矩形双曲线
  • 如果m = 0,则为抛物线。
  • 如果m> 0,它是一个椭圆。
    • 如果A = C且B = 0,则有一个圆圈
    • 如果(A + C)m> 0,椭圆是虚构的,你无法绘制它。
  • 如果d = 0(退化情况):
    • 如果m < 0,你得到2条相交的线
    • 如果m = 0,则得到2条平行线
      • 如果distinct real case,您将获得2条不同的实线(您可以绘制2条线)
      • 如果coincident real case,您将得到2条重合的实线(您可以绘制1条线)
      • 如果distinct imaginary case,您将获得2条不同的实线(您可以绘制0条线)
    • 如果m> 0,你得到一个点

您可能会非常直观地注意到,退化圆或椭圆是一个点,退化双曲线是交叉线,退化抛物线是平行线。

乐趣勉强开始

现在你还远没有完成,你仍然应该为每个案例重写你的初始等式作为规范形式,在一般情况下意味着改变变量

  1. 翻译
  2. 轮换
  3. 从那以后,你得到参数方程,你可以绘制它。有关所有这些规范形式和参数方程的列表,请参阅this wikipedia section(而不是全部复制)。我认为详细说明这一点并不重要,这很长,而且我觉得我已经劝阻大多数读者(如果你知道数学你不怕改变变量:))。

    参数方程意味着您将有一个参数(在t,u或theta中连接的方程式中),并且当您改变该参数的值时,公式将描述圆锥曲线的点集。 / p>

    如果您觉得自己仍然想要这一切,我会认真地建议您参加有关该主题的在线课程,因为这个答案非常重要,并不会给您太多的了解。否则,请使用评论中建议的库。