Matlab: Streamslice в задаче полярных координат - PullRequest
0 голосов
/ 10 марта 2019

Я борюсь с моим кодом, который должен создавать линии тока векторного поля в полярных координатах. Я преобразовал (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')

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

1 Ответ

0 голосов
/ 11 марта 2019

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

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

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

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

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