Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.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 Matplotlib等高线为';行不通_Python_Matplotlib_Sympy - Fatal编程技术网

Python Matplotlib等高线为';行不通

Python Matplotlib等高线为';行不通,python,matplotlib,sympy,Python,Matplotlib,Sympy,我想画出蝙蝠侠方程式。sympy或matplotlib中的解决方案将非常好(sage并不酷,因为我使用的是windows)。问题是,如果我注释掉某些部分,图中的部分会出现,但所有的F*=部分都会出现空白图 import matplotlib.pyplot from numpy import arange from numpy import meshgrid from numpy import sqrt from numpy import real delta = 0.01 xrange = a

我想画出蝙蝠侠方程式。sympy或matplotlib中的解决方案将非常好(sage并不酷,因为我使用的是windows)。问题是,如果我注释掉某些部分,图中的部分会出现,但所有的
F*=
部分都会出现空白图

import matplotlib.pyplot
from numpy import arange
from numpy import meshgrid
from numpy import sqrt
from numpy import real

delta = 0.01
xrange = arange(-7.0, 7.0, delta)
yrange = arange(-3.0, 3.0, delta)
x, y = meshgrid(xrange,yrange)

F = 1
F *= (((x/7) ** 2) * sqrt(abs(abs(x) - 3)/(abs(x) - 3)) + ((y / 3) ** 2) * sqrt(abs(y + (3 * sqrt(33)) / 7)/(y + (3 * sqrt(33)) / 7)) - 1)
F *= (abs(x/2) - ((3 * sqrt(33) - 7)/112) * x**2 - 3 + sqrt(1 - (abs(abs(x) - 2) - 1) ** 2 ) - y)
F *= (9 * sqrt(abs((abs(x) - 1) * (abs(x) - 3/4))/((1 - abs(x)) * (abs(x) - 3/4))) - 8 * abs(x) - y)
F *= (3 * abs(x) + 0.75 * sqrt(abs((abs(x) - 3/4) * (abs(x) - 1/2))/((3/4 - abs(x)) * (abs(x) - 1/2))) - y)
F *= ((9/4) * sqrt(abs((x - 1/2) * (x + 1/2))/((1/2 - x) * (1/2 + x))) - y)
F *= ((6 * sqrt(10)) / 7 + (3/2 - abs(x)/2) * sqrt(abs(abs(x) - 1)/(abs(x) - 1)) - ((6 * sqrt(10))/ 14) * sqrt(4 - (abs(x) - 1) ** 2 ) - y)
G = 0

matplotlib.pyplot.contour(x, y, (F - G), [0])
matplotlib.pyplot.show()
这是怎么回事?如果一个被乘数的图为零,那么无论我在其中加入了哪些被乘数,它都应该是零


蝙蝠侠方程式的来源:

我知道这可能看起来很蹩脚,但创建一个x值列表,然后计算每个位置的“蝙蝠侠”值,并存储在另一个列表中如何。您可以定义一个函数“蝙蝠侠”,它为传入的每个x值计算y值

然后用matplotlib绘制这些列表


编辑:由于您已经制作了numpy数组来存储结果,您可以在计算y值时使用这些数组。

我甚至不确定这个方程如何工作,因为我看到在第一项中出现零的除法(在第一个平方根下,当abs(x)=3),在最后一项中出现虚数(在最后一个平方根下,当{abs(x)-1}^2>4时,即x>3或x<3)。
这里我遗漏了什么?只使用了结果的真实部分,是否忽略或近似零的除法

运行此命令时,我确实看到了很多运行时警告,matplotlib不太可能完全搞不清要使用哪些数字(NaN,Infs;最后尝试打印F)。看起来它在NaN或INF的数量相对较少时仍然可以运行,这可以解释您看到的是部分数字。

我认为matplotlib的轮廓很好,只是被输入搞混了。

sqrt的参数对于许多点来说都是负数,所以最终的产品都是NaN。您可以按如下方式绘制每个因子:

from __future__ import division  # this is important, otherwise 1/2 will be 0
import matplotlib.pyplot
from numpy import arange
from numpy import meshgrid
from numpy import sqrt
from numpy import real


delta = 0.01
xrange = arange(-7.0, 7.0, delta)
yrange = arange(-3.0, 3.0, delta)
x, y = meshgrid(xrange,yrange)

F1 = (((x/7) ** 2) * sqrt(abs(abs(x) - 3)/(abs(x) - 3)) + ((y / 3) ** 2) * sqrt(abs(y + (3 * sqrt(33)) / 7)/(y + (3 * sqrt(33)) / 7)) - 1)
F2 = (abs(x/2) - ((3 * sqrt(33) - 7)/112) * x**2 - 3 + sqrt(1 - (abs(abs(x) - 2) - 1) ** 2 ) - y)
F3 = (9 * sqrt(abs((abs(x) - 1) * (abs(x) - 3/4))/((1 - abs(x)) * (abs(x) - 3/4))) - 8 * abs(x) - y)
F4 = (3 * abs(x) + 0.75 * sqrt(abs((abs(x) - 3/4) * (abs(x) - 1/2))/((3/4 - abs(x)) * (abs(x) - 1/2))) - y)
F5 = ((9/4) * sqrt(abs((x - 1/2) * (x + 1/2))/((1/2 - x) * (1/2 + x))) - y)
F6 = ((6 * sqrt(10)) / 7 + (3/2 - abs(x)/2) * sqrt(abs(abs(x) - 1)/(abs(x) - 1)) - ((6 * sqrt(10))/ 14) * sqrt(4 - (abs(x) - 1) ** 2 ) - y)


for f in [F1,F2,F3,F4,F5,F6]:
    matplotlib.pyplot.contour(x, y, f, [0])
matplotlib.pyplot.show()
结果图:

如何获得警告,matplotlib是否有调试模式?无论如何,我猜不应该绘制虚构的区域(如果结果不是零…).matplotlib不支持虚数运算吗?被零除只影响一小部分可以忽略的点。这很有趣-我没有看到数学:)我不知道任何调试模式;也许我正在使用的是matplotlib、numpy或python版本。看着上面的答案,我意识到了问题所在:方程的每一部分都有一定数量的“南”和“非南”;matplotlib将绘制非NAN。但是,当相乘时,最终得到的是所有的NaN,而没有任何图形。非常基本的例子:F1=[NaN,5,NaN],F2=[NaN,NaN,3],F3=[2,NaN,NaN];F1*F2*F3=[NaN,NaN,NaN]。因此,您需要分别绘制它们。与其说是将某物乘以零,不如说是将某物乘以一个NaN。您使用的是什么版本的python?如果不是3.x,那么你需要
从uuu future\uuu导入分区
来避免所有这些int的地板分区。future分区也很好。我尝试使用numpy.lib.scimath.sqrt,它可以处理虚数,但是函数在太多的区域中定义,并且有一些不相关的行。谢谢:)