在Python3.10中,我正在try 从一个以系数降序给出的多项式来计算某一Y值上所有可能的实值X值.我希望得到的X值以list为单位提供给我.

我试过使用numpy库的roots()函数,如this post的答案之一所示,但它似乎不起作用:

import numpy as np
import matplotlib.pyplot as plt

def main():
    coeffs = np.array([1, 2, 2])
    y = 1.5

    polyDataX = np.linspace(-2, 0)
    polyDataY = np.empty(shape = len(polyDataX), dtype = float)

    for i in range(len(polyDataX)):
        polyDataY[i] = coeffs[0] * pow(polyDataX[i], 2) + coeffs[1] * polyDataX[i] + coeffs[2]

    coeffs[-1] -= y
    x = np.roots(coeffs).tolist()

    plt.axhline(y, color = "orange")
    plt.plot(polyDataX, polyDataY, color = "blue")
    plt.title("X = " + str(x))
    plt.show()
    plt.close()
    plt.clf()

if (__name__ == "__main__"):
    main()

在上面的例子中,我将多项式的系数按降序存储在局部变量coeffs中.然后,我try 收集Y值为0.5的所有X值,分别存储在xy局部变量中.然后,我将收集的X值显示为所示绘图的标题.

The script above results in the following plot: enter image description here

With the X-values being shown as [-2.0, 0.0], instead of the correct: enter image description here

在Python语言中,获得某一Y值处多项式的所有实X值的正确方法是什么?

感谢您阅读我的帖子,任何指导都将不胜感激.

推荐答案

您的代码是正确的,并且您正确使用了根函数.数据类型只有一个小问题. 您可以使用调试器或通过在coeffs[-1] -= y之后打印coeff来查看错误.在第coeffs = np.array([1, 2, 2])行,numpy将创建一个整数类型的数组,因此您的减法运算应该是0.5,实际上是0,所以您的系数变成了[1, 2, 0].对于这些,计算出了正确的结果.因此,我们只需将dtype设置为Float:

import numpy as np
import matplotlib.pyplot as plt

def main():
    coeffs = np.array([1, 2, 2], dtype=float)   #<-----------
    y = 1.5

    polyDataX = np.linspace(-2, 0)
    polyDataY = np.empty(shape = len(polyDataX), dtype = float)

    for i in range(len(polyDataX)):
        polyDataY[i] = coeffs[0] * pow(polyDataX[i], 2) + coeffs[1] * polyDataX[i] + coeffs[2]

    coeffs[-1] -= y
    x = np.roots(coeffs).tolist()

    plt.axhline(y, color = "orange")
    plt.plot(polyDataX, polyDataY, color = "blue")
    plt.title("X = " + str(x))
    plt.show()
    plt.close()
    plt.clf()

if __name__ == "__main__":
    main()

enter image description here

Python相关问答推荐

如何在where或过滤器方法中使用SQLAlchemy hybrid_Property?

如何从. text中进行pip安装跳过无法访问的库

单击Python中的复选框后抓取数据

收件箱转换错误- polars.exceptions. ComputeHelp- pandera(0.19.0b3)带有polars

在Windows上启动新Python项目的正确步骤顺序

在编写要Excel的数据透视框架时修复标题行

根据网格和相机参数渲染深度

删除所有列值,但判断是否存在任何二元组

如何访问所有文件,例如环境变量

如何使用LangChain和AzureOpenAI在Python中解决AttribeHelp和BadPressMessage错误?

如何调整QscrollArea以正确显示内部正在变化的Qgridlayout?

将9个3x3矩阵按特定顺序排列成9x9矩阵

递归访问嵌套字典中的元素值

如何根据一列的值有条件地 Select 前N个组,然后按两列分组?

连接一个rabrame和另一个1d rabrame不是问题,但当使用[...]'运算符会产生不同的结果

有没有一种ONE—LINER的方法给一个框架的每一行一个由整数和字符串组成的唯一id?

字符串合并语法在哪里记录

如何使用SentenceTransformers创建矢量嵌入?

Flash只从html表单中获取一个值

如何使用两个关键函数来排序一个多索引框架?