【问题标题】:Cant plot an equation properly in Python无法在 Python 中正确绘制方程
【发布时间】:2023-01-06 22:34:04
【问题描述】:

我正在尝试绘制一个三阶多项式,它是我通过 Lagrance 计算的,其中包含一组给定的 x,y。(x=P_Maz,y=H_Maz)。我真的找不到我做错了什么。甚至我试过一些图会显示错误的图表(因为 x=0 不会给出 y=25)。 等式如下:

           3            2
3.395e-06 x - 0.001528 x + 1.976 x + 25

我的功能和情节的一部分是这样的:

P_Maz = np.array([120, 180, 270, 300])  # x
H_Maz = np.array([246, 351, 514, 572])  # y

def Lagrange(Lx, Ly):
    x = symbols('x')
    y = 0
    for k in range(len(Lx)):
        p = 1
        for j in range(len(Lx)):
            if j != k:
                p = p * ((x - Lx[j]) / (Lx[k] - Lx[j]))
        y += p * Ly[k]
    return y

poly1=simplify(Lagrange(P_Maz,H_Maz))

plot(P_Maz,poly1(H_Maz))
grid()
show()

我收到以下错误:

Traceback (most recent call last):
  File "C:\Users\Egw\Desktop\Analysh\Askhsh1\askhsh5.py", line 36, in <module>
    plot(P_Maz,poly1(H_Maz))
TypeError: 'Add' object is not callable

完整代码如下:

import numpy as np
from matplotlib.pyplot import plot, show, grid
import numpy.polynomial.polynomial as poly
import matplotlib.pyplot as plt
from scipy.interpolate import lagrange
from sympy import symbols, Eq,simplify

P_Maz = np.array([120, 180, 270, 300])  # x
H_Maz = np.array([246, 351, 514, 572])  # y
P_Lig = np.array([150, 215, 285, 300])  # x
H_Lig = np.array([307, 427, 563, 594])  # y


def Lagrange(Lx, Ly):
    x = symbols('x')
    y = 0
    for k in range(len(Lx)):
        p = 1
        for j in range(len(Lx)):
            if j != k:
                p = p * ((x - Lx[j]) / (Lx[k] - Lx[j]))
        y += p * Ly[k]
    return y

poly1=simplify(Lagrange(P_Maz,H_Maz))
poly2=simplify(Lagrange(P_Lig,H_Lig))

print(Lagrange(P_Maz, H_Maz)) #Morfh Klasmatwn
print(poly1) #Telikh eksiswsh
print(lagrange(P_Maz,H_Maz)) #Telikh eksiswsh me built in method

print(Lagrange(P_Lig, H_Lig)) #Morfh Klasmatwn
print(poly2) #Telikh eksiswsh
print(lagrange(P_Lig,H_Lig)) #Telikh eksiswsh me built in method

plot(P_Maz,poly1(P_Maz))
grid()
show()

【问题讨论】:

    标签: python python-3.x matplotlib plot


    【解决方案1】:

    使用simplify,您会得到一个表达式,但随后您需要为所有需要的值计算该表达式。

    你可以通过lambdify来做到这一点:

    from sympy import lambdify
    
    f = lambdify(x, simplify(Lagrange(P_Maz,H_Maz)), "numpy") 
    # above, just copied your simplify call with your variables and used in the lambdify
    
    plot(P_Maz, f(P_Maz)) # use the created lambdify function, f, not the unevaluated expression
    

    请注意文档 (docs) 中的警告:“lambdify 使用 eval。不要在未经处理的输入上使用它。”

    【讨论】:

    • 它不应该是 plot(P_Maz,f(P_Maz)) 因为 P_Maz=x 值吗?我也尝试使用 lambdify,但与正确的图表相比仍然得到错误的图表。
    • 是的,P_Maz。我没有正确复制。我已经更新了答案。
    • 不幸的是,它仍然没有按预期给出正确的情节。我期待这个情节prnt.sc/RSTn1F8E9Gyk但是得到这个情节prnt.sc/9NDHf8PNJTk3
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 2012-10-05
    • 2012-06-30
    • 2020-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多