2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Как в Mathematica построить график в сферических координатах
Сообщение07.08.2018, 15:31 


07/08/18
5
Всем привет!
Решая одну техническую задачку, получил список (aka массив, упорядоченные тройки, кортежи ...) данных в виде {(x1,y1,z1), (x2,y2,z2), ... , (xn,yn,zn)}, причем две переменные, скажем x и y - значения углов.
Построил график (x,y,z) в обычных декартовых координатах. Хотел построить график в более естественных для моей задачи координатах - сферических, но столкнулся с неожиданной проблемой: Grapher (не говоря уже про MathCad и Excel) не умеет этого делать (писал в техподдержку Golden Software - ответили, что пока не поддерживает сферические координаты).
Решил попробовать в Mathematica, но, как я понял, и она не может. Возможно, я ошибаюсь, т.к. до этого момента не работал в этой программе.
Может кто-нибудь подсказать, действительно ли великая и ужасная Mathematica не может построить поверхность в сферических координатах по уже известному набору троек (xi,yi,zi)}, а делает это только для параметрически заданной функции? И если да, то что тогда может?

 Профиль  
                  
 
 Re: Как в Mathematica построить график в сферических координатах
Сообщение07.08.2018, 16:41 
Аватара пользователя


11/06/12
8335
Минск
Используйте функцию SphericalPlot3D. Нюансы её использования найдёте в справке.

 Профиль  
                  
 
 Re: Как в Mathematica построить график в сферических координатах
Сообщение08.08.2018, 09:43 


07/08/18
5
SurfacePlot3D, как оказывается, не может построить поверхность по заданному набору троек. Пробовал, читал Help - не вышло. На Community.Wolfram нашел такую же тему обсуждения (http://community.wolfram.com/groups/-/m/t/521885), где мои выводы подтвердились - SurfacePlot3D строит только параметрически заданный график. Такие дела...

 Профиль  
                  
 
 Re: Как в Mathematica построить график в сферических координатах
Сообщение08.08.2018, 12:33 
Заслуженный участник


14/01/11
1890
Можно попробовать получить искомую функцию путём интерполяции:
Код:
f=InterpolatingFunction[{{{x1,y1},z1}, {{x2,y2},z2}, ... , {{xn,yn},zn}}];SphericalPlot3D[f[x, y], x, y]

 Профиль  
                  
 
 Re: Как в Mathematica построить график в сферических координатах
Сообщение08.08.2018, 13:38 
Заслуженный участник
Аватара пользователя


01/09/13
1973
max_m в сообщении #1331147 писал(а):
не может построить поверхность по заданному набору троек.

А это, в принципе, возможно??
Если в случае линии ещё можно полагаться на то в каком порядке указаны точки, то для поверхности этого недостаточно.

 Профиль  
                  
 
 Re: Как в Mathematica построить график в сферических координатах
Сообщение09.08.2018, 14:12 


07/08/18
5
Sender, спасибо за совет. Теперь смогу им воспользоваться только через пару недель, но по результатам отпишусь.

Geen, я думаю, что вполне можно. Мое отображение биективно, а показать, как можно их соединить, можно, если представить, что все мои точки накрывает "вуаль", которая стремится стянуться к центру. Это как с тройками в декартовых координатах, где "вуаль" падает на точки.

 Профиль  
                  
 
 Re: Как в Mathematica построить график в сферических координатах
Сообщение09.08.2018, 21:36 
Аватара пользователя


11/06/12
8335
Минск
Я, конечно, был невнимателен, порекомендовав вам SphericalPlot3D. Она строит график функции в сферических координатах, но именно что функции. Но и вы, max_m, хороши. В ответ начали плести что-то о некоей функции SurfacePlot3D, которой в WL вообще нет.
С соображениями Sender согласен, можно попробовать.
max_m в сообщении #1331386 писал(а):
Geen, я думаю, что вполне можно. Мое отображение биективно, а показать, как можно их соединить, можно, если представить, что все мои точки накрывает "вуаль", которая стремится стянуться к центру. Это как с тройками в декартовых координатах, где "вуаль" падает на точки.
Теперь неплохо бы как-нибудь объяснить системе понятия «нутро» и «чуять» «вуаль» и «стремление стянуться»...
Есть ещё функция ListSurfacePlot3D (а, может, вы её и имели в виду?), можно с нею поколдовать.

 Профиль  
                  
 
 Re: Как в Mathematica построить график в сферических координатах
Сообщение10.08.2018, 10:21 


07/08/18
5
Да, был невнимателен, когда писал SurfacePlot3D - имел ввиду, конечно же, SphericalPlot3D. Прошу прощения.
Что касается "вуали" и прочих метафор, то я просто хотел этим сказать, что нет принципиальных отличий в построении поверхностей по известному набору точек в декартовых и сферических координатах. И, как мне казалось, команды системе на эти построения не должны сильно отличаться друг от друга. Но, видимо, здесь все не так просто, раз ни одна из известных мне программ не может выполнить построение в сферических координатах по точкам.

 Профиль  
                  
 
 Re: Как в Mathematica построить график в сферических координатах
Сообщение10.08.2018, 11:59 


11/07/16
440
Команда Мэйпла
Код:
plots:-pointplot3d
работает со сферической системой координат. См. справку. Пример по требованию.

 Профиль  
                  
 
 Re: Как в Mathematica построить график в сферических координатах
Сообщение10.08.2018, 12:21 
Супермодератор
Аватара пользователя


09/05/12
15380
Кронштадт
А Mathematica принципиальна?

Если нет, возьмите gnuplot и
Код:
set mapping spherical
splot "data.dat"
где data.dat - файл с данными.

 Профиль  
                  
 
 Re: Как в Mathematica построить график в сферических координатах
Сообщение10.08.2018, 12:28 


07/08/18
5
Markiyan Hirnyk, Pphantom, спасибо за советы! Как и говорил, попробовать смогу через пару недель. По результатам отпишусь.

 Профиль  
                  
 
 Re: Как в Mathematica построить график в сферических координатах
Сообщение10.08.2018, 17:02 
Экс-модератор


12/07/07
3476
Донецк, Украина
Вроде бы в Maple pointplot3d (по крайней мере, в старых версиях) используется для построения точек (например, для предварительного анализа), а не поверхности. Например. Пусть в списке Data находится список координат $(\rho, \varphi, \theta)$. Cтроим точки, которые для наглядности изображаем маленькими окружностями.
Код:
> with(plots):
> L:= 30: M := 20: rho:= 1:
> Data:= [seq(seq([rho, evalf(2*Pi/L*i), evalf(Pi/M*j)], i=0..L), j=0..M)]:
> pointplot3d(Data, axes = boxed, symbol=circle, symbolsize=4, labels=['x', 'y', 'z'], coords=spherical);
Вложение:
pointplot3d.PNG
pointplot3d.PNG [ 25.17 Кб | Просмотров: 0 ]
Если есть возможность построить поверхность при помощи pointplot3d, то пример интересен.

-- Fri 10.08.2018 16:15:45 --

Для построения поверхности в Maple по списку точек, первое приходящее в голову --- функция surfdata. Но тут не всё оказывается так уж просто [и хорошо], особенно в старых версиях, например 15.
-= Добавлено =-
В простейших случаях surfdata, конечно, позволяет построить поверхность. Maple 15:
Код:
> with(plots):
> L:= 30: M := 20: rho:= 1:
> Data:= [seq([seq([rho, evalf(2*Pi/L*i), evalf(Pi/M*j)], i=0..L)], j=0..M)]:
> surfdata(Data, axes=frame, labels=[x,y,z], coords=spherical);
Вложение:
surfdata.PNG
surfdata.PNG [ 93.07 Кб | Просмотров: 173 ]
Но это почти эквивалентно её заданию в виде функции от двух параметров: имеется регулярная сетка. Опцию source=irregular функция surfdata в Maple 15 не поддерживает.

 Профиль  
                  
 
 Re: Как в Mathematica построить график в сферических координатах
Сообщение12.08.2018, 00:58 
Экс-модератор


12/07/07
3476
Донецк, Украина
max_m в сообщении #1331551 писал(а):
Но, видимо, здесь все не так просто, раз ни одна из известных мне программ не может выполнить построение в сферических координатах по точкам.
Как я понял, поверхность в начальном сообщении задана координатами точек в сферической системе координат (с.с.к.), а получить нужно рисунок поверхности в прямоугольной декартовой системе координат (п.д.с.к.). Особенностью большинства пакетов является необходимость задать координаты в виде прямоугольных матриц, в частности, так обстоят дела в Mathcad.

1. Предположим результаты измерений (расчетов) можно представить в виде следующей матрицы: вдоль строки меняются значения угла $\varphi$, вдоль столбца — значения угла $\theta$, а значения — величина радиуса $\rho$. (Можно, конечно, чтобы вдоль столбца менялись значение $\varphi$, а вдоль строки — $\theta$). В этом простейшем случае даже Mathcad легко справится с построением рисунка, если поверхность достаточно «плавная». Зная значения $\varphi$, $\theta$ и $\rho$, рассчитываются матрицы значений координат X, Y, Z. В приводимом ниже рисунке для простоты рассмотрен случай сферы. Mathcad 15.
Вложение:
mathcad.PNG
mathcad.PNG [ 98.16 Кб | Просмотров: 0 ]

2. Более трудный случай — это когда результаты измерений (расчетов) не могут быть представлены в виде матрицы. (В самом крайнем случае значения двух координат, например углов, могут быть случайными числами. Такой вариант часто демонстрируется в примерах.) В этом случае для получения прямоугольных матриц в пакетах часто предусматривают функции выполняющие перерасчет при помощи интерполяции. В matlab (по крайней мере, в старых версиях) нужно явно воспользоваться функцией griddata. Однако во многих пакетах (например, в matlab, по крайней мере, в старых версиях) такая интерполяция работает, если поверхность является графиком функции двух независимых переменных. Если поверхность не испытывает быстрых изменений высоты, то такая интерполяция позволяет удовлетворительно построить поверхность. См. примеры использования Matlab на оф. сайте. Однако, если функция меняется быстро, то результат не очень. Пример с верхней полусферой, Octave 4.4
код: [ скачать ] [ спрятать ]
Используется синтаксис Matlab M
n = 50;
phi = 2*pi*rand(1, n) ;
theta = pi/2*rand(1, n);
rho = 1;
# Запись в файл коорд. точек поверхности в с.с.к. для получения рисунка в gnuplot
fid = fopen('sphere_1.txt', 'wt');
for i=1:n
 fprintf(fid, '%17.15f %17.15f %17.15f \n', phi(i), theta(i), rho);
end
fclose(fid);
# Конец записи в ф. координат точек поверхности в с.с.к.
X = rho*cos(phi).*sin(theta);
Y = rho*sin(phi).*sin(theta);
Z = rho*cos(theta);
# Запись в файл коорд. точек поверхности в п.д.с.к. для получения рисунка в gnuplot
fid = fopen('sphere_2.txt', 'wt');
for i=1:n
 fprintf(fid, '%20.15f %20.15f %20.15f \n', X(i), Y(i), Z(i))
end
fclose(fid);
# Конец записи в ф. коорд. точек поверхности в п.д.с.к.
[Xi,Yi] = meshgrid (linspace (-rho, rho, 100));
[Xi, Yi, Zi] = griddata(X, Y, Z, Xi, Yi);
surf(Xi, Yi, Zi);
Вложение:
griddata.PNG
griddata.PNG [ 99.39 Кб | Просмотров: 0 ]

gnuplot позволяет построить рисунок поверхности по данным в файле в виде таблицы или по списку точек линий. Данные для разных линий отделяются пустой строкой. Если линии не должны формировать единую поверхность, то — двумя пустыми строками. Не добавляя пустые строки, попробуем построить рисунки поверхности. Версия 5.0.0 gnuplot.
Используется синтаксис Gnuplot
# Рисунок полусферы по точкам с координатами в сферической системе;
# файл c координатами - sphere_1.txt  
set    xrange    [-1:1]
set    yrange    [-1:1]
set    zrange    [ 0:1]
set    mapping   spherical
set    hidden3d
set    terminal  png
set    output  "sphere_1.png"
splot 'sphere_1.txt' with pm3d
Вложение:
sphere_1.png
sphere_1.png [ 15.36 Кб | Просмотров: 0 ]
В случае координат, заданных в п.д.с.к., использование стиля pm3d привело к предупреждению
Код:
Warning: Single isoline (scan) is not enough for a pm3d plot.
           Hint: Missing blank lines in the data file? See 'help pm3d' and FAQ.
Получить хоть какой-то рисунок получилось с with lines
Используется синтаксис Gnuplot
# Рисунок полусферы по точкам с координатами в п.д.с.к.;
# файл c координатами - sphere_2.txt  
set    xrange    [-1:1]
set    yrange    [-1:1]
set    zrange    [ 0:1]
set    hidden3d
set    terminal  png
set    output  "sphere_2.png"
splot 'sphere_2.txt' with lines
Вложение:
sphere_2.png
sphere_2.png [ 7.56 Кб | Просмотров: 137 ]
В общем, с ходу у меня в gnuplot что-то не очень получилось.

Golden Software Surfer 11 с настройками по умолчанию смог построить поверхность по данным shpere_2.txt (но очень лихо экстраполировал данные).
Вложение:
sphere_SurfaceMap_GSS.png
sphere_SurfaceMap_GSS.png [ 269.28 Кб | Просмотров: 0 ]

(Surfer предназначен для получения по нерегулярным данным регулярных сеток; возможности достаточно большие.)


Вложения:
sphere_1.txt [2.78 Кб]
Скачиваний: 7
sphere_2.txt [3.17 Кб]
Скачиваний: 5
 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Модераторы: Karan, PAV, Toucan, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group