LINUX.ORG.RU

Непрерывная фаза в 3D

 ,


0

2

Arg, Atan2 и тд дают скачки, в одном измерении они по-разному убираются, в 2D не пробовал, но вот уже голову сломал как это сделать в 3D, неужели Вольфрам не может это сделать сам? У меня-то беда заколчается в том, что есть линии вихрей (дислокации, причём часто весьма хитрые) и фаза там действительно скачет по физике на pi или несколько pi, а есть разумеется места, где она скачет на 2pi потому что так устроен Arg. Сначала избаловали нас так, что табличные интегралы позабыли, а теперь вот со скачками бороться заставили.

★★★★★
Ответ на: комментарий от ZERG

Ну аргумент комплексной величины определён от -pi до pi, поэтому на графике где должен быть линейный набег фазы от х наблюдаются скачки, которые порой жутко мешают. Лечится как-то так. Но когда у тебя поле от x,y,z, то фаза такой рваной луковой шелухой выглядит, что только держись.

WerNA ★★★★★
() автор топика
Ответ на: комментарий от WerNA

Лечится как-то так.

Попробуй этот метод применить к вращению 3D вектора кватернионом ©.

quickquest ★★★★★
()
Ответ на: комментарий от WerNA

Аа, у меня похожая проблема была. А что тебе мешает ввести folding number и считать, сколько раз твоя функция прошла полный период? потом просто к фазе прибавляй и умножай на значение периода.

ZERG ★★★★★
()
Ответ на: комментарий от ZERG

Ну я и так и так крутил, у меня есть скачки фазы на n*pi во многих местах по физике (вихри) и она очень хитро идёт даже в пределах некоторого слоя по интенсивности, ну и скачки arg на это накладываются. Я обленился если честно и жду решения от Вольфрама, но вот уже 11-я версия, а простого решения не вижу

кватернионы не умею... попробую в 2D фазу улучшить двигаясь из одной точки, скажем центральной дислокации во все стороны и устраняя скачки

кстати, такие же проблемы с собственными векторами, моменты инерции тоже скачут на pi, там я поборол костылями, не особо вникая в то, как выбирается направление

WerNA ★★★★★
() автор топика
Ответ на: комментарий от WerNA

Ну блин, ты же прекрасно понимаешь, что вольфрам даёт только инструменты, а не итоговое решение. GIGO принцип тоже работает.

Кватернионы простые, просто нужно малость почитать. Для ориентации самое оно.

Покажи модель, может решим.

ZERG ★★★★★
()
Ответ на: комментарий от ZERG

Вот этот ужас в самом простом случае, когда просто тор скрученный один раз. Слева сечения, справа 3D. Интенсивность красивая, вот сечения. В 3D на яблоко очень похоже. Это правда возбуждённый, а в спокойном состоянии он фигура вращения (по уровню одинаковой интенсивности) Похоже на скирмион, только у нас система с диссипацией и сильной нелинейностью. С фазой я заморачивался ради правильной раскраски поверхности, но получалось более или менее пристойно, а сегодня вот хотел для 3D принтера сделать модель такую, чтобы линии одинаковой фазы образовали сетку, сквозь которую были видны внутренности. Так вот аккуратно фазу выдрать и сделать периодическую функцию по поверхности проблема из-за скачков.

Ну Вольфрам в последних версиях столько нового опять придумал, с графикой кучу опций для себя открыл, эффект от которых достигался и ранее, но вручную, например PlotTheme. Вот я и думаю почему не придумали математики непрерывную фазу? Я когда пишу вручную на фортране, то фаза обычно получается гладкой, но она вылезает так при интегрировании, а вот если от поля Arg или Atan|Atan2, то вот вам скачки.

Наболело)

WerNA ★★★★★
() автор топика
Ответ на: комментарий от WerNA

Ох, я уже пару лет теорию поля не трогал. Можешь показать сами уравнения и фазу в них?

Ммм, да у тебя любая обратная тригонометрическая функция даст скачки из-за периодичности.

Странно, что ты делаешь такие сложные штуки, а про фазу не помнишь :)

ZERG ★★★★★
()
Ответ на: комментарий от ZERG

ну периодичность не пугает, но скачки это на практике рваные края где не нужно, которые надо сглаживать или обрезать

обзор по этой теме, но в те годы такого как сейчас не было, в трёхмере не было фазовых дислокаций, простые «шарики», а в 2D дислокации были, но с фазой попроще было. Уравнение параболическое, Гинзбурга-Ландау, но не как обычно с нелинейностью 3-5 порядка, а с насыщающимися поглощением и усилением, оно есть в статьях по теме, например в этой. Фазы там явно нет, просто комплексная амплитуда... по-крайней мере, в динамической задаче, в стационарной краевой я получал непрерывную, как уже писал выше. А в динамике у меня a+i*b на выходе.

WerNA ★★★★★
() автор топика
Ответ на: комментарий от ZERG

зы ясно, что однозначности не будет, но относительно какой-то точки можно все скачки убрать в одномерном случае, в 2D для поля без дислокаций или вортекса тоже возможно, ну останется один скачок в центре вихря, он там и должен быть

WerNA ★★★★★
() автор топика
Ответ на: комментарий от WerNA

Ыэх, задал ты задачку :) Я со скалярными полями работал, там всё было на порядок проще. Где-то я слышал про подобную проблему на границе раздела сред, но не могу вспомнить, где именно.

Upd. У меня для тебя плохие новости на данный момент: кватернионы не помогут.

No, a quaternion doesn't store the cumulative rotation. There is a subtlety here, in that a quaternion can tell the difference between 0∘ and 360∘ in principle, and that might give you some false hope! However, as Muphrid points out, a quaternion can't tell the difference between 0∘ and 720∘. Moreover, depending on your software library, you can't necessarily count on the ability to distinguish between 0∘ and 360∘ in practice either.

ZERG ★★★★★
()
Ответ на: комментарий от WerNA

В общем, я вижу только один вариант - обобщить тот метод, что ты нашёл, на 3d. Фиксируй одну координату и просто делай сечения, сходу я так тебе и не скажу, как иначе.

Можно заимплементить свою версию матлабовских функций:

https://uk.mathworks.com/help/matlab/ref/unwrap.html

https://uk.mathworks.com/help/daq/ref/phase.html

ZERG ★★★★★
()
Ответ на: комментарий от ZERG

Товарищи тут говорят, что тебе нужны волновые векторы и направляющие косинусы + фурье преобразование.

https://mathematica.stackexchange.com/questions/129882/fixing-phase-unwrappin...

Ты мне заодно подкинул пару мыслей, как в своём проекте дефекты искать.

ZERG ★★★★★
()
Ответ на: комментарий от ZERG

о, спасибо, не знал что в Матлабе такое есть, когда-то он чуть ли единственный умел нормально строить volume 3D plot, я им как смотрелкой пользовался. Можно попробовать. А unwrap получается может во вногих измерениях убирать последовательно скачки по всем измерениям... Вот этих функций в Математике мне не хватает.

В моём случае учитывать много чего надо. По последней ссылке фаза у них почти линейна и скачок они засекают по сходу с этой линейной зависимости, а у меня она существенно немонотонна. Вообще-то мне достаточно выровнять фазу на изоповерхности интенсивности, то есть фактически два измерения, чтобы её раскрасить правильно... или сделать сетчатой. Попробую вручную погулять по этой поверхности, о результатах напишу.

WerNA ★★★★★
() автор топика
Последнее исправление: WerNA (всего исправлений: 1)
Ответ на: комментарий от WerNA

Проблема с тем, что «разрыв» на полном обороте фазы возникает. Если фаза на замкнутой поверхности, то и разрыва не будет.

Как надо твою алгебру привести к такому варианту я не знаю. Что то подходящее параметрически надо описать.

psv1967 ★★★★★
()
Ответ на: комментарий от psv1967

У меня есть разрывы на замкнутых поверхностях, т.к. дислокации. Для более или менее симметричных структур (где есть ось симметрии вращения или n-го порядка) я в принципе могу избавиться от одной из дислокаций домножением на exp(-i*m*fi), где fi полярный угол. Здесь m - топологический заряд, у меня он пока от 1 до 3.

Ну я уже попросил напечатать поверхности без фазы, а то уже не успеваем к конференции. Но к фазе я ещё вернусь.

WerNA ★★★★★
() автор топика
Ответ на: комментарий от ZERG

Нет, я пока забил. У нас с коллегой вообще по-разному получается даже с разрывами. Он в Математике строит изоповерхность и раскрашивает фазой - одна картинка, с разводами. У меня в OpenDX то же самое другая, кмк ближе к действительности. Причем существенно отличается для навороченных узловых солитонов. У меня atan2, у него Arg[].

Я подозреваю, что Математика интерполирует неверно. ListPlot3D строит честно, но цвет считается через интерполированную функцию. Будут новые скоро... буду возиться.

WerNA ★★★★★
() автор топика
Ответ на: комментарий от WerNA

Так не должно быть. Одна модель должна давать одни результаты с одним и тем же алгоритмом. Другое дело, если вы встроенные функции используете, у которых внутри что-то хитро с числаками накручено. Я просто сам заинтересован в подобной штуке, думаю за топологические дефекты взяться.

P.S. А ты интерполяцией по точкам не занимался никогда?

ZERG ★★★★★
()
Последнее исправление: ZERG (всего исправлений: 1)
Ответ на: комментарий от ZERG

Ну с одним измерением делали в универе по книжкам. Сейчас я обленился, экстремумы если нужно уточнить, а сетка редкая, то приближаю параболами по трём точкам, используя центр и шесть соседних точек. Обычно у меня такие сетки, что на картинках получается и так неплохо, только файлы с данными здоровые.

WerNA ★★★★★
() автор топика
Ответ на: комментарий от ZERG

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

WerNA ★★★★★
() автор топика
Ответ на: комментарий от WerNA

Ты меня только что огорчил и озадачил. Меня не радует зависимость результата от компилятора.

ZERG ★★★★★
()
Ответ на: комментарий от ZERG

У меня методы итерационные (Кранк-Николсон, Ньютон...) так что неудивительно. Ошибка в последних знаках, постепенно становится заметной.

WerNA ★★★★★
() автор топика
Ответ на: комментарий от WerNA

Не у тебя одного ):

Я только что осознал, что ты можешь мне помочь. Как ты топологический заряд измеряешь? У меня просто в симуляциях что-то похожее на жидкие кристаллы, до меня не доходит, как это сделать в дискретных системах.

Т.е. я наблюдаю что-то в духе:

\\\\////
////\\\\

ZERG ★★★★★
()
Ответ на: комментарий от ZERG

Ну я вручную навешиваю фазу, домножая на exp(i*m*phi), поэтому я знаю сколько там оборотов. Дислокации потом деваться некуда, закон сохранения... хотя может распасться на одиночные вихри уйти или на границу и исчезнуть. Если надо смотреть, что происходит, то строю в сечении картинку и смотрю сколько раз цвет меняется.

WerNA ★★★★★
() автор топика
Ответ на: комментарий от WerNA

В общем, у каждого свой костыль, как я понимаю. Я просто не могу нормальный алгоритм найти для этого дела ):

ZERG ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.