2014 dxdy logo

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

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


Правила форума


Посмотреть правила форума



Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3  След.
 
 Re: Изгиб плоской молекулы
Сообщение06.08.2019, 23:35 
Аватара пользователя


26/05/12
1534
приходит весна?
Тогда проблема.

С другой стороны, поскольку смещение по Z мало, то поправки на координаты X и Y будут вообще второго порядка малости. Ими точно нельзя пренебречь?

-- 06.08.2019, 23:37 --

madschumacher, у вас есть возможность с нуля рассчитать координаты атомов в плоскости? Или они берутся "из справочника" в каждом случае?

 Профиль  
                  
 
 Re: Изгиб плоской молекулы
Сообщение06.08.2019, 23:38 
Заслуженный участник
Аватара пользователя


28/04/16
2388
Внутри ускорителя
B@R5uk в сообщении #1409012 писал(а):
Тогда проблема.

Я заметил. :lol: Поэтому и разместил вопрос в ПРР(М).
B@R5uk в сообщении #1409012 писал(а):
Ими точно нельзя пренебречь?

Ну наверное, раз я пишу, что нельзя, наверное я уже пробовал, и знаю, что нельзя?

B@R5uk в сообщении #1409012 писал(а):
у вас есть возможность с нуля рассчитать координаты атомов в плоскости?

Да, могу и рассчитать, могу и из справочника (базы данных) стырить.

 Профиль  
                  
 
 Re: Изгиб плоской молекулы
Сообщение06.08.2019, 23:42 
Аватара пользователя


26/05/12
1534
приходит весна?
madschumacher в сообщении #1409013 писал(а):
Да, могу и рассчитать...

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

 Профиль  
                  
 
 Re: Изгиб плоской молекулы
Сообщение06.08.2019, 23:47 
Заслуженный участник
Аватара пользователя


28/04/16
2388
Внутри ускорителя
B@R5uk в сообщении #1409016 писал(а):
Ну тогда нет проблем! Делайте тот же расчёт, только размещая атомы не в плоскости, а на поверхности второго порядка, которая жёстко привязана к центру масс молекулы и к её ориентации.

Ага, спасибо. Если бы это было так просто, я б не спрашивал об извращенных аналитичесих методах отображения плоскости на более сложную поверхность. Тем более, про простую версию этого, предложенную DeBill (модель пружинок) я уже комментировал, говоря, что это существенно усложняет задачу.

B@R5uk в сообщении #1409016 писал(а):
Длины связей должны остаться теми же, а вот углы между ними поплывут.

А это уже другое решение. У Вас есть идеи как сделать это конкретно, алгоритмически?

 Профиль  
                  
 
 Re: Изгиб плоской молекулы
Сообщение06.08.2019, 23:55 
Аватара пользователя


26/05/12
1534
приходит весна?
madschumacher в сообщении #1409006 писал(а):
Об этом я тоже писал, и сказал, что некие деформации все ж допустимы...
Я так понимаю, вы имеете в виду случаи цилиндрической деформации. Этому есть простое объяснение: у плоскости и цилиндра одна и та же кривизна, поэтому плоскость можно навернуть на цилиндр без растяжений. В общем случае этого не получится, поэтому надо честно считать.

-- 06.08.2019, 23:56 --

madschumacher в сообщении #1409017 писал(а):
У Вас есть идеи как сделать это конкретно, алгоритмически?
А вы можете поделиться тем, что у вас уже считает в плоском случае? Или секрет фирмы? Просто не хочется строить алгоритм на пустом месте.

 Профиль  
                  
 
 Re: Изгиб плоской молекулы
Сообщение07.08.2019, 00:06 
Заслуженный участник
Аватара пользователя


28/04/16
2388
Внутри ускорителя
B@R5uk в сообщении #1409018 писал(а):
А вы можете поделиться тем, что у вас уже считает в плоском случае? Или секрет фирмы? Просто не хочется строить алгоритм на пустом месте.

Код:
import numpy as np
from math import *
from copy import deepcopy

inpf=open("molecule.xyz", "r")

atn=[]
xyz=[]

nline=0
nat=0
for line in inpf:
    nline+=1
    words=line.split()
    if nline==1:
        nat=int(words[0])
    elif nline>2 and len(words)>3:
        atn.append(words[0])
        xyz.append(np.array(words[1:4], dtype=float))

if nat!=len(xyz):
    print("Number of atoms specified is inconsistent with xyz definition")
    exit(1)

xix=np.array([0.0,  0.2, 0.4, 0.6, 0.8, 1.0, 0.8, 0.6, 0.4, 0.2, 0.0, -0.2, -0.4, -0.6, -0.8, -1.0])*0.05
xiy=np.array([0.0 for i in xix])
def new_xyz(r, txix, txiy):
    tr=deepcopy(r)
    tr[-1] = txix*tr[0]**2 + txiy*tr[1]**2

    nold=np.array([0.0, 0.0, -1.])
    nold/=sqrt(np.dot(nold,nold))
    nnew=np.array([2.0*txix*tr[0], 2.0*txiy*tr[1], -1.0])
    nnew/=sqrt(np.dot(nnew,nnew))

    rpr=np.dot(nold,r)
   
    return (tr+nnew*rpr)

for i in range(0,len(xix)):
    print("%i\n %f  %f" % (nat, xix[i], xiy[i]))
    for n in range(0,len(atn)):
        tr=new_xyz(xyz[n], xix[i], xiy[i])
        print(" %3s  %15.4f %15.4f %15.4f "  % (atn[n],  tr[0], tr[1], tr[2]))


 Профиль  
                  
 
 Re: Изгиб плоской молекулы
Сообщение07.08.2019, 01:07 
Заслуженный участник
Аватара пользователя


18/05/06
13437
с Территории
Не надо извращённых методов. На поверхность, которую можно свернуть из плоскости, плоскость отображается легко. А на такую, которую нельзя - не отображается ни легко, ни сложно. Иначе зачем бы, думаете, люди морочились с проекцией Меркатора и другими? Взяли бы да развернули глобус на плоскость. Но нет, от искажений так не уйти.

В молекуле, скорее всего, было бы правильным найти нормальные колебания и выявить то из них, которое соответствует нужному движению.

 Профиль  
                  
 
 Re: Изгиб плоской молекулы
Сообщение07.08.2019, 06:50 
Заслуженный участник
Аватара пользователя


03/06/08
2181
МО
madschumacher в сообщении #1408993 писал(а):
Да, очень похоже на то, что хочется. Ну или с изгибами листа бумаги (с изломами, которые будут убираться, как на мыльной плёнке).
Это можно как-то описать в человеческих терминах?

Как свойства решений задачи Плато.
Кстати, описание асимптотик по малым отклонениям контура может оказаться довольно забавным, независимо от.

 Профиль  
                  
 
 Re: Изгиб плоской молекулы
Сообщение07.08.2019, 07:47 
Заслуженный участник
Аватара пользователя


28/04/16
2388
Внутри ускорителя
ИСН в сообщении #1409023 писал(а):
Иначе зачем бы, думаете, люди морочились с проекцией Меркатора и другими?

Именно поэтому я и думал, что готовое решение должно уже иметься в закромах. Если бы моя сова молекула только на глобус натягивалась, я бы просто заюзал какую-нть стереографическую проекцию, и дело с концами.
ИСН в сообщении #1409023 писал(а):
Но нет, от искажений так не уйти.

Ну я об этом и говорю: искажение - - это не страшно, лишь бы они были меньше, чем в простом отображении на поверхность 2го порядка.
ИСН в сообщении #1409023 писал(а):
В молекуле, скорее всего, было бы правильным найти нормальные колебания и выявить то из них, которое соответствует нужному движению.

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

пианист в сообщении #1409031 писал(а):
Как свойства решений задачи Плато.

Это та, о которой Фоменко как-то в Кванте писал? А где можно почитать про это, чтобы язык был понятен не-математикам?

 Профиль  
                  
 
 Re: Изгиб плоской молекулы
Сообщение07.08.2019, 07:51 
Аватара пользователя


26/05/12
1534
приходит весна?
madschumacher в сообщении #1409021 писал(а):
Код:
Я имел в виду не текст кода, а именно алгоритм словами.

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

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

 Профиль  
                  
 
 Re: Изгиб плоской молекулы
Сообщение07.08.2019, 08:19 
Заслуженный участник
Аватара пользователя


28/04/16
2388
Внутри ускорителя
B@R5uk в сообщении #1409039 писал(а):
Я имел в виду не текст кода, а именно алгоритм словами.

madschumacher в сообщении #1408958 писал(а):
Банальное отображение на плоскость второго порядка, так что координаты $(x,y,0) \rightarrow (x,y,z)$, где $z=k_x x^2 + k_y y^2 + k_{xy} xy$ не канают

 Профиль  
                  
 
 Re: Изгиб плоской молекулы
Сообщение07.08.2019, 08:22 
Заслуженный участник
Аватара пользователя


03/06/08
2181
МО
В Кванте не читал, но у Фоменко, да, есть результаты по этой теме, так что вполне может быть.
Я лично читал про Плато по несколько странному источнику ;), есть такая книжечка (в сети имеется), Полищук "Софус Ли", вот там.
Гляньте, вроде все понятно изложено.

 Профиль  
                  
 
 Re: Изгиб плоской молекулы
Сообщение07.08.2019, 09:44 
Аватара пользователя


26/05/12
1534
приходит весна?
Ладно. Мне видится только такое решение задачи. На координаты всех атомов накладывается ограничение, чтобы они лежали на поверхности 2-го порядка. На длины всех связей накладывается ограничение, чтобы они оставались неизменными. Из всех углов между связями вычитаются их значения в плоской молекуле, разности возводятся в квадрат и суммируются с некими весами, характеризующими жёсткость соответствующих углов между связями. В результате получается некая целевая функция и набор ограничений. Численно рассчитываем минимум этой целевой функции при заданных ограничениях. Получаем искомые координаты.

Это общий план, в него можно внести множество оптимизаций. Например, координаты $\{x,y,z\}$ будут весьма неудачными для сложности расчёта, их лучше заменить на углы, поскольку длины связей фиксированы. Ограничения на длину связи лучше не использовать в расчётах в лоб, а задаться небольшим числом новых угловых координат и по топологии молекулы рассчитать новые значения координат атомов. Это сразу удовлетворит требуемым ограничениям, и о них в последствии не нужно будет беспокоиться. Затем это всё подставляется в целевую функцию и оптимизируется по новым координатам.

 Профиль  
                  
 
 Re: Изгиб плоской молекулы
Сообщение07.08.2019, 10:31 


07/08/14
4231
Эту задачу можно так сформулировать?:
$s=\int\limits_{a}^{b} \sqrt{x'^2(t)+y'^2(t)+z'^2(t)}dt$
Известно $s$ (длина расстояния между точками) и вид функции, заданной параметрически (форма изгиба связей между точками).
Необходимо найти $x,y,z$

 Профиль  
                  
 
 Re: Изгиб плоской молекулы
Сообщение07.08.2019, 11:44 
Заслуженный участник
Аватара пользователя


28/04/16
2388
Внутри ускорителя
upgrade в сообщении #1409049 писал(а):
Эту задачу можно так сформулировать?:

Да, мне как раз тоже пришла такая идея.

В итоге реализовал что-то, что вроде меня сейчас устраивает. Привожу то, что сделал для проверки.
Допустим, у нас есть изначальный вектор $\mathbf{r}_0 = (x_0, y_0, 0)^\dagger$, мы его хотим перевести в вектор, который параметризован как $\mathbf{r} = (x_0 t, y_0 t , z(t) )^\dagger$, где $z = \underbrace{(ax_0^2 + bx_0 y_0 + cy_0^2)}_{q} t^2$ (т.е. мы уменьшаем проекцию $\mathbf{r}$ на плоскость $xy$, но эта проекция остаётся в том же направлении).
Дополнительным условием сделаем, что расстояние от начала координат $(0,0,0)^\dagger$ до новой точки по поверхности должно остаться прежним, т.е.
$\int \limits_0^{t_\text{fin}} \sqrt{\underbrace{x_0^2 + y_0^2}_{A} + \underbrace{(2q)^2}_{B}t^2} = \frac{A \arcsinh\left(\sqrt{\frac{B}{A}} t_\text{fin}\right)}{2 \sqrt{B}} + \frac{ t_\text{fin} \sqrt{B  t_\text{fin}^2 + A}}{2} = |\mathbf{r}_0| = \sqrt{x_0^2 + y_0^2}$.
Решая это уравнение, находим $t_\text{fin}$, которое и даёт нам искомые координаты.
На примере коронена получилось вот что:
Изображение

(код этого алгоритма)

Код:
import numpy as np
from math import *
from copy import deepcopy
import scipy.optimize as spo

inpf=open("coronene.xyz", "r")

atn=[]
xyz=[]

nline=0
nat=0
for line in inpf:
    nline+=1
    words=line.split()
    if nline==1:
        nat=int(words[0])
    elif nline>2 and len(words)>3:
        atn.append(words[0])
        xyz.append(np.array(words[1:4], dtype=float))

if nat!=len(xyz):
    print("Number of atoms specified is inconsistent with xyz definition")
    exit(1)


def curv_length(t, A, B):
    return (A*np.arcsinh(sqrt(B/A)*t)/(2.0*sqrt(B)) + 0.5*t*sqrt(B*t**2 + A) )

def lsqf(t, r0, A, B):
    return (curv_length(t, A, B) - r0)**2

def get_new_coords(xyz, a, b, c):
    lvec=sqrt(np.dot(xyz,xyz))
    newxyz = deepcopy(xyz)
    Q=2.0*(a*xyz[0]**2 + b*xyz[0]*xyz[1] + c*xyz[1]**2)
    if lvec>1.0e-2 and abs(Q)>1.0e-2:
        A=xyz[0]**2 + xyz[1]**2
        B=Q**2
        res=spo.minimize_scalar(lsqf, bounds=(0., 1.), args=(lvec, A,B), method='Golden')
        if res.success:
            newxyz[0]=xyz[0]*res.x
            newxyz[1]=xyz[1]*res.x
            newxyz[2]=0.5*Q*res.x**2
        else:
            print("Failed convergence in coordinates!")
            exit(1)
    return newxyz

for i in range(0,100):
    abc=0.05*2.0*(np.random.rand(3)-np.array([0.5,0.5,0.5]))
    print("%i\n %f  %f  %f" % (nat, abc[0], abc[1], abc[2]))
    for n in range(0,len(atn)):
        tr=get_new_coords(xyz[n], abc[0], abc[1], abc[2])
        print(" %3s  %15.4f %15.4f %15.4f "  % (atn[n],  tr[0], tr[1], tr[2]))
   



Спасибо большое всем за помощь и участие! :D

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

Модераторы: Модераторы Математики, Супермодераторы



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

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


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

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