Python-计算两边都有数字的方程

Python-计算两边都有数字的方程,python,math,python-3.x,Python,Math,Python 3.x,对于图形计算器,我让用户输入一个等式,然后程序将运行x范围的等式,要求用户输入x以外的任何变量的值。当方程以y=开头时,这可以正常工作 但是,我还想求解稍微复杂一点的方程,例如a*x**2+a*y**2+b*x+c*y+d=0 有没有办法解决这样的问题,其中y不是唯一的,或者我必须将这些方程转换成y=blahblahblah?你不会(在一般情况下)得到唯一的y=f(x)线 例如,x²+y²-1=0将得到一个单位圆,因此对于x=-1,x=1,只需画一个点,对于任意x in]-1,1[和x in]-

对于图形计算器,我让用户输入一个等式,然后程序将运行x范围的等式,要求用户输入x以外的任何变量的值。当方程以
y=
开头时,这可以正常工作

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

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

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

例如,x²+y²-1=0将得到一个单位圆,因此对于x=-1,x=1,只需画一个点,对于任意x in]-1,1[和x in]-inf,-1[u]1,+inf,只需画两个点[

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

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

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

然后,您需要确定自己是哪种情况,并找到一个合适的参数化来绘制。最容易理解所有这些内容的是遵循有关该主题的课程,例如:

确定你的二次曲线 幸运的是,网站会告诉你它是什么类型的。 计算行列式,检查它是否为非零。如果它为零,你有一个退化的情况

然后计算次要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条平行线
      • 如果,你得到两条不同的实线(你可以画两条线)
      • 如果,则得到2条重合实线(可以绘制1条线)
      • 如果,则得到两条不同的实线(可以绘制0条线)
    • 如果m>0,则得到一个点
你可以很直观地注意到,退化圆或椭圆是一个点,退化双曲线是交叉线,退化抛物线是平行线

乐趣刚刚开始 现在离完成还有很长的路要走,你仍然应该为每种情况重写你的初始方程作为标准形式,这在一般情况下意味着变量随时间的变化

  • 译文
  • 轮换
  • 从那以后,你可以得到参数方程,你可以画出来。看看所有这些规范形式和参数方程的列表(而不是复制所有的)。我认为详细说明这些并没有多大意义,它相当长,我觉得我已经让大多数读者失望了(如果你懂数学,你就不怕改变变量:))

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


    如果你觉得你仍然想做这一切,我会认真地建议你学习关于这个主题的在线课程,因为这个答案很简单,不会给你太多的理解。否则,按照评论中的建议使用一个库。

    那么你想从上面的等式中找到x和y吗?生成光栅图像很容易e(以固定的预定像素分辨率)从任意2D方程中提取,但生成一条可以保存为矢量图形的精确直线更为棘手。如果不(a)重新排列以使
    y
    项全部位于一侧,我不知道如何进行后一种处理(b)能够识别并使用基于函数类型的假设(在您的示例中为二次函数)。光栅图像足够好吗?我建议使用一个库-我支持谷歌搜索的建议。