Ged*_*des 30 python equation matplotlib implicit sympy
我想在Matplotlib中绘制隐式方程(形式为f(x,y)= g(x,y),例如X ^ y = y ^ x).这可能吗?
Ste*_*eve 26
我不相信对此有很好的支持,但你可以尝试类似的东西
import matplotlib.pyplot
from numpy import arange
from numpy import meshgrid
delta = 0.025
xrange = arange(-5.0, 20.0, delta)
yrange = arange(-5.0, 20.0, delta)
X, Y = meshgrid(xrange,yrange)
# F is one side of the equation, G is the other
F = Y**X
G = X**Y
matplotlib.pyplot.contour(X, Y, (F - G), [0])
matplotlib.pyplot.show()
Run Code Online (Sandbox Code Playgroud)
参见API文档为contour
:如果第四个参数是一个序列,然后将它指定轮廓线绘制哪个.但是情节只会与你的范围的分辨率一样好,并且有些特征可能永远不会正确,通常是在自相交点.
Gar*_*err 21
既然你已经用sympy标记了这个问题,我将举一个这样的例子.
来自文档:http://docs.sympy.org/latest/modules/plotting.html.
from sympy import var, plot_implicit
var('x y')
plot_implicit(x*y**3 - y*x**3)
Run Code Online (Sandbox Code Playgroud)
matplotlib不绘制方程; 它描绘了积分.您可以使用一种工具,scipy?.optimize
以数字方式从数值计算隐含方程的x值(反之亦然)或任意数量的其他工具.
例如,这是一个我x ** 2 + x * y + y ** 2 = 10
在某个区域绘制隐式方程的例子.
from functools import partial
import numpy
import scipy.optimize
import matplotlib.pyplot as pp
def z(x, y):
return x ** 2 + x * y + y ** 2 - 10
x_window = 0, 5
y_window = 0, 5
xs = []
ys = []
for x in numpy.linspace(*x_window, num=200):
try:
# A more efficient technique would use the last-found-y-value as a
# starting point
y = scipy.optimize.brentq(partial(z, x), *y_window)
except ValueError:
# Should we not be able to find a solution in this window.
pass
else:
xs.append(x)
ys.append(y)
pp.plot(xs, ys)
pp.xlim(*x_window)
pp.ylim(*y_window)
pp.show()
Run Code Online (Sandbox Code Playgroud)
sympy 中有一个隐式方程(和不等式)绘图仪。它是作为 GSoC 的一部分创建的,并将绘图生成为 matplotlib 图形实例。
http://docs.sympy.org/latest/modules/plotting.html#sympy.plotting.plot_implicit.plot_implicit 上的文档
从 sympy 版本 0.7.2 开始,它可以作为:
>>> from sympy.plotting import plot_implicit
>>> p = plot_implicit(x < sin(x)) # also creates a window with the plot
>>> the_matplotlib_axes_instance = p._backend._ax
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
25063 次 |
最近记录: |