【发布时间】:2016-02-24 18:18:58
【问题描述】:
我有兴趣使用 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)
编辑:
我需要返回周围网格点向量场的插值:
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:
points = (im1,jm1),(ip1,jm1),(im1,jp1),(ip1,jp1)
values_x = vx[im1,jm1],vx[ip1,jm1],vx[im1,jp1],vx[ip1,jp1]
values_y = vy[im1,jm1],vy[ip1,jm1],vy[im1,jp1],vy[ip1,jp1]
return interpolated_values(points,values_x,values_y) # how ?
最后一个 return 语句只是一些伪代码。但这基本上是我正在寻找的。
编辑:
scipy.interpolate.griddata 函数似乎是要走的路。是否可以将其合并到它自己的功能中?这句话中的一些东西:
def f(x,t):
return [scipy.interpolate.griddata(x,vx),scipy.interpolate.griddata(x,vy)]
【问题讨论】:
-
我在 scipy 文档中找到了以下内容 (docs.scipy.org/doc/scipy/reference/generated/…)。这正是我所需要的。我只需要弄清楚如何将它与 scipy 集成器一起使用,因为它仍然需要一个函数。而且我不知道积分器使用什么网格间距。
-
我现在意识到这个问题更适合计算科学部分。可以把它移到那里吗?或者我应该在那里创建一个副本?
-
您的问题绝对是 StackOverflow 的主题 - 事实上,您可能更有可能在这里得到有用的答案,因为 SO 拥有庞大且活跃的 scipy 用户社区。span>
-
在实际应用中如何生成矢量场?这不是来自某种形式的二维微分方程吗?在这种情况下,您可以整合 that 以获得流线型...
-
我正在通过二阶张量场的特征分解(可能是分析的,也可能不是分析的)生成我的“矢量场”。通过特征分解的向量场成为主要或次要特征向量
标签: python scipy interpolation pde numerical-integration