2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3  След.
 
 Re: Как создать 2D векторное поле в Mathematica
Сообщение01.01.2017, 22:50 


19/02/14
27
У меня опять просьба о помощи в построении 2D векторного поля. Еще раз о задаче: имеются двухмерные массивы, например,
компоненты скорости u [i, j] и v [i, j] по координатам х, у соответственно, i , j – индексы по координатам х, у, максимальные значения i =81, j=161.
Значения скорости получены расчетным путем, записаны в отдельные файлы с расширением .dat, т.е. имена файлов условно uf.dat и vf.dat.

Требуется построить поле вектора скорости V(u,v) в виде стрелок. Ввод данных из папки, куда записаны файлы uf.dat и vf.dat, в саму Mathematica
проводится с использованием опции из главного меню Insert и File Path, получается:
Код:
In[59]:= u = Import [“D:\ = Import \BMW Disk D\\uf.dat”]  и жмём Shift+Enter
Out[59]= {{…,…,...},{…,…,…},{…,…,…}, … {…,…,…}}

Структура Out[59]= показана мною схематично для экономии места. Аналогично поступаем для компоненты v. Далее по аналогии с примером из учебника пишу функцию
Код:
VectorPlot[{u,v}, {x,1,81}, {y,1,161}],  Shift+Enter

Появляется квадрат с координатными осями, но без векторного поля. Подскажите пожалуйста, в чем проблема.

 Профиль  
                  
 
 Re: Как создать 2D векторное поле в Mathematica
Сообщение01.01.2017, 23:34 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли
Самое что ни на есть первое: у вас есть готовый массив данных, а не функция. Значит, нужно использовать не VectorPlot, а ListVectorPlot.
Второе:
Into the Fire в сообщении #1181337 писал(а):
Ввод данных из папки, куда записаны файлы uf.dat и vf.dat, в саму Mathematica
проводится с использованием опции из главного меню Insert и File Path
Отвыкайте. Это медленно и непрофессионально. Вбивать текстом быстрее. Впрочем, тут я занудствую.
Into the Fire в сообщении #1181337 писал(а):
по аналогии с примером из учебника пишу функцию
С каким именно учебником? С какой страницы учебника взят пример?
Into the Fire в сообщении #1181337 писал(а):
Shift+Enter
Не надо так оформлять код.

Into the Fire, давайте начнём с маленьких «игрушечных» примеров. Размером четыре на четыре, скажем. И будем задавать их непосредственно в рабочем документе, не импортируя извне. Разберёмся с ними, а там, глядишь, и до настоящего дела доберёмся.

 Профиль  
                  
 
 Re: Как создать 2D векторное поле в Mathematica
Сообщение02.01.2017, 13:23 


19/02/14
27
ListVectorPlot мне вообще ничего не рисует, а только жалуется на что-то.

Учебник смотрел непосредственно в Mathematica, вход через главное меню:
Help –> Wolfram Documentation – после этого появляется таблица Wolfram Language & System, в таблице есть раздел Visualization & Graphics, где приводятся примеры использования. Вот один из примеров:
http://s30.postimg.org/5pv492xoh/F_1_Page_1.jpg

Еще аналогичный пример
http://s27.postimg.org/4td6c9u1v/F_2_Page_1.jpg

Пробовал в ручную задать компоненты u, v размерностью 4х4. Вот что у меня получается:
http://s23.postimg.org/cgz5wp6jf/Fvu_3_Page_1.jpg

При этом каждый из векторов в отдельности рисуется, например:
http://s23.postimg.org/e2efoigrf/Fv_4_Page_1.jpg

Для проверки попробовал в MATHCAD изобразить векторное для таких же значений u, v. Получается нормально
http://s28.postimg.org/s0aupuhl9/Fmath_Page_1.jpg

Так и не пойму, в чем у меня ошибка.

 Профиль  
                  
 
 Re: Как создать 2D векторное поле в Mathematica
Сообщение02.01.2017, 14:46 
Заслуженный участник


09/05/12
25179
Несколько запоздалый и оффтопичный комментарий, но... все-таки зачем пытаться для решения подобной задачи использовать инструмент совершенно другого назначения (причем большой, неудобный для интеграции и дорогой), если есть другие, лишенные всех этих недостатков?

Самый обычный gnuplot сделает это буквально одной командой. Входной формат чуть отличается, но это легко переделать (в т.ч. и средствами gnuplot). Берем файл с подобным содержимым:
Код:
10 10 3 5
10 20 4 4
10 30 -2 -5
10 40 4 4
20 10 3 5
20 20 4 4
20 30 -2 -5
20 40  4 4
30 10 -2 -5
30 20 3 5
30 30  4 4
30 40  4 4
40 10 3 5
40 20  4 4
40 30 -2 -5
40 40 -2 -5

пишем plot "dat.dat" w vec и получаем результат ниже:


Вложения:
dat.png
dat.png [ 18.38 Кб | Просмотров: 0 ]
 Профиль  
                  
 
 Re: Как создать 2D векторное поле в Mathematica
Сообщение02.01.2017, 15:28 
Заслуженный участник


25/02/11
1786
Как вам уже говорили, для массива данных нужна команда ListVectorPlot. Чтобы работало, надо в справке смотреть, в каком виде должны быть аргументы. Если это проделать, то выяснится, что нужный формат это список data={a1,...,an}, где каждый элемент имеет вид a1={{x,y},{vx,vy}} $-$ {координаты точки, координаты вектора}. Т.е. вот так работать будет:

data = {{{1, 1}, {2, 2}}, {{3, 1}, {2, 0}}, {{1, 2}, {0, 2}}};
ListVectorPlot[data, VectorPoints -> All]


Как получить такой формат данных? Ответ: надо знать команды работы со списками. А также формат, в котором данные у вас. Если после импорта они имеют вид списка списков длины четыре: data={{x,y,vx,vy},...}, то можно поделить данные на пары командой Partition[#, 2]&/@data.

 Профиль  
                  
 
 Re: Как создать 2D векторное поле в Mathematica
Сообщение02.01.2017, 15:36 


19/02/14
27
Параллельно с Mathematica, коллега мне рекомендовал Origin, который вроде бы заточен именно на графику.
В этом Origin я освоил построение графика функции одной и двух переменных, но на векторном поле зашел в тупик.

Если логика разработчиков графики в Mathematica является для меня недосягаемой, то логика Origin - вообще потусторонняя для меня.
Поэтому я уже боюсь - осваивать еще одну программу gnuplot для графики у меня уже терпения не хватит.

Хорошо, закончим на этом. Буду ждать, когда Mathcad реализует построение 3D векторных полей.

Всем большое спасибо за участие.

 Профиль  
                  
 
 Re: Как создать 2D векторное поле в Mathematica
Сообщение02.01.2017, 15:44 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли
Into the Fire в сообщении #1181423 писал(а):
Origin, который вроде бы заточен именно на графику.
Ну так и Математика в плане визуализации не лыком, знаете ли, шита.
Into the Fire в сообщении #1181423 писал(а):
Буду ждать, когда Mathcad реализует построение 3D векторных полей.
Вы скорее поседеете. Осваивайте Математику, не ленитесь.

 Профиль  
                  
 
 Re: Как создать 2D векторное поле в Mathematica
Сообщение02.01.2017, 15:45 
Заслуженный участник


09/05/12
25179
Into the Fire в сообщении #1181423 писал(а):
Если логика разработчиков графики в Mathematica является для меня недосягаемой, то логика Origin - вообще потусторонняя для меня.
Поэтому я уже боюсь - осваивать еще одну программу gnuplot для графики у меня уже терпения не хватит.
Вы взялись за очень сложные инструменты, у которых графика - лишь одна из функций. Соответственно, если требовалось найти что-то простое и одновременно эффективное, то советы, которые Вам дали, были неудачны.

 Профиль  
                  
 
 Re: Как создать 2D векторное поле в Mathematica
Сообщение02.01.2017, 15:48 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли
Into the Fire в сообщении #1181423 писал(а):
Если логика разработчиков графики в Mathematica является для меня недосягаемой
Если бы вы не поленились потратить день на освоение азов и принципов Wolfram Language (а они не столь сложны, как вам показалось), то дальнейшее решение конкретных задач далось бы вам в разы и на порядки проще.

 Профиль  
                  
 
 Re: Как создать 2D векторное поле в Mathematica
Сообщение02.01.2017, 19:20 


19/02/14
27
Для Vince Diesel.

Я сделал, как вы сказали, получилось. Это моя картинка:

Изображение

Это надо же было придумать такую организацию ввода данных, особенно с командой Partition. Тот парень, который Wolfram - понимает толк в извращениях.

Хотя, справедливости ради должен признать, что уже почувствовал сильные стороны в Mathematica.

Еще раз всем спасибо!

 Профиль  
                  
 
 Re: Как создать 2D векторное поле в Mathematica
Сообщение02.01.2017, 19:35 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли
Into the Fire в сообщении #1181469 писал(а):
Это надо же было придумать такую организацию ввода данных
Вы за деревьями не видите леса. Если бы вы потратили... ладно, не буду повторяться, чего уж.
Into the Fire в сообщении #1181469 писал(а):
особенно с командой Partition
Если вы имеете в виду нагромождение октоторпов, амперсандов, слэшей и собачек, то оно лишь для непосвящённого выглядит адским хаосом. Мало-мальски разбирающийся читает это с лёгкостью. Вот если бы вы потратили... ;-)

 Профиль  
                  
 
 Re: Как создать 2D векторное поле в Mathematica
Сообщение02.01.2017, 21:05 


19/02/14
27
Aritaborian - Вот если бы вы потратили... ;-)

Я постараюсь. Спасибо за поддержку.

 Профиль  
                  
 
 Re: Как создать 2D векторное поле в Mathematica
Сообщение02.01.2017, 23:04 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли
Into the Fire в сообщении #1181501 писал(а):
Вот если бы вы потратили
На что? На изучение Wolfram Language? Так я и потратил немало и продолжаю тратить почти каждый день. На помощь вам в его изучении? Потратил и готов продолжать тратить при условии, что корм — в коня.

 Профиль  
                  
 
 Re: Как создать 2D векторное поле в Mathematica
Сообщение05.01.2017, 14:05 


19/02/14
27
Здравствуйте коллеги. Извините за беспокойство, но возник очередной вопрос: как редактировать 3D векторное поле в Mathematica?
Требуется изменить форму стрелок, в случае 2D векторного поля это получается - двойным кликом захожу в режим "редактировать"
и далее через Drawing Tools в опции Arrowhead выбираю нужное. Но для 3D векторного поля зайти в режим "редактировать" у меня не получается.
Поясните пожалуйста, в чем здесь дело.

 Профиль  
                  
 
 Re: Как создать 2D векторное поле в Mathematica
Сообщение05.01.2017, 15:21 


11/07/16
801
Можно применить опции (см. ListVectorPlot3D ). Ср. результаты
Код:
vectors = Table[{x, y, z}, {x, -1, 1, .1}, {y, -1, 1, .1}, {z, -1,  1, .1}];
ListVectorPlot3D[vectors, VectorScale -> {0.1, Scaled[0.5]}]
ListVectorPlot3D[vectors]

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 31 ]  На страницу Пред.  1, 2, 3  След.

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



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

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


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

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