2016-01-06 48 views
5

我正在尋找一種方法來生成類似於ezplot如何在MATLAB中一個情節我可以輸入:劇情任意2-d功能

ezplot('x^2 + y^2 = y + 5') 

,並得到一個圖形準備去任何任意功能。我只擔心這種情況,我既有x又有y。

我只有這個功能,而且我真的寧願不去嘗試計算某些給定x範圍的所有y值,如果我不必這樣做的話。我看到的幾個解決方案是關於決策邊界(這不是測試數據或任何東西,只是一個任意函數),或者都是針對已經定義爲y = some x equation的函數並沒有真正幫助我。

如果有一種很好的方法來模擬Wolfram | Alpha的解決功能(「解決x^2 + y^2 = y + 5 for y」),我會稍微接受兩個函數),但更喜歡ezplot,因爲這在MATLAB中或多或少是即時的。

回答

7

我想你可以使用sympy繪圖和parse_expr這對於你的榜樣,這會工作作爲如下

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') 

這可以由一般需要

0

你可以使用sympy求解方程,然後用得到的功能X上繪製Y:

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) 
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中的函數,如一般間隔xy,將函數作爲字符串傳遞等。