我希望标题本身很清楚,我正在使用分步法,有限差分公式(Navier-Stokes原始变量形式)解决2D盖子驱动腔(方域)问题,我得到了u和v的速度分量.整个领域,没有手动计算流线,是否有一个命令或绘图工具为我做的工作?
我希望这个问题与编程有关,因为我需要一个绘制流线图的工具而不需要明确地计算它们.
我在流 - 涡度NS形式中解决了同样的问题,我只需要采用流函数的等高线图来获得流线型.
我希望工具或绘图仪是一个python库,并且更多可以在fedora中安装(我可以妥协并使用薄荷)而不用大惊小怪!
如果有人指出图书馆和相关命令(会节省很多时间),我将不胜感激
是否可以运行生成一个图形(或多个图形)的Python代码并保持这些图形打开,即使在程序结束后也是如此?
目前,当我show()在代码末尾使用时,程序执行$ python somecode.py将停止,直到我关闭该图(或多个图)。从而导致终端无法使用。
我是否需要知道如何为每个人物分配不同的作业 ID,以便这些人物与主程序分开运行?如果是这样我怎样才能做到这一点?
当人们想要使用不同的输入执行有限次数的程序并且不希望将每个结果图形存储为(单独的)文件时,这种需求就变得显而易见。这对于进行快速比较非常方便。
一个明显的解决方案是在单独的终端会话中运行该程序。
以下导入
from mayavi import mlab
Run Code Online (Sandbox Code Playgroud)
生成值错误.
我使用setuptools安装了Mayavi(如此处所述).gui工作得很好(这里和那里有一些bug,但我仍然可以使用模块等).我猜测安装不顺利.任何建议我如何修复我的安装(如果这是什么问题)?
编辑1:
我卸载mayavi并重新安装它(使用pip),但valueError它仍然存在.
编辑2:
我安装的系统是虚拟的Ubuntu 15.04(使用VMware 6.0.6).我在这里粘贴了pip install mayavi输出.
编辑3:
重新安装以前的版本后Mayavi : 4.3.1,我仍然得到相同的错误.我在用Python : 2.7.9.
我有一个可以在scipy.integrate.ode和之间互换的解算器scipy.integrate.odeint.这是代码.
def f(y,s,C,u,v):
y0 = y[0] # u
y1 = y[1] # u'
y2 = y[2] # v
y3 = y[3] # v'
dy = np.zeros_like(y)
dy[0] = y1
dy[2] = y3
C = C.subs({u:y0,v:y2})
dy[1] = -C[0,0][0]*dy[0]**2\
-2*C[0,0][1]*dy[0]*dy[2]\
-C[0,1][1]*dy[2]**2
dy[3] = -C[1,0][0]*dy[0]**2\
-2*C[1,0][1]*dy[0]*dy[2]\
-C[1,1][1]*dy[2]**2
return dy
def solve(C,u0,s0,s1,ds,solver=None):
from sympy.abc import u,v
if solver == None: # use lsoda from scipy.integrate.odeint
s = np.arange(s0,s1+ds,ds)
print 'Running solver ...'
return sc.odeint(f,u0,s,args=(C,u,v))
else: # use any other …Run Code Online (Sandbox Code Playgroud) 我有兴趣使用该scipy.integrate库为给定的初始点集成向量场(即找到流线)。由于矢量场是numpy.ndarray在计算网格上定义的对象,因此必须对网格点之间的值进行插值。有没有集成商处理这个问题?也就是说,如果我要尝试以下操作
import numpy as np
import scipy.integrate as sc
vx = np.random.randn(10,10)
vy = np.random.randn(10,10)
def f(x,t):
return [vx[x[0],x[1]], vy[x[0],x[1]]] # which obviously does not work if x[i] is a float
p0 = (0.5,0.5)
dt = 0.1
t0 = 0
t1 = 1
t = np.arange(t0,t1+dt,dt)
sc.odeint(f,p0,t)
Run Code Online (Sandbox Code Playgroud)
编辑 :
我需要返回周围网格点的向量场的插值:
def f(x,t):
im1 = int(np.floor(x[0]))
ip1 = int(np.ceil(x[1]))
jm1 = int(np.floor(x[0]))
jp1 = int(np.ceil(x[1]))
if (im1 == ip1) and (jm1 == jp1):
return [vx[x[0],x[1]], vy[x[0],x[1]]]
else: …Run Code Online (Sandbox Code Playgroud) 有人提出了类似的问题:
我正在尝试对条形图执行完全相同的操作。我的问题是 bar 对象没有解压到Fig、ax。这是代码:
import matplotlib.pylab as plt
x = [0, 0.5, 1, 2, 3, 3.5, 4, 4.5, 5, 7.5, 8.5,9]
y = [1,2,2,3,1,2,2,2,2,1,1,0]
width = 0.5
plt.bar(x, y, width, color="pink")
plt.xlabel('score')
plt.ylabel('antall')
plt.show()
Run Code Online (Sandbox Code Playgroud)
和条形图:
我只想在 y 轴上显示整个整数,在 x 轴上显示相反的整数(即数字 0 到 10,增量为 0.5)。
python ×5
matplotlib ×3
scipy ×3
linux ×1
mayavi ×1
numpy ×1
pde ×1
python-3.x ×1
velocity ×1
workflow ×1