【问题标题】:Extracting integral curves from discrete vector field (Mathematica)从离散向量场中提取积分曲线(Mathematica)
【发布时间】:2013-01-22 02:20:35
【问题描述】:

我正在尝试编写一个 Mathematica 脚本,该脚本可以将离散向量场插入到连续向量场。然后我想从连续矢量场中提取积分曲线(场线)。

我知道Mathematica的ListStreamPlot函数可以直观的呈现积分曲线;但是,我需要构成它们的实际点。

我考虑过编写一个蛮力方法来达到以下效果:积分曲线似乎可以递归确定。如果在列表中选择了一个点,那么积分曲线中的“下一个”点将是具有最近斜率的点。 (每个“点”实际上是一个向量,因此每个都有自己的斜率。)“下一个”点只有 4 个候选点——当前点的上、下、左或右。然后“下一个”点将成为新的起点,并且该过程将递归直到到达网格的边缘。

但是,我想知道是否有更简单的方法使用 Mathematica 的高级函数。 (我也不知道我的方法在概念上是否正确。)

对于这项任务的任何想法或建议,我将不胜感激。

谢谢!

【问题讨论】:

    标签: vector wolfram-mathematica field curve integral


    【解决方案1】:

    仅供参考:http://mathematica.stackexchange.com

    补一些数据:

    data = Table[{-1 - x^2 + y, 1 + x - y^2}, {x, -3, 3, 0.2}, {y, -3, 3, 0.2}];
    

    建立一个ListStreamPlot

    plot = ListStreamPlot[data, 
              StreamStyle -> "Line", Frame -> False, PlotRangePadding -> 0]
    

    在 Mathematica 中,一切都是表达式 - 所以即使这个图基本上也是图形基元的可视化代码。您可以通过各种方式提取这些原语 - 包括您需要的线条。例如 - 只需选择表达式的一部分,您就可以找到构成该图的所有点:

    points = plot[[1, 2, 1]];
    

    如果您需要查看整个表达式,请评估 plot//InputForm。现在您还可以进行模式匹配以查看内部表达式。让我们找到包含所有行的所有索引:

    indexes = Cases[plot, Line[index_] -> index, Infinity];
    

    现在,您可以分析、绘制和设计线条了。例如 - 设计一个在原始图中突出显示特定线条的应用程序:

    Animate[Show[
      plot,
      Graphics[{Red, Opacity[.5], , Thickness[.02], 
        Line[points[[indexes[[k]]]]]}]]
     , {{k, 1, "lines"}, 1, Length[indexes], 1}, FrameMargins -> 0]
    

    【讨论】:

    • 您好,我意识到这是一个老话题,但我正在解决同样的问题。您是否对 Mathematica 中如何实现此功能有任何线索?它如何通过这个离散向量场计算积分曲线?谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    相关资源
    最近更新 更多