我正在寻找一种方法来生成类似于ezplot在MATLAB中的工作方式,我可以输入:
ezplot('x^2 + y^2 = y + 5')
并准备好图表以获取任意功能。我只担心我同时拥有x和y的情况。
我只有这个功能,而且我真的不想尝试计算某些给定x范围的所有y值,如果我不需要的话。
我见过的几个解决方案是关于决策边界(这不是。没有测试数据或任何东西,只是一个任意函数)或全部用于已定义为y =某些x方程的函数真的很帮助我。
如果有一种很好的方法可以模仿Wolfram | Alpha的解决功能(“解决x ^ 2 + y ^ 2 = y + 5 for y”会给我两个函数,我可以再分别绘制) ,但更喜欢ezplot,因为它在MATLAB中或多或少是即时的。
答案 0 :(得分:7)
我认为您可以使用from sympy.plotting import plot_implicit
from sympy.parsing.sympy_parser import parse_expr
def ezplot(s):
#Parse doesn't parse = sign so split
lhs, rhs = s.replace("^","**").split("=")
eqn_lhs = parse_expr(lhs)
eqn_rhs = parse_expr(rhs)
plot_implicit(eqn_lhs-eqn_rhs)
ezplot('x^2 + y^2 = y + 5')
plotting和parse_expr为此例如,这将如下工作
{{1}}
这可以根据需要进行制作
答案 1 :(得分:0)
您可以使用sympy来求解方程式,然后使用结果函数绘制y over x:
import sympy
x=sympy.Symbol('x')
y=sympy.Symbol('y')
f = sympy.solve(x**2 + y**2 - y - 5, [y])
print f
xpts = (numpy.arange(10.)-5)/10
ypts = sympy.lambdify(x, f, 'numpy')(xpts)
# then e.g.: pylab.scatter(xpts, ypts)
答案 2 :(得分:0)
@EdSmith解决方案正常。不过,我有另一个建议。您可以使用绘图轮廓。您可以将函数重写为f(x, y)=0
,然后使用此代码
from numpy import mgrid, pi
import matplotlib.pyplot as plt
def ezplot(f):
x, y = mgrid[-2*pi:2*pi:51, -2*pi:2*pi:51]
z = f(x, y)
ezplt = plt.contour(x, y, f, 0, colors='k')
return ezplt
这是主要想法。当然,您可以将其概括为MATLAB中的函数,例如x
和y
的一般间隔,将函数作为字符串传递等。