Matlab:Streamslice在极坐标问题

时间:2019-03-10 10:36:46

标签: matlab field physics streamline

我在代码中苦苦挣扎,应该在极坐标中创建矢量场的流线型。我已经将(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。 我还尝试计算一些不同的streamlice:

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

有时对其他人有用(是的,我已经完成了“研究”)...但是它给出了相同的错误消息。 如果可以帮助某人,我还附上该矢量场的颤动图。如果有人帮助我解决这个问题,我将不胜感激。真的,我没有任何想法。 Demo

1 个答案:

答案 0 :(得分:0)

来自streamslice documentation

  

XY定义坐标的数组UV必须是单调的,但不必均匀间隔。 XY必须具有相同数量的元素,就像meshgrid产生的元素一样。

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

您有两个选择:

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