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

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




На страницу 1, 2, 3  След.
 Как создать 2D векторное поле в Mathematica
Здравствуйте коллеги. Заново поднимать тему не хочется, наверняка она уже обсуждалась.
Подскажите пожалуйста, где именно на ресурсе 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
Аватара пользователя
Into the Fire в сообщении #1180944 писал(а):
В Mathematica есть функция PlotVectorField
Нет такой. Есть VectorPlot. Об остальном позже, как доберусь до машины с установленной Математикой (надеюсь, кто-нибудь меня опередит ;-)

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

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

 
Для 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
Попробуйте
Код:
Import["A.dat","Table"]
вместо
Код:
Import["out.dat","Table"]
. Наверно, надо указать также путь к файлу
Код:
A.dat
. Больше деталей указано на Import.

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

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

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

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

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

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

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

 Re: Как создать 2D векторное поле в Mathematica
Аватара пользователя
Ну давайте упростим ;-)
Во-первых, импортируем данные:
Код:
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
Спасибо, что согласились помочь. Похоже, рассказывать еще придется.

У меня после выполнения оператора 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
Аватара пользователя
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
Всё, получилось. Я использовал оператор типа Plot[a, {х,1,21}], который выдавал не то, что надо.
Ваше предложение использовать оператор ListPlot[a, Joined -> True] привело все в норму. Теперь понял в чем дело.

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

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

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

 Re: Как создать 2D векторное поле в Mathematica
Аватара пользователя

(Занудство)

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

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


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