Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python绘制一个特定的函数_Python_Numpy_Math_Matplotlib - Fatal编程技术网

用Python绘制一个特定的函数

用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*

我需要使用以下函数在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*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()