2014 dxdy logo

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

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




На страницу 1, 2, 3  След.
 
 Как создать 2D векторное поле в Mathematica
Сообщение30.12.2016, 06:27 
Здравствуйте коллеги. Заново поднимать тему не хочется, наверняка она уже обсуждалась.
Подскажите пожалуйста, где именно на ресурсе dxdy рассматриваются вопросы построения векторных графиков в среде Mathematica (или OriginPro).

Задача в следующем. Есть двухмерные массивы a(x,y) и b(x,y), которые получены расчетным путем (x, y – координаты точек).
Массивы записаны в виде файлов.dat на диске. Нужно создать график векторного поля C(a,b) в виде стрелок.

В Mathematica есть функция PlotVectorField, которая это делает. Но я не знаю, как ввести численные данные файлов
a(x,y) и b(x,y) в Mathematica и соответственно в PlotVectorField.

 
 
 
 Re: Как создать 2D векторное поле в Mathematica
Сообщение30.12.2016, 06:42 
Аватара пользователя
Into the Fire в сообщении #1180944 писал(а):
В Mathematica есть функция PlotVectorField
Нет такой. Есть VectorPlot. Об остальном позже, как доберусь до машины с установленной Математикой (надеюсь, кто-нибудь меня опередит ;-)

 
 
 
 Re: Как создать 2D векторное поле в Mathematica
Сообщение30.12.2016, 07:41 
Посмотрите команду ListVectorPlot и Importing and Exporting Data.

 
 
 
 Re: Как создать 2D векторное поле в Mathematica
Сообщение30.12.2016, 12:00 
Into the Fire в сообщении #1180944 писал(а):
Массивы записаны в виде файлов.dat на диске.
Вообще говоря это недостаточно информативно. Да, расширение dat обычно бывает у файлов с двоичными данными, и да, можно предполагать, что по крайней мере хвост файла состоит из перечисления значений по столбцам затем по строкам. Но в каком формате эти значения — IEEE 754 binary64 или binary32? (А вдруг ещё в каком-то особенном.) Что в заголовке? Не расположены ли байты значений, случайно, в обратном порядке? Для импорта это всё одинаково важно, и не всегда результат импорта с неправильными параметрами можно будет отличить от правильного, если эти детали неизвестны заранее.

 
 
 
 
Сообщение30.12.2016, 12:20 
Для Markiyan Hirnyk. Посмотрел эти команды, спасибо. Сейчас осваиваю команду Importing and Exporting Data.

Согласно правилам написания команды Import["out.dat","Table"]
я пишу: Import["А.dat", "Table"], мне отвечают - Import: File not found during Import.
Тогда захожу в меню Insert, далее выбираю опцию File, отмечаю свой файл А.dat и открываю его. Появляется набор чисел из этого файла. Что дальше делать?

Для Aritaborian: не буду возражать по поводу названия функции, т.к. точно не знаю. Просто в одном из учебников было написано следующее:
PlotVectorField[ {fx, f у}, {x, xmin, xmax), {y, ymin, ymax} ] - строит плоскость из векторов (стрелок), ограниченную пределами изменения х и у;

Для arseniiv . Извините, такими деталями я не интересовался.
Моя программа написана в среде Delphi (Pascal), запись и чтение расчетных данных проводится операторами write и read.

 
 
 
 Re: Как создать 2D векторное поле в Mathematica
Сообщение30.12.2016, 12:43 
Попробуйте
Код:
Import["A.dat","Table"]
вместо
Код:
Import["out.dat","Table"]
. Наверно, надо указать также путь к файлу
Код:
A.dat
. Больше деталей указано на Import.

 
 
 
 Re: Как создать 2D векторное поле в Mathematica
Сообщение30.12.2016, 12:50 
Into the Fire в сообщении #1180981 писал(а):
я пишу: Import["А.dat", "Table"], мне отвечают - Import: File not found during Import.

Пропишите полный путь к файлу. Если он в директории, где находится файл математики (с расширением .nb), в который вы пытаетесь импортировать, то пойдет Import[NotebookDirectory[]<>"А.dat", "Table"].

 
 
 
 Re: Как создать 2D векторное поле в Mathematica
Сообщение30.12.2016, 17:24 
Into the Fire в сообщении #1180981 писал(а):
Моя программа написана в среде Delphi (Pascal), запись и чтение расчетных данных проводится операторами write и read.
А, ну тогда вы знаете всё нужное насчёт моего вопроса.

 
 
 
 Re: Как создать 2D векторное поле в Mathematica
Сообщение30.12.2016, 18:42 
Совсем упростим задачу: имеется одномерный массив чисел в виде файла с условным именем а.dat. Файл расположен на диске, в какой-нибудь моей директории.
Этот одномерный массив чисел с условным именем а.dat будем называть функцией. Как построить график этой функции в Mathematica?

Кто-нибудь умеет реально строить графики в Mathematica? (стандартные функции и их комбинации - не в счет)

Если кто-то может, помогите. Если не трудно, напишите код - там же всего несколько стандартных операторов. Или укажите ссылку на ресурс, где это по-человечески показано.

 
 
 
 Posted automatically
Сообщение30.12.2016, 20:35 
Аватара пользователя
 i  Тема перемещена из форума «Программирование» в форум «Околонаучный софт»

 
 
 
 Re: Как создать 2D векторное поле в Mathematica
Сообщение30.12.2016, 20:39 
Аватара пользователя
Ну давайте упростим ;-)
Во-первых, импортируем данные:
Код:
pts = Import["D:/MyAwesomeProject/a.dat"]
где вместо условного адреса, придуманного мною, вы указываете реальное расположение файла. Если в результате выполнения команды вы получаете список вида
Код:
{1., 1.2, 0.8, 1.4, 1.77, 2.12, 2.35}
i. e., ваш одномерный массив в нужном порядке, заключённый в одиночные фигурные скобки, перечисленный через запятую, то всё нормально, можно строить график. Если вы получаете что-то другое, нужно будет разобраться с форматом представления данных в файле a.dat. Об этом позже (если будет нужно).
Далее строим график:
Код:
g = ListPlot[pts, Joined -> True]
Получим график в виде ломаной: по умолчанию Математика проводит линейную интерполяцию между точками. По оси абсцисс будут натуральные числа, по оси ординат — импортированные значения, содержащиеся в переменной pts.
Справка по Import, справка по ListPlot.
Дальше что-нибудь рассказывать?

 
 
 
 Re: Как создать 2D векторное поле в Mathematica
Сообщение30.12.2016, 21:30 
Спасибо, что согласились помочь. Похоже, рассказывать еще придется.

У меня после выполнения оператора a = Import["D:\\BMW Disk D\\a.dat"] появляется следующее:

In[62]:= a = Import["D:\\BMW Disk D\\a.dat"]

Out[62]={{12.94, 12.89, 12.73, 12.28, 11.61, 11.26, 10.93, 10.65, 10.25, 9.91, 9.6}} почему-то двойные фигурные скобки, а вы говорили об одиночных.

Запись чисел в файл на диск проводится в цикле оператором write(a, D[i]:10:2).
Здесь а - имя файла, куда проводится запись, i - переменная цикла. Запись чисел идет в строку.

Пробовал варианты записи столбцом через оператор writeln(...). Также пробовал записывать дополнительно сам индекс,
т.е. оператор записи имел вид writeln(... i, D[i] ...). Но график не рисуется, вернее рисуется какая-то ерунда - одни горизонтальные линии.

 
 
 
 Re: Как создать 2D векторное поле в Mathematica
Сообщение30.12.2016, 21:41 
Аватара пользователя
Into the Fire в сообщении #1181077 писал(а):
Запись чисел в файл на диск проводится в цикле оператором write(a, D[i]:10:2).
Здесь а - имя файла, куда проводится запись, i - переменная цикла. Запись чисел идет в строку.

Пробовал варианты записи столбцом через оператор writeln(...). Также пробовал записывать дополнительно сам индекс,
т.е. оператор записи имел вид writeln(... i, D[i] ...).
Эта часть вашего техпроцесса лично мне ни к чему ;-) Оставьте всё как есть; чтобы избавиться от двойных фигурных скобок, пишите
Код:
pts = First[Import[...]]
или
Код:
pts = Import[...][[1]]
(это одно и то же).

И оформляйте, пожалуйста, фрагменты кода тегами [tt] или [code], так гораздо удобнее читать.

Об одиночных, двойных и прочих комбинациях фигурных скобок: почитайте раздел справки List Manipulation. Получите представление о том, как в Математике оформляются одномерные, двумерные и прочие списки и как ими жонглировать.

 
 
 
 Re: Как создать 2D векторное поле в Mathematica
Сообщение30.12.2016, 21:57 
Всё, получилось. Я использовал оператор типа Plot[a, {х,1,21}], который выдавал не то, что надо.
Ваше предложение использовать оператор ListPlot[a, Joined -> True] привело все в норму. Теперь понял в чем дело.

Еще раз большое спасибо!

Но должен сказать, что у меня не все. Теперь надо освоить 2D векторные поля, а потом 3D.
Ради 3D пришлось лезть в эту Mathematica. До этого полностью обходился Mathcad.

:D С Новым Годом! Удачи! :D

 
 
 
 Re: Как создать 2D векторное поле в Mathematica
Сообщение30.12.2016, 22:06 
Аватара пользователя

(Занудство)

Into the Fire в сообщении #1181083 писал(а):
Я использовал оператор
Не оператор, а функцию ;-)
Into the Fire в сообщении #1181083 писал(а):
Теперь надо освоить 2D векторные поля, а потом 3D.
Это тоже очень просто. Обращайтесь, вам помогут.

 
 
 [ Сообщений: 31 ]  На страницу 1, 2, 3  След.


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