2014 dxdy logo

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

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




На страницу Пред.  1, 2, 3  След.
 
 Re: Как создать 2D векторное поле в Mathematica
Сообщение01.01.2017, 22:50 
У меня опять просьба о помощи в построении 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 
Аватара пользователя
Самое что ни на есть первое: у вас есть готовый массив данных, а не функция. Значит, нужно использовать не 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 
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 
Несколько запоздалый и оффтопичный комментарий, но... все-таки зачем пытаться для решения подобной задачи использовать инструмент совершенно другого назначения (причем большой, неудобный для интеграции и дорогой), если есть другие, лишенные всех этих недостатков?

Самый обычный 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 и получаем результат ниже:


У вас нет доступа для просмотра вложений в этом сообщении.

 
 
 
 Re: Как создать 2D векторное поле в Mathematica
Сообщение02.01.2017, 15:28 
Как вам уже говорили, для массива данных нужна команда 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 
Параллельно с Mathematica, коллега мне рекомендовал Origin, который вроде бы заточен именно на графику.
В этом Origin я освоил построение графика функции одной и двух переменных, но на векторном поле зашел в тупик.

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

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

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

 
 
 
 Re: Как создать 2D векторное поле в Mathematica
Сообщение02.01.2017, 15:44 
Аватара пользователя
Into the Fire в сообщении #1181423 писал(а):
Origin, который вроде бы заточен именно на графику.
Ну так и Математика в плане визуализации не лыком, знаете ли, шита.
Into the Fire в сообщении #1181423 писал(а):
Буду ждать, когда Mathcad реализует построение 3D векторных полей.
Вы скорее поседеете. Осваивайте Математику, не ленитесь.

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

 
 
 
 Re: Как создать 2D векторное поле в Mathematica
Сообщение02.01.2017, 15:48 
Аватара пользователя
Into the Fire в сообщении #1181423 писал(а):
Если логика разработчиков графики в Mathematica является для меня недосягаемой
Если бы вы не поленились потратить день на освоение азов и принципов Wolfram Language (а они не столь сложны, как вам показалось), то дальнейшее решение конкретных задач далось бы вам в разы и на порядки проще.

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

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

Изображение

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

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

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

 
 
 
 Re: Как создать 2D векторное поле в Mathematica
Сообщение02.01.2017, 19:35 
Аватара пользователя
Into the Fire в сообщении #1181469 писал(а):
Это надо же было придумать такую организацию ввода данных
Вы за деревьями не видите леса. Если бы вы потратили... ладно, не буду повторяться, чего уж.
Into the Fire в сообщении #1181469 писал(а):
особенно с командой Partition
Если вы имеете в виду нагромождение октоторпов, амперсандов, слэшей и собачек, то оно лишь для непосвящённого выглядит адским хаосом. Мало-мальски разбирающийся читает это с лёгкостью. Вот если бы вы потратили... ;-)

 
 
 
 Re: Как создать 2D векторное поле в Mathematica
Сообщение02.01.2017, 21:05 
Aritaborian - Вот если бы вы потратили... ;-)

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

 
 
 
 Re: Как создать 2D векторное поле в Mathematica
Сообщение02.01.2017, 23:04 
Аватара пользователя
Into the Fire в сообщении #1181501 писал(а):
Вот если бы вы потратили
На что? На изучение Wolfram Language? Так я и потратил немало и продолжаю тратить почти каждый день. На помощь вам в его изучении? Потратил и готов продолжать тратить при условии, что корм — в коня.

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

 
 
 
 Re: Как создать 2D векторное поле в Mathematica
Сообщение05.01.2017, 15:21 
Можно применить опции (см. 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  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group