2014 dxdy logo

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

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




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


19/02/14
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 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли
Into the Fire в сообщении #1180944 писал(а):
В Mathematica есть функция PlotVectorField
Нет такой. Есть VectorPlot. Об остальном позже, как доберусь до машины с установленной Математикой (надеюсь, кто-нибудь меня опередит ;-)

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


11/07/16
825
Посмотрите команду ListVectorPlot и Importing and Exporting Data.

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


27/04/09
28128
Into the Fire в сообщении #1180944 писал(а):
Массивы записаны в виде файлов.dat на диске.
Вообще говоря это недостаточно информативно. Да, расширение dat обычно бывает у файлов с двоичными данными, и да, можно предполагать, что по крайней мере хвост файла состоит из перечисления значений по столбцам затем по строкам. Но в каком формате эти значения — IEEE 754 binary64 или binary32? (А вдруг ещё в каком-то особенном.) Что в заголовке? Не расположены ли байты значений, случайно, в обратном порядке? Для импорта это всё одинаково важно, и не всегда результат импорта с неправильными параметрами можно будет отличить от правильного, если эти детали неизвестны заранее.

 Профиль  
                  
 
 
Сообщение30.12.2016, 12:20 


19/02/14
27
Для 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 


11/07/16
825
Попробуйте
Код:
Import["A.dat","Table"]
вместо
Код:
Import["out.dat","Table"]
. Наверно, надо указать также путь к файлу
Код:
A.dat
. Больше деталей указано на Import.

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


25/02/11
1797
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 
Заслуженный участник


27/04/09
28128
Into the Fire в сообщении #1180981 писал(а):
Моя программа написана в среде Delphi (Pascal), запись и чтение расчетных данных проводится операторами write и read.
А, ну тогда вы знаете всё нужное насчёт моего вопроса.

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


19/02/14
27
Совсем упростим задачу: имеется одномерный массив чисел в виде файла с условным именем а.dat. Файл расположен на диске, в какой-нибудь моей директории.
Этот одномерный массив чисел с условным именем а.dat будем называть функцией. Как построить график этой функции в Mathematica?

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

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

 Профиль  
                  
 
 Posted automatically
Сообщение30.12.2016, 20:35 
Админ форума
Аватара пользователя


19/03/10
8952
 i  Тема перемещена из форума «Программирование» в форум «Околонаучный софт»

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


11/06/12
10390
стихия.вздох.мюсли
Ну давайте упростим ;-)
Во-первых, импортируем данные:
Код:
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 


19/02/14
27
Спасибо, что согласились помочь. Похоже, рассказывать еще придется.

У меня после выполнения оператора 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 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли
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 


19/02/14
27
Всё, получилось. Я использовал оператор типа Plot[a, {х,1,21}], который выдавал не то, что надо.
Ваше предложение использовать оператор ListPlot[a, Joined -> True] привело все в норму. Теперь понял в чем дело.

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

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

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

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


11/06/12
10390
стихия.вздох.мюсли

(Занудство)

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

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

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



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

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


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

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