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')

который иногда работал для других людей (да, я провел свое «исследование»)… но выдает то же сообщение об ошибке. Я также прилагаю колчанный график этого векторного поля, если это может кому-то помочь. Если кто-то помог мне с этой проблемой, я был бы очень благодарен. Я понятия не имею. введите здесь описание изображения


person VonbatenBach    schedule 10.03.2019    source источник


Ответы (1)


Из streamslice документации:

Массивы X и Y, которые определяют координаты для U и V, должны быть монотонными, но не должны быть равномерно распределены. X и Y должны иметь одинаковое количество элементов, как если бы они были произведены meshgrid.

Ваш график колчана предполагает, что вы определили свое векторное поле на монотонной сетке координат r и phi (хотя было бы полезно, если бы вы указали минимальный пример в вопросе, чтобы вашу проблему можно было точно воспроизвести).

У вас есть два варианта:

  1. Также вычислите streamslice в полярных координатах и ​​преобразуйте линии тока в декартовы координаты.
  2. Создайте монотонную сетку в декартовом пространстве, используя [x,y] = meshgrid(...), преобразуйте эти координаты в полярные координаты, чтобы вычислить векторное поле и преобразовать свойства поля обратно в декартовы компоненты в соответствии с невидимой частью ваш код.
person Will    schedule 11.03.2019