首页 > 解决方案 > Matlab:极坐标中的Streamslice问题

问题描述

我正在为我的代码苦苦挣扎,它应该在极坐标中创建矢量场的流线。我已将 (r, phi) 组件转换为正常的笛卡尔坐标 (x,y)。(r, phi) 的分量是均匀分布的,这意味着对于 r = 0:const:10, phi = 0:const:2*pi。现在我正在尝试使用streamslice(x,y,wx,wy)计算这个向量场的流线,但我得到一个错误:

    streamslice(x,y,Gradx,Grady)
Error using griddedInterpolant
Interpolation requires at least two sample points in each
dimension.
Error in interp1 (line 151)
        F = griddedInterpolant(X,V,method);
Error in stream2 (line 62)
    sxi=interp1(xx(:),1:szu(2),sx(k));
Error in streamslice>nicestreams (line 313)
            vertsf = stream2(x,y, u,
            v,xstart,ystart,streamoptions);
Error in streamslice (line 138)
        [vertsout, avertsout] =
        nicestreams(x,y,u,v,density,arrows);

详细地说,流线函数内部的每个矩阵的尺寸为 201x73。我还尝试计算一些不同的流片:

streamslice(x',y',Gradx',Grady')

有时对其他人有用(是的,我已经完成了我的“研究”)......但它给出了相同的错误消息。如果它可以帮助某人,我还会附上这个向量场的颤抖图。如果有人帮助我解决这个问题,我将非常感激。真的,我没有任何想法。 在此处输入图像描述

标签: matlabfieldphysicsstreamline

解决方案


streamslice文档

定义 和 坐标的数组X和必须是单调的,但不需要均匀分布。并且必须具有相同数量的元素,就好像由.YUVXYmeshgrid

您的箭袋图表明您已经在 r 和 phi 坐标的单调网格上定义了矢量场(尽管如果您在问题中指定了一个最小示例,这样您的问题就可以准确地重现,这会有所帮助)。

你有两个选择:

  1. 还计算streamslice极坐标并将流线转换为笛卡尔坐标
  2. 使用生成笛卡尔空间中的单调网格[x,y] = meshgrid(...),将这些坐标转换为极坐标以计算矢量场,并将场属性转换回笛卡尔分量,根据代码中未看到的部分。

推荐阅读