我正在嘗試繪制一個方程,但由于上述錯誤,我似乎無法做到。
這是代碼片段,應該可以自己作業:
import numpy as np
from numpy import linspace
from sympy import *
import matplotlib.pyplot as plt
x , t = symbols('x t')
test = simplify(-(0.02631027*sin(3*x) 0.1594*cos(3*x))*exp(-1*x))
test_f = lambdify([x], test, modules="sympy")
# Creating vectors X and Y
x_num = np.linspace(0, 8, 10)
# Plot size
fig = plt.figure(figsize = (16, 7))
# Create the plot
plt.plot(x_num, test_f(x_num)) ← Error at this line!
plt.grid(alpha=.4,linestyle='--')
plt.legend()
plt.show()
在上面提到的那一行,我得到了那個錯誤。
我應該怎么做?
uj5u.com熱心網友回復:
您將 numpy 與 sympy 混合在一起,這就是導致問題的原因。
讓我們分析一下代碼。在這里,您創建一個符號運算式:
test = simplify(-(0.02631027*sin(3*x) 0.1594*cos(3*x))*exp(-1*x))
在這里,您正在創建一個 lambda 函式,要求它由 sympy 評估。這意味著該函式將接受符號值并回傳符號值:
test_f = lambdify([x], test, modules="sympy")
然后你創建一個 Numpy 陣列并將其傳遞給函式,但它會引發你提到的錯誤。這是因為該函式需要符號值,或者可以轉換為符號值的值。事實證明,一個 Numpy 陣列不能轉換為任何符號值!
x_num = np.linspace(0, 8, 10)
test_f(x_num) # ERROR
您需要做的是創建一個 lambda 函式,要求 Numpy 對其進行評估,如下所示:
test_f = lambdify([x], test)
完整正確的代碼:
x , t = symbols('x t')
test = simplify(-(0.02631027*sin(3*x) 0.1594*cos(3*x))*exp(-1*x))
test_f = lambdify([x], test)
# Creating vectors X and Y
x_num = np.linspace(0, 8, 10)
# Plot size
fig = plt.figure(figsize = (16, 7))
# Create the plot
plt.plot(x_num, test_f(x_num))
plt.grid(alpha=.4,linestyle='--')
plt.legend()
plt.show()
uj5u.com熱心網友回復:
您的test_f
產品:
In [113]: test_f(1)
Out[113]:
-1
(-0.02631027?sin(3) - 0.1594?cos(3))??
In [114]: test_f(y)
Out[114]:
-y
(-0.02631027?sin(3?y) - 0.1594?cos(3?y))??
換句話說,它只是一種生成 sympy 運算式的方式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/473859.html
標籤:Python matplotlib 同情