我有一个隐式函数,比如x**2 - y = 0
(为了简化),我想要获得某个x
值范围的曲线图。sympy.plot_implicit
通常会给出一些我不满意的线条。
我希望能够访问绘制的值,因此pyplot.plot
比我更可取。我通常使用以下代码来绘制显式的sympy函数,但我不确定如何对exp = sym.Eq(x**2 - y, 0)
使用类似的代码。有谁有解决这个问题的办法吗?
import sympy as sym
import numpy as np
from matplotlib import pyplot as plt
x, y = sym.symbols('x y', nonnegative=True)
exp = x**2
# Plot using a numpy-ready function
x_arr = np.linspace(-2, 2, 100)
exp_func = sym.lambdify(x, exp, 'numpy')
exp_arr = exp_func(x_arr)
plt.plot(x_arr, exp_arr)
PS:我的真实表达式是b_sim
(见下文),我想要方程b_sim=-1的曲线图。使用sym.plot_implicit(b_sim + 1, (n,0.225,1.5), (h, -1.1, 1.1))
可以看到我不喜欢的线条。按照Oscar Benjami的提示here,我尝试了以下一段代码,它给出了roots
的错误。
from sympy import *
h, nu = symbols('h nu', nonnegative=True)
b_sim = 1.0*cos(pi*sqrt(1 - h)/(2*nu))*cos(pi*sqrt(h + 1)/(2*nu)) - 1.0*sin(pi*sqrt(1 - h)/(2*nu))*sin(pi*sqrt(h + 1)/(2*nu))/sqrt(1 - h**2)
eq = Eq(b_sim + 1, 0)
sols = roots(eq, h)
sym.plot(*sols, (nu, 0.225, 1.5), ylim=(-1.1, 1.1))
2条答案
按热度按时间5kgi1eie1#
plot_implicit
的线扩展是由自适应算法引起的。如果设置选项adaptive=False
,则绘图模块将使用网格方法。然而,由于实现的原因,这个数字可能不会很好(太多的“分割”)。以下是使用Numpy和Matplotlib的方法:
ippsafx72#
要访问渐近函数图的绘图值,在本例中是
lines2d
图的坐标,这很简单。下面是绘制该函数的代码。
在上面的代码中,
lines2d
是line2d对象的列表。要从第一个获得坐标(在本例中只有一个),请执行以下操作:您可以使用它通过以下代码进行打印:-