用Python绘制一个特定的函数
我需要使用以下函数在python中绘制图形: b²x²+a²z²+2dxz²+d²z²-a²b²=0 其中b、a和d每次都不同。 这里的问题是我不能分开X和Z。我试过类似的方法用Python绘制一个特定的函数,python,numpy,math,matplotlib,Python,Numpy,Math,Matplotlib,我需要使用以下函数在python中绘制图形: b²x²+a²z²+2dxz²+d²z²-a²b²=0 其中b、a和d每次都不同。 这里的问题是我不能分开X和Z。我试过类似的方法 import numpy as np import matplotlib.pyplot as plt z = -np.linspace(9,15,100) x = np.linspace(-26,26,1000) x,z = np.meshgrid(x,z) a = 4 b = 2 d = 1 Z = a**2*
import numpy as np
import matplotlib.pyplot as plt
z = -np.linspace(9,15,100)
x = np.linspace(-26,26,1000)
x,z = np.meshgrid(x,z)
a = 4
b = 2
d = 1
Z = a**2*z**2+2*d*z**2-a**2*b**2
X = b**2*x**2
plt.contour(x,z,(X+Z),[0])
plt.xlim([-1.5,1.5])
plt.ylim([-11.5,-8.5])
我不知道matplotlib是否可以创建隐式绘图;快速搜索他们的文档没有发现任何东西。但是看起来你可以用它。发件人: 此处的工作代码:
from functools import partial
import numpy
import scipy.optimize
import matplotlib.pyplot as pp
a = 4
b = 3
d = 0.6
def z(x, y):
return b**2*x**2+a**2*y**2+2*d*x*y**2+d**2*y**2-a**2*b**2
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()
您的解决方案是正确的,但是对于您的示例代码
np.all(X+Z>0)
,没有任何问题。谢谢。我收到以下错误:ImportError:无法导入名称绘图可能需要安装Symphy。
from functools import partial
import numpy
import scipy.optimize
import matplotlib.pyplot as pp
a = 4
b = 3
d = 0.6
def z(x, y):
return b**2*x**2+a**2*y**2+2*d*x*y**2+d**2*y**2-a**2*b**2
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()