【问题标题】:Python - Calculate calculate equations with numbers on both sidesPython - 计算两边都有数字的计算方程
【发布时间】:2015-01-27 10:01:20
【问题描述】:

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

不过,我也想求解稍微复杂一点的方程,例如a*x**2+a*y**2+b*x+c*y+d=0

有没有办法解决这样的问题,其中 y 并不孤单,还是我必须将这些方程转换为 y=blahblahblah

【问题讨论】:

  • 所以你想从上面的等式中找到 x 和 y?
  • 从像这样的任意二维方程生成光栅图像(以固定的预定像素分辨率)很容易,但生成可以保存为矢量图形的精确线则比较棘手。如果没有(a)重新安排将y 术语全部放在一侧并且(b)能够识别和使用基于函数类型的假设(在你的例子中是二次的),我不知道如何做后者.光栅图像是否足够好?
  • 我建议使用库 - 谷歌搜索出现了 sympy.org/en/index.html
  • 我支持Sympy的推荐。

标签: python math python-3.x


【解决方案1】:

您不会(在一般情况下)为此获得唯一的 y=f(x) 行。

例如 x²+y²-1=0 将得到一个单位圆,因此 x=-1、x=1 只需绘制一个点,]-1,1[ 中的任何 x 和 0 点为两个点对于 x in ]-inf,-1[ u ]1,+inf[

圆锥曲线

在您的情况下,您在两个变量 x 和 y 中展示了二次多项式的示例,没有混合项(即左侧的 exy)。即使添加这个项,如果你限制多项式的次数,你会得到一个圆锥截面,它可以是圆、椭圆、抛物线或双曲线(以及退化的情况:一个点、一条线、两条线,或者什么都没有)。

您总是可以将它们表示为,它对应于圆锥和平面的交点,如下图所示:

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

然后您需要确定您属于哪种情况,并找到合适的参数化进行绘制。最容易理解这一切的方法是学习有关该主题的课程,例如:https://www.khanacademy.org/math/algebra2/conics_precalc

识别圆锥曲线

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

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

  • 如果 m
  • 如果 A + C = 0,则为矩形双曲线
  • 如果 m = 0 ,则为抛物线。
  • 如果 m > 0 ,它是一个椭圆。
    • 如果 A = C 且 B = 0,则您有一个圆圈
    • 如果 (A+C)m > 0,椭圆是虚构的,您无法绘制。
  • 如果 d = 0(退化情况):
    • 如果 m
    • 如果 m = 0,则得到 2 条平行线
      • 如果,你会得到2条不同的实线(你可以画2条线)
      • 如果,你会得到2条重合的实线(你可以画1条线)
      • 如果,你会得到2条不同的实线(你可以画0条线)
    • 如果 m > 0,则得到一个点
  • 你可能很直观地注意到,退化的圆或椭圆是一个点,退化的双曲线是交叉线,退化的抛物线是平行线。

    乐趣才刚刚开始

    现在你还远远没有完成,你仍然应该为每种情况重写你的初始方程作为规范形式,这在一般情况下意味着变量的变化

    1. 翻译
    2. 轮换

    从那里,你得到参数方程,你可以画它。有关所有这些规范形式和参数方程的列表(而不是全部复制),请参阅 this wikipedia section。我认为详细说明这一切没有什么意义,它很长,我觉得我已经让大多数读者灰心了(如果你懂数学,你不怕改变变量:))。

    参数方程意味着您将有一个参数(在链接 t、u 或 theta 的方程中),并且当您改变该参数的值时,这些公式将描述圆锥截面的点集。

    如果你觉得你仍然想做这一切,我会认真建议你参加一个关于这个主题的在线课程,因为这个答案很简单,不会给你太多的理解。否则,请使用 cmets 中推荐的库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-27
      相关资源
      最近更新 更多