- 目标:**
我有两个表示速度分量的数组vx
和vy
,我想写一个流线算法:
1.输入点的坐标(seed
)
1.根据输入点的速度分量评估输入点路径上的像素
1.返回seed
点路径中各点的索引
- 问题:**
我最初写了一个欧拉正演算法,但它很难解决我的问题。我被建议把我的问题看作一个常微分方程(ODE),其中dx/dt = v_x(t)和dy/dt = v_y(t)。我可以interpolate我的速度,但与solving的斗争与Scipy的ODE。我该怎么做呢?
- 自制算法:**
我有两个数组vx
和vy
表示速度分量。当一个数组有NaN时,另一个数组也有。我有一个起点,seed
点。我想根据速度分量跟踪这个点经过了哪些单元格。我对速度分量vx
和vy
进行插值,以便将它们输入到ODE解算器中。
- 示例:**
这段代码测试了一个10x11速度数组的算法。我在ODE解算器处受阻。
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import RegularGridInterpolator
from scipy.integrate import odeint
# Create coordinates
x = np.linspace(0, 10, 100)
y = np.linspace(11, 20, 90)
Y, X = np.meshgrid(x, y)
# Create velocity fields
vx = -1 - X**2 + Y
vy = 1 + X - Y**2
# Seed point
J = 5
I = 14
# Interpolate the velocity fields
interpvx = RegularGridInterpolator((y,x), vx)
interpvy = RegularGridInterpolator((y,x), vy)
# Solve the ODE to get the point's path, but I don't know what to put for the parameter t
#solx = odeint(interpvx, interpvx((I,J)), np.linspace(0,1,501))
#soly = odeint(interpvy, interpvx((I,J)), np.linspace(0,1,501))
1条答案
按热度按时间tnkciper1#
我的一个同事提出了一个解决方案,我并不认为这是我的功劳,但考虑到Python没有流线型算法,希望这对这里的人有用: