Matlab 计算向量场中某一点的力,然后对该力作出反应

Matlab 计算向量场中某一点的力,然后对该力作出反应,matlab,vector,physics,Matlab,Vector,Physics,所以,这对我来说很难解释,或者试图详细说明,因为我只认为我知道我在问什么,但我可能会用不好的措辞问,所以请容忍我,如果需要的话,请提问 目前我有一个3D向量场,它对应于3D空间中40个级别的风向量(很明显)。这些都是在3D水平上绘制的,然后使用一个虚拟高度叠加在一起(我们正在讨论如何最准确地进行压力-高度转换——这里不用担心)。我们的目标是从向量空间中的一个点开始,将该点建模为一个可以体验物理的粒子,然后迭代地通过向量场对力作出反应,从而在向量场中创建各种各样的轨迹 目前我正在尝试做的是编写代码

所以,这对我来说很难解释,或者试图详细说明,因为我只认为我知道我在问什么,但我可能会用不好的措辞问,所以请容忍我,如果需要的话,请提问

目前我有一个3D向量场,它对应于3D空间中40个级别的风向量(很明显)。这些都是在3D水平上绘制的,然后使用一个虚拟高度叠加在一起(我们正在讨论如何最准确地进行压力-高度转换——这里不用担心)。我们的目标是从向量空间中的一个点开始,将该点建模为一个可以体验物理的粒子,然后迭代地通过向量场对力作出反应,从而在向量场中创建各种各样的轨迹

目前我正在尝试做的是编写代码,允许我从这个场中的一个点开始,计算粒子在该点上感受到的力,然后建立一个合力向量,它将指示向量空间中的下一个运动路径

现在我被困在代码的理论方面,因为我试图思考粒子在远处的感觉

有没有关于在MatLab或相关方程式中解决此问题的建议?

为了运行我的代码,您需要读取\u grib.r4并编译mex文件,这里有一个包含代码和所需文件的zip链接


我会尝试从相邻的风矢量中插值风矢量。你似乎有一个规则的网格,这应该没有问题。(您可以为此使用interp3)

之后,您可以使用任何微分方程解算器来解决您的问题,因为您基本上有一个梯度场和一个初始值。前进欧拉将是最简单的一个,但需要一个小的步骤大小。(注意:您的字段应该是渐变字段) 你可以在维基百科上读到:

针对评论#1: 对在常规栅格中,任何(任意选择的)点都将有八个邻居。interp3将这样确定插值梯度向量。 如果使用“向前euler”,则将在该方向上移动一小段距离。在这里你可以插值一个梯度,然后向这个新的方向前进一小步,依此类推。发生了两件事:

  • 得到一系列位于流线上的点,从而形成粒子沿场移动的轨迹
  • 错误越大,移动越远,步长越大。使用较小的步长或使用更好的解算器(我想到了龙格库塔)

  • 如果您只想打印,那么该函数可能会有所帮助。

    有没有办法获得小于135 MB的文件?通过插值数据点来计算任意点处的力?Luis,您介意扩展一下吗?插值数据点会有什么帮助?是将向量扩展到查询点,从而在查询点为该向量提供一个值/方向吗?DasKrümelmonester,如果你不介意我查询,那么你是说要在该字段中选择与该点相关的最接近向量,请使用interp3获得插值到查询点的向量值,在考虑到插值到查询点的矢量值后,计算出合力?我想是的。但interp3已经完成了“拾取最近的向量”的操作。当我尝试调用streamline(x、y、z、u、v、w、sx、sy、sz)时,我首先遇到了与xyz和uvw相对应的向量不是3D向量的问题。我目前遇到的第二个错误是:使用GridDedInterplant插值的错误要求每个维度至少有两个采样点。interp1>Interp1D(第346行)中的错误F=GridDedInterplant(Xext,V,方法);interp1(第241行)中的错误Vq=Interp1D(X,V,Xq,方法);stream2(第64行)中的错误syi=interp1(yy(:),1:szu(1),sy(k));流线型错误(第63行)顶点=流线型2(x、y、u、v、sx、sy、选项);