ISSN 2079-3316 ПРОГРАММНЫЕ СИСТЕМЫ: ТЕОРИЯ И ПРИЛОЖЕНИЯ № 1(10), 2012, с. 31-50
УДК 517.977
А. А. Ардентов
Интерфейс для моделирования эластик Эйлера в программной среде Mathematica
Аннотация. В классическом вариационном вычислении и оптимальном управлении хорошо известна задача о стационарных профилях упругого стержня. Леонард Эйлер, рассмотревший эту задачу в 1744 году, описал все возможные стационарные профили (эйлеровы эластики). В программной среде Mathematica написаны модули вычисления уравнений всех типов эластик, а макже модуль для их визуализации. Модули объединены в интерфейс, позволяющий получить изображение и параметризацию любой эластики через Web.
Ключевые слова и фразы: эластики Эйлера, Wolfram Mathematica, оптимальное управление, геометрия.
1. Введение
Задача Эйлера об эластиках имеет следующую геометрическую формулировку. Даны две точки а* = (ж*, у*) € R2, г € {0,1}, с закрепленными в них единичными векторами € TaiR2, |^| = 1 ,i € {0,1}. Требуется найти гладкую кривую 7(t) фиксированной длины I, выходящую из точки ао с вектором скорости vo и попадающую в точку ai с вектором скорости vi (см. рис. 1). Кроме того, на кривую накладывается дополнительное условие — интеграл квадрата кривизны имеет наименьшее значение вдоль искомой кривой:
fll
/ k2(t) dt ^ min .
o
Задача имеет простой физический смысл: дан упругий стержень фиксированной длины с закрепленными концами и направлениями стержня в концах. Требуется определить форму стержня. Возможные формы, которые может принимать упругий стержень, открыл Эйлер [1], они называются эйлеровыми эластиками.
Работа поддержана Российским фондом функдаментальных исследований, проект 12-01-00913-а.
© А. А. Ардентов, 2012
© Программные системы: теория и приложения, 2012
Рис. 1. Геометрическая постановка задачи
Первая параметризация эластик эллиптическими функциями была получена Л. Заалшютцем [2]. Вопрос об оптимальности эластик был поднят в диссертации Макса Борна [3]: будущий нобелевский лауреат доказал отсутствие сопряженных точек на эластиках без точек перегиба, т. е. что все неинфлексионные эластики являются локально оптимальными. Ю.Л. Сачков получил оценки точек разреза [4], в которых эластики теряют глобальную оптимальность, и сопряженных точек [5], в которых теряется локальная оптимальность. Различные вопросы, связанные с оптимальностью эластик, рассматривались в работах [ -10].
В данной работе представлены формулы для вычисления эластик, а также описание демонстрации в среде Mathematica [11], с помощью которой можно через web-интерфейс построить эластику любого типа и формы, а также получить параметризацию эластики.
2. Экстремальные траектории в задаче оптимального управления
Так как |г^| = 1, то далее рассматриваются вместо векторов соответствующие углы вг такие, что Vi = (cos 0i, sin 0j). Без ограничения общности начальная точка может быть выбрана в начале координат ((xo,yo) = (0, 0)), а начальный угол во установлен равным 0 (т. е. касательная параллельна оси Ох). Этого можно достичь за счет выбора системы координат на плоскости R2.
Описанная задача может быть также сформулирована как задача оптимального управления [12] в пространстве М = следующим образом:
2 v <?1 х,у Х °9
9(О) =
Г41 чНїї
.L 2
cos в sin в О
+ и
, и є M,
q(ti) = qi =
Жі
Vi
Oi
dt —ї min.
Заметим, что кривизна кривой k(t) = \Jx2(t) + y2(t) = |0(t)| = |w(i)|.
Напомним основные результаты работы [13]. К рассматриваемой задаче оптимального управления был применен принцип максимума Понтрягина [14]. Полученная гамильтонова система для нормальных экстремалей сведена к уравнению математического маятника:
(1) /3 = с, с = — sin Р,
где р — угол отклонения от устойчивого положения равновесия маятника, а с — его линейная скорость.
Таким образом, экстремальные траектории задачи параметризуются точками фазового цилиндра маятника, задающего пространство сопряженных переменных С = Mc x Sp. Уравнение маятника (1) имеет следующий интеграл энергии:
с2
Е = — cos^ є [—І, +^о).
Для различных уровней энергии маятника получены разные выражения для экстремальных траекторий q(t) (см. [13]). Отсюда получена классификация эластик, см. рис. 2.
Более подробное описание каждого типа приведено в дальнейших пунктах 2.1, 2.2.
2.1. Невырожденные эластики
На рис. 3 показаны два основных семейства невырожденных эластик, выходящих из начала координат с нулевым начальным углом. Каждая траектория задается тройкой bo, к, г — эллиптическими координатами в пространстве сопряженных переменных [15]. На рис. 3
Рис. 2. Классификация эластик
траектории имеют конечную длину, которую задает параметр времени Ь.
Рис. 3. Неинфлексионные и неинфлексионные эластики
Эллиптические функции Якоби, используемые в формулах, определяются следующим образом [16]:
XV п (Ф &
■ф = ат и и = Ь(ф) = — ----,
-'0 у 1 — к2 эт2 Ь
Е(м) = / V!—&,
0
гф
(и) =
0
эп и = эт ат и, сп и = соэ ат и,
ёпи = \/1 — к2 эп2 и, К(&) = Р (—) .
Инфлексионными называют эластики, которые имеют на луче t € [0, +то) бесконечное количество точек перегиба (см. слева рис. 3). Уравнения этих кривых получены в работе [13]:
2 /
х(Ъ0, к, г, ■£) = 1(2к2 эп2 Ъ0 — 1)--((2к2 эп2 Ъ0 — 1) ( Е(Ь4) — Е(Ь0)) +
+ 2к2 ёп Ъ0 эп Ь0(сп Ь4 — сп Ь0)),
2 /
у(Ь0, к, г, £) = 2кЪ ёп Ь0 эп Ь0--[2к ёп Ь0 эп Ъ0( Е(Ь() — Е(Ь0)) —
— к(2к2 эп2 Ъ0 — 1)(спЬ4 — спЬ0)),
где Ь4 = Ъ0 + Н, Ъ0 € М, к € (0, 1), г € М+.
Рис. 4. Пример критической эластики
Неинфлексионными называются невырожденные эластики, которые на луче Ь € [0, +то) не имеют точек перегиба (см. справа рис. 3). Уравнения для этих кривых, как и для инфлексионных, зависят от
времени і и параметров Ь°, к, г — эллиптических координат в пространстве сопряженных переменных [15]:
ф°, к, г,о = _| ^2сп Ь-к 8„ £ ( Л, к _ Л, Ь-к°) + ( Е (£) _
_Е (I))(2зп21° _')) + (к2 _ ОС2"2 I _ 1)<,
Л, А, П () = -1; ( 2 СП £ s" £ ( E (£) — E (£) ) — ( dn £
0 2 0 2 0 0
- dn Т) (2” ~й — Ч) + 2 {¥ — Vcn tsn ■
где bt = Ьо + ^ &о € R, к € (0,1), re R+.
Критические эластики представляют собой предельный случай инфлексионных и неинфлексионных эластик при к ^ 1 (см. рис. 4). Их уравнения зависят от параметров Ьо, г, t:
х(Ьо, г, t) = sh2 60(sh2 b0 — 1)t----0 f2(sh bt — sh b0) th 60+
г V
+ sh b0(sh2 b0 — 1)(th bt — th b0)^j,
y(b0, r, t) = 2t sh b0 sh b0---0 (2 th 60(th bt — th b0) —
г V
— sh b0(sh bt — sh b0)(sh2 60 — 1)) . где bt = b0 + rt, b0 € R, r € R+.
2.2. Вырожденые эластики
К вырожденным эластикам относят окружности:
x(R,t) = R sin —, y(R,t) = r( 1 — cos
Л V K.J
где R — радиус окружности.
И наконец, прямые соответствуют самому простому и оптимальному случаю — стержень не деформирован, интеграл энергии равен 0, траектории глобально оптимальны до бесконечности:
x(t) = t, y(t)=0.
3. Интерфейс в среде Mathematica
Для более наглядного представления траекторий введем для каждого типа эластики более естественные параметры, которые используются в интерфейсе для эластик (см. рис. 5).
0ut[6]=
parameters of elastica
angle П 0
k Q^=> П 0.799
, —-g i
phase <^=Q n l
periods Q □ 1
graphic options
У
type of elastica: (#) Inflectional 0 Non-inflectional Q Critical Q Circle Q Line
Рис. 5. Интерфейс в свернутом виде
3.1. Естественные параметры для эластик
Инфлексионные и неинфлексионные эластики являются наиболее общими типами эластик, которые параметризуются одинаковым вектором параметров (Ьо,г, k,t).
Введем новый параметр Phase, который задает фазу эластики. Этот параметр соответствует параметру Ьо, отсюда формулы перехода: Phase = am ^0, b0 = г F(Phase).
Окружности, инфлексионные и неинфлексионные эластики являются периодическими. Введем параметр Periods = ^, где Т — период эластики. Выражение периода эластики зависит от типа эластики:
• для инфлексионной эластики Т = 4Кк);
• для неинфлексионной Т = 2 к K (к);
• для окружности Т = 2'kR.
Для критических и прямолинейных эластик далее вместо параметра времени t будем использовать параметр длины Length = t.
3.2. Функции интерфейса
В среде Mathematica запрограммированы 5 модульных функций вычисления эластик по параметрам, которые описаны в подразделе 3.1. Для вычисления различных типов эластик использовались соответствующие формулы, описанные в подразделах 2.1, 2.2. На рис. 6 приведена одна из новых схем быстрого вычисления формул, задающих невырожденные эластики, разработанная при создании интерфейса.
Рис. 6. Схема вычисления функций, задающих инфлек-сионную эластику
Головной модуль выполняет функции интерфейса. Основными элементами управления в интерфейсе являются ползунки (см. рис. 7). Например, с помощью ползунка Angle задается начальный угол поворота эластики во € [0, 2^] (определенный в начале раздела 2). Если нажать справа от ползунка на кнопку +, то появится меню для управления ползунком:
Ф Wolfram Demonstrations Project
Q. SEARCH
Euler's elastlcae
▼parameters of elastica
aogfe (—Q---------------- 9 1,16239
|Ц°» I ОСЕ® Q
к .--------------Q— Я 0.856
г ,---------------a 3.51
phase <-------------Q----- я 4.80664
▼graphic options
thickness .--
у
0.6, ГУ ~- N ч \ ■ 1
\ А \ /V 1 1 / / / /
-0.6 \0/ -0.2 \ V \
-оЬ
Л / .
' Рахатеtrizat ion
х[С ] := 0.39714789063478056 (0.4130687614720834*^ - 0.56981
Y[t_] := 0.9177546256839811* 0.4130687614720834*t - 0.569801
type of elastica: ©Inflectional О Non-inflectional О Critical О Circle О Line
Рис. 7. Интерфейс на сайте http://demonstrations.wolfram.com
• В первом поле можно задать произвольное значение параметра в числовом (например, 124-7883), а также в символьном виде с помощью кода Mathematica (например, (Pi + Sin[1])/5!, для более подробной информации см. [11]).
• Step Backward смещает ползунок на некоторую величину влево и соответственно увеличивает значение выбранного параметра, если оно не является максимальным.
• Play запускает анимацию с изменением текущего параметра.
• Step Forward смещает ползунок на некоторую величину вправо и соответственно уменьшает значение выбранного параметра, если оно не является минимальным.
• Faster увеличивает скорость выполнения анимации.
• Slower замедляет скорость выполнения анимации.
• Forward or Backward меняет закон, задающий направление движения ползунка: Forward — ползунок двигается только вперед, в конце переходя на начало; Backward — ползунок двигается только назад, переходя из начала в конец; Forward and Backward — ползунок двигается вперед-назад, меняя направление в конце и в начале.
Описанным меню обладают все ползунки интерфейса.
Поле Type of elastica может принимать 5 значений:
(1) Inflectional задает инфлексионную эластику (см. подраздел 2.1);
(2) Non-inflectional вычисляет неинфлексионную эластику (см. подраздел 2.1);
(3) Critical соответствует критической эластике (см. подраздел 2.1);
(4) Circle отображает окружность (см. подраздел 2.2);
(5) Line отображает прямые (см. подраздел 2.2).
Каждому типу эластик соответствуют свои параметры (см. рис. 7, блок parameters of elastica):
(1) Angle, к, г, Phase, Periods для инфлексионных эластик;
(2) Angle, к, г, Phase, Periods для неинфлексионных эластик;
(3) Angle, г, Ьо, Length для критических;
(4) Angle, Radius, Periods для окружностей;
(5) Angle, Length для прямых.
После основных параметров располагаются графические опции (блок graphic options на рис. 7), общий для каждого типа эластики:
• thickness — параметр, задающий толщину линии;
• dashing задает пунктирный стиль кривой;
• color отвечает за цвет.
По заданным параметрам интерфейс выдает изображение дуги эластики длиной t и запись на языке Mathematica функций, задающих параметризацию (блок Parametrization на рис. 7). У пользователя интерфейса есть возможность скопировать построенные в векторном формате линии в буфер обмена. Для этого достаточно два раза нажать правой кнопкой мыши на кривую, после чего кривая и рамка вокруг нее выделится оранжевым цветом. Далее стандартным сочетанием клавиш скопировать выделенный объект в буфер, а
затем вставить его в произвольный документ, поддерживающий взаимодействие с векторной графикой (например, в документ Microsoft Word).
Для автозапуска анимации текущего типа эластик следует нажать на внутреннюю кнопку Autorun в правом верхнем углу интерфейса. В результате возникнет дополнительное меню Autorun, имеющее те же кнопки, что и расширенное меню ползунка.
4. Заключение
Описанный в статье интерфейс размещен на сайте Wolfram [17]. Интерфейс имеет формат вычисляемого документа (CDF), который ставит в центр легкую в создании интерактивность, предоставляя пользователям возможность управлять содержимым и генерировать результаты в режиме реального времени.
Для работы интерфейса необходимо лишь скачать и установить бесплатный CDF-Player (свободен для скачивания в интернете по адресу http://www.wolfram.com/cdf-player/). Этот плеер позволяет смотреть через интернет приложения Wolfram Demonstration Project, не устанавливая систему Wolfram Mathematica.
Представленный интерфейс является примером использования программных средств Wolfram Mathematica для решения актуальной задачи теории упругости, теории управления и компьютерной графики. Он может использоваться исследователями, а также преподавателями, аспирантами и студентами при изучении данных областей.
Список литературы
[1] Эйлер Л. Об упругих стержнях // Метод нахождения кривых линий, обладающих свойствами максимума либо минимума, или решение изопериметри-ческой задачи, взятой в самом широком смысле. — М.—Л. : Гостехтеориздат, 1934, с. 447-572, Приложение I t1
[2] Saalschutz L. Der Belastete Stab Unter Einwirkung Einer Seitlichen Kraft: Auf Grundlage Des Strengen Ausdrucks Fur Den Krummungsradius. Leipzig, 1880. ti
[3] Born M. Untersuchungen uber die Stabilitat der elastischen Linie in Ebene und Raum, unter verschiedenen Grenzbedingungen. Gottingen : Dieterich, 1906. t1
[4] Sachkov Yu.L. Maxwell strata in the Euler elastic problem // Journal of
Dynamical and Control Systems, 2008. Vol. 14, no. 2, p. 169-234 t1
[5] Sachkov Yu.L. Conjugate points in the Euler elastic problem // Journal of
Dynamical and Control Systems, 2008. Vol. 14, no. 3, p. 409-439 t1
[6] Levyakov S. , Kuznetsov V. V. Stability analysis of planar equilibrium configurations of elastic rods subjected to end loads // Acta Mechanica, 2010. Vol. 211, p. 73-87 t1
[7] Maddocks J. H. Stability of nonlinearly elastic rods // Arch. Rat. Mech. Anal., 1984. Vol. 85, p. 311-354 t
[8] Попов Е. П. Теория и расчет гибких упругих стержней. М. : Наука, 1986. t
[9] Jin M. , Bao Z. B. Sufficient conditions for stability of Euler elasticas // Mechanics Research Communications, 2007. Vol.35, p. 193-200 t
[10] Ляв А. Математическая теория упругости. М.-Л. : ОНТИ, 1935. t1
[11] Wolfram S. Mathematica: A system for doing mathematics by computer. Reading (MA) : Addison-Wesley, 1991. t1, 3.2
[12] Аграчев А. А. , Сачков Ю. Л. Геометрическая теория управления. М. : Физматлит, 2004. t2
[13] Ардентов А. Экстремальные кривые в задаче Эйлера об эластиках // Труды международной конферении «Программные системы: теория и приложения», ИПС РАН, г. Переславль-Залесский, октябрь 2006 // Программные системы: теория и приложения. — М. : Физматлит, 2006 Т. 2, c. 23-38, В двух томах t2, 2, 2.1
[14] Понтрягин Л. С. , Болтянский В. Г. , Гамкрелидзе Р. В. , Мищенко Е. Ф. Математическая теория оптимальных процессов. М. : Наука, 1961. t2
[15] Сачков Ю. Л. Экспоненциальное отображение в обобщенной задаче Ди-доны // Математический сборник, 2003. Т. 194, № 9, c. 63-90 t2.1, 2.1
[16] Уиттекер Э. Т. , Ватсон Д. Курс современного анализа. М. : УРСС, 2002. t2.1
[17] http://demonstrations.wolfram.com/preview.html7draft/4T941/000045/ EulersElasticae. t4
Приложение: код интерфейса
Исходный код на языке Mathematica демонстрирует удобство использования документов формата CDF при разработке человекомашинных интерфейсов.
1
3
5
7
9
11
13
15
17
19
21
23
25
27
29
31
33
35
getlnfl [\[Psi]_, Periods_ , Angle_ , Color_, thickness_, dashing_ ] : =
Quiet [ Module [{Time , EE, EF, am, a2p , Rotation , (* functions
*)
k, Phase, k2 , b0 , r, am0, amt, SN0, SN02, EEt0, CNt0, forml , form2 , fun } ,
EE [p_ , k_ ] := EllipticE[p, k ] ;
EF[p_, k_] := EllipticF [p, k];
am [p_ , k_ ] : = JacobiAmplitude[p, k ] ;
a2p := {Cos[Angle], Sin[Angle ]};
Rotation [{x_, y_}] := {Total [{x, —y} a2p] , Total [ {y, x}
a2p]} ;
{r, Phase, k} = \[Psi]; k2 = Evaluate[k k ] ;
Time = Evaluate [4 Periods El l ip t ic K [ k2 ] / r ] ; b0 = Evaluate [EF [ Phase , k2] r];
am0 = Evaluate [am [ b0 , k2 ] ] ; amt = Evaluate [am [ b0 + r t,
k2 ] ] ;
SN0 = Evaluate [ Sin [am0 ]] ; SN02 = Evaluate [SN0 SN0 ] ;
EEt0 = Evaluate [EE [amt, k2 ] — EE [am0 , k2 ] ] ;
CNt0 = Evaluate [ Cos [amt ] — Cos [am0] ] ; form2 = Evaluate [2 k Sqrt[1 — k2 SN02] SN0 ] ;
forml = Evaluate [(2 k2 SN02 — 1)];
fun = Evaluate [Rotation [{forml t — 2 (forml EEt0 + for m2
CNt0 k)/r ,
form2 t — 2 (form2 EEt0 — forml CNt0 k)/r}]]; Column[{ ParametricPlot [fun ,
{t , 0, Time}, PlotPoints —> l0,
AxesLabel —> {Style[nxn, l8] , Style[nyn, l8]}, MaxRecursion —> 5 , ImageSize —> {300 , 280} ,
PlotStyle —> {Color, Thickness [ thickness ] ,
Dashing [ If [dashing == 0, {}, dashing]]}],
OpenerView [{ Style [" Parametrization " , Bold, l4] ,
Column [{ ”x [t_ ] := " <> ToString [ InputForm [ fun [ [ l ] ] ] ] ,
"\n",
"y[t_] := " <> ToString [ InputForm [fun [[2]]]]}]}]} , Dividers —> Center]
]];
getNonInfl [\[ Psi ]_, Periods_ , Angle_ , Color_, thickness_ , dashing_ ] : =
Quiet [Module[{ Time, EE, EF, am, a2p, Rotation, (* functions *)
k, Phase, k2 , b0 , r, am0, amt, SN0, SN02, EEt0, CNt0, DNt0 ,
forml , form2 , fun , pp , mr} ,
37
39
41
43
45
47
49
51
53
55
57
59
61
63
65
67
69
71
73
EE [p_ , k_ ] := EllipticE[p, k ] ;
EF[p_, k_] := EllipticF [p, k];
am [p_ , k_ ] := JacobiAmplitude[p, k ] ;
a2p := {Cos[Angle], Sin[Angle ]};
Rotation [{x_, y_}] := {Total [{x, —y} a2p] , Total [ {y, x}
a2p]} ;
{r, Phase, k} = \[Psi];
If [k < 0.2 , pp = 12; mr = 7; , pp = 10; mr = 5;
];
k2 = Evaluate[k k ] ;
Time = Evaluate [2 Periods El l ip t ic K [ k2 ] k/r]; b0 = Evaluate [EF [ Phase , k2] r];
am0 = Evaluate [am [ b0/k , k2 ] ] ; amt = Evaluate [am [ ( b0 + r t )/k, k2]];
SN0 = Evaluate [ Sin [am0 ]] ; SN02 = Evaluate [SN0 SN0 ] ;
EEt0 = Evaluate [EE [amt, k2 ] — EE [am0 , k2 ] ] ;
DNt0 = Evaluate [ Sqrt [ 1 — k2 Sin [amt] "2] — Sqrt[l — k2
SN02 ] ] ;
form2 = Evaluate [2 Cos[am0] SN0 ] ; forml = Evaluate [2 SN02 — l]; fun =
Evaluate [
Rotation[{(2/k2 — 1) forml t — 2 (forml EEt0 + for m2 DNt0) / (k r) ,
(2/k2 — 1) form2 t — 2 (form2 EEt0 — forml DNt0 ) /(k r) }]];
Column[{ ParametricPlot [fun ,
{t , 0, Time}, PlotPoints —> pp,
AxesLabel —> { Style [ "x" , 18], Style [ "y" , 18]},
MaxRecursion —> mr, ImageSize —> {300, 280},
PlotStyle —> {Color, Thickness [ thickness ] ,
Dashing [ If [dashing == 0, {}, dashing]]}, ImageSize
—> Large] ,
OpenerView [{ S ty le [ " Paramet rization " , Bold, 14],
Column [{ "x [t_ ] := " <> ToString [ InputForm [ fun [ [ 1 ] ] ] ] ,
"\n",
"y [t_ ] := " <> ToString [ InputForm [fun [[2]]]]}]}]} , Dividers —> Center]
]];
getCritical [ \ [ Psi ] _, Length _ , Angle_ , Color_, thickness_ , dashing_ ] : =
Quiet [Module[{ Rotation, fun, (* functions *)
b0, r, Sh0, Ch0, Sh2, Ch2, Sht, Cht, a2p},
a2p := {Cos[Angle], Sin[Angle ]};
77
79
81
83
85
87
89
91
93
95
97
99
101
103
105
107
109
111
Rotation [{x_, y_}] := {Total [{x, —y} a2p] , Total [ {y, x}
a2p]};
{г , b0} = \[Psi] ;
Sh0 = Evaluate [ Sinh [ b0 ] ] ; Ch0 = Evaluate [ Cosh [ b0 ] ] ;
Sh2 = Evaluate [Sh0 Sh0]; Ch2 = Evaluate [Ch0 Ch0 ] ;
Sht = Evaluate[Sinh[b0 + г t]] ; Cht = Evaluate[Cosh[b0 +
Г t]];
fun =
Evaluate [
Rotation [{(Sh2 — 1) t/Ch2 —
2 (Sh2 — 1)/(г Ch2) (Sht/Cht — Sh0/Ch0) —
4 Sh0 (1/Cht — 1/Ch0) /( г Ch2) ,
2 Sh0 t/ch2 — 4 Sh0 (Sht/Cht — Sh0/Ch0)/(r Ch2) +
2 (Sh2 — 1) (1/Cht — 1/Ch0) / ( г Ch2)}]];
Column[{ PaTametTicPlot [fun ,
{t , 0, Length}, PlotPoints —> 15, PlotRange —> All, AxesLabel —> {Style[nxn, 18], Style[nyn, 18]}, MaxRecuгsion —> 7 ,
PlotStyle —> {Coloг, Thickness [ thickness ] ,
Dashing [ If [dashing == 0, {}, dashing]]},
ImageSize —> {300, 280}],
Opene^iew [{ Style [" PammetHzation " , Bold, 14],
Column [{ ”x [t_ ] := " <> ToStгing [ InputFoгm [ fun [ [ 1 ] ] ] ] , "\n",
"\n", "y[t_] := " <> ToStгing [ InputFoгm [ fun [[2]]]]}]}]} ,
D i v i d e г s —> C e n t e г ]
]];
getCiгc [Radius_ , Peгiods_ , Angle_ , Colo^ , thickness_ , dashing_ ] : =
Quiet [ Module [{ a2p , getPoint , getA^ow}, a2p[angle_] := {Cos [angle], Sin [angle]};
get Point [ point_ ] := {Colo^ P oi n t S ize [ La^e ] , Point [point
]};
getA^ow [ point_ , length_ , angle_ ] : =
{Thickness [thickness] , Coloг , A^owheads [ La^e ] ,
Aггow [{point, point + length a2p[angle]}]};
If [Radius == 0 || Peгiods == 0,
Gгaphics [{ Dashing [ If [ dashing == 0, {}, dashing]],
Thickness [thickness] , Coloг , PointSize [Laгge] , Point [{0, 0}]},
ImageSize —> 300] ,
G^phics [{ Dashing [ If [ dashing == 0, {}, dashing]], Thickness [thickness] , Coloг ,
Ciгcle[a2p[Angle + Pi/ 2] Radius, Radius ,
Angle — Pi/2 + {0, 2 Pi PeHods}], get A^ow [( a2p [ Angle + Pi/2] +
117
119
121
123
125
127
129
131
133
135
137
139
141
143
145
147
149
a2p[Angle — Pi/2 + 2 Pi Periods — Periods /1000]) Radius ,
Periods /1000 , Angle + 2 Pi Periods]},
AspectRatio —> Automatic ,
AxesLabel —> {Style [ "x" , 18] , Style [ "y" , 18]} ,
PlotRange —> All ,
Axes —> True, ImageSize —> {300, 300}]
]
]];
getLine [Length_ , Angle_ , Color_ , thickness_ , dashing_ ] : =
Quiet [
If[Length == 0,
Graphics [{ Dashing [ If [dashing == 0, {}, dashing]],
Thickness [thickness] , Color, PointSize [Large] , Point [{0, 0}]},
ImageSize —> 300] ,
Graphics [{ Dashing [ If [dashing == 0, {}, dashing]],
Thickness [thickness] , Color ,
Arrowheads [Large, Thickness [thickness]] ,
Arrow[{{0, 0}, {Cos[Angle], Sin [Angle ]} Length}]}, AxesLabel —> { S t y le [ " x " , 18], Style["y", 18]},
AspectRatio —> Automatic , PlotRange —> All , Axes —> True
ImageSize —> {300, 300}]
]
];
Manipulate [Switch [Type ,
1 ,
Manipulate [
getInfl[{r, phase, k}, periods, angle, color, thickness, {dashing [[1]], dashing [[1]] dashing [[2]]}], OpenerView [{ St yle [" parameters of elastica", 16],
Column [{Control[{{angle, 0, Style [" angle", Italic]}, 0,
2 Pi ,
ImageSize —> Small , Appearance —> "Labeled"}] , Control[{{k, 0.799, Style ["k", Italic]}, 0, 0.99999, ImageSize —> Small , Appearance —> "Labeled"}] , Control[{{r, 1, Style["r", Italic]}, 0.00001, 4, ImageSize —> Small , Appearance —> "Labeled"}] , Control [{{ phase , 1, S ty le [" phase " , Italic]}, 0, 2 Pi,
ImageSize —> Small , Appearance —> "Labeled"}] , Control[{{periods , 1, Style ["periods" , Italic]} ,
0.00001, 4,
ImageSize —> Small , Appearance —> "Labeled"}]}]} , True ,
ImageSize —> 250] , Delimiter ,
OpenerView [{ St yle [" graphic options", 16],
155
157
159
161
163
165
167
169
171
173
175
177
179
181
183
185
Column [{Consol [{{thickness , 0.005, Style ["thickness", Italic ] } ,
0.002, 0.03, ContmlType —> Slideг , ImageSize —>
Small }] ,
Consol [{{ dashing , {0.05, 0.001},
Style ["dashing" , Italic ]} , {0.01 , 0.001} , {0.05 ,
4}}],
Consol [{colo^ Black, ImageSize —> Small ,
ContmlType —> ColoгSlideг }] } ] } , ImageSize —> 250], ContmlPlacement —> {Left}, ImageMa^ins —> Tiny, Auto^nSequencing —> {{5, 50}, {2, 50}, {3, 50}}],
2 ,
Manipulate [
get NonInfl [{г , phase, k}, periods , angle, ^^г , thickness, {dashing [[1]], dashing [[1]] dashing [[2]]}], Opene^iew [{ St yle [ " pa^mete^ of elastica", 16],
Column [{Consol [{{angle, 0, Style [" angle", Italic]}, 0,
2 Pi ,
ImageSize —> Small , Appeamnce —> "Labeled"}] ,
Consol [{{k, 0.799, Style ["k", Italic]}, 0.001,
0.99999 ,
ImageSize —> Small , Appeamnce —> "Labeled"}] ,
Consol [{{г, 1, S t y l e [ " г " , Italic]}, 0.00001, 4,
ImageSize —> Small , Appeamnce —> "Labeled"}] ,
Consol [{{ phase , 1, S ty le [" phase " , Italic]}, 0, 2 Pi,
ImageSize —> Small , Appeamnce —> "Labeled"}] , Contгol[{{peгiods , 2.3 , Style ["peгiods" , Italic ]} ,
0.00001, 4,
ImageSize —> Small , Appeamnce —> "Labeled"}]}]} ,
T^e ,
ImageSize —> 250] , Delimiteг ,
Opene^iew [{ St yle [ " gmphic options", 16],
Column [{Consol [{{thickness , 0.005, Style ["thickness", Italic ] } ,
0.002, 0.03, ContmlType —> Slideг , ImageSize —>
Small }] ,
Consol [{{ dashing , {0.05, 0.001},
Style ["dashing" , Italic ]} , {0.01 , 0.001} , {0.05 ,
4}}],
Consol [{colo^ Black, ImageSize —> Small ,
ContmlType —> ColoгSlideг }] } ] } , ImageSize —> 250], ContmlPlacement —> {Left}, ImageMa^ins —> Tiny, Auto^nSequencing —> {{5, 50}, {3, 50}, {4, 30}, {3,
30}}],
3 ,
Manipulate [ getCritical^^ b0}, Length, angle, colo^
191
193
195
197
199
201
203
205
207
209
211
213
215
217
219
221
thickness, {dashing [[1]], dashing [[1]] dashing [[2]]}], OpenerView [{ St yle [" parameters of elastica", 16],
Column [{Control[{{angle, 0, Style [" angle", Italic]}, 0, 2 Pi ,
ImageSize —> Small , Appearance —> "Labeled"}] , Control[{{r, 1, Style["r", Italic]}, 0.00001, 4, ImageSize —> Small , Appearance —> "Labeled"}] , Control [{{b0, —3,
Style [ " \! \ (\ * SubscriptBox [ \ ( b\) , \(0\) ]\) " , Italic ]}, —10,
10, ImageSize —> Small , Appearance —> "Labeled"}] , Control [{{Length , 5, Style ["length" , Italic ]} ,
0.00001, 6,
ImageSize —> Small , Appearance —> "Labeled"}]}]} , True ,
ImageSize —> 250] ,
Delimiter ,
OpenerView [{ St yle [" graphic options", 16],
Column [{Control[{{thickness , 0.005, Style ["thickness", Italic ] } ,
0.002, 0.03, ControlType —> Slider , ImageSize —> Small }] ,
Control [{{ dashing , {0.05, 0.001},
Style ["dashing" , Italic ]} , {0.01 , 0.001} , {0.05 ,
4}}],
Control [{color, Black, ImageSize —> Small ,
ControlType —> ColorSlider }]}]} , ImageSize —> 250], ControlPlacement —> {Left}, ImageMargins —> Tiny, AutorunSequencing —> {{4, 20}, {3, 70}, {2, 40}}],
4 ,
Manipulate [ getCirc [radius , periods , angle , color , thickness, {dashing [[1]], dashing [[1]] dashing [[2]]}], OpenerView [{ St yle [" parameters of elastica", 16],
Column [{Control[{{angle, 0, Style [" angle", Italic]}, 0, 2 Pi ,
ImageSize —> Small , Appearance —> "Labeled"}] , Control[{{radius, 1, Style [" radius", Italic]}, 0, 1,
ImageSize —> Small , Appearance —> "Labeled"}] , Control[{{periods, 0.7, Style ["periods", Italic]}, 0,
2 ,
ImageSize —> Small , Appearance —> "Labeled"}]}]} , True ,
ImageSize —> 250] ,
Delimiter ,
OpenerView [{ St yle [" graphic options", 16],
227
229
231
233
235
237
239
241
243
245
247
249
251
253
255
Column [{Consol [{{thickness , 0.005, Style ["thickness", Italic ] } ,
0.002, 0.03, ContmlType —> Slideг , ImageSize —>
Small }] ,
Consol [{{ dashing , {0.05, 0.001},
Style ["dashing" , Italic ]} , {0.01 , 0.001} , {0.05 ,
4}}],
Consol [{colo^ Black, ImageSize —> Small ,
ContmlType —> ColoгSlideг }] } ] } , ImageSize —> 250], ContmlPlacement —> {Left}, ImageMa^ins —> Tiny] ,
5,
Manipulate [ getLine [length , angle , ^^г ,
thickness, {dashing [[1]], dashing [[1]] dashing [[2]]}], Opene^iew [{ St yle [ " pa^mete^ of elastica", 16],
Column [{Consol [{{angle, 0.3, Style ["angle", Italic]},
0, 2 Pi ,
ImageSize —> Small , Appeamnce —> "Labeled"}] ,
Consol [{{length, 1, Style ["length", Italic]}, 0, 1,
ImageSize —> Small , Appeamnce —> "Labeled"}]}]} ,
T^e ,
ImageSize —> 250] ,
Delimiteг ,
Opene^iew [{ St yle [ " gmphic options", 16],
Column [{Consol [{{thickness , 0.005, Style ["thickness", Italic ] } ,
0.002, 0.03, ContmlType —> Slideг , ImageSize —>
Small }] ,
Consol [{{ dashing , {0.05, 0.001},
Style ["dashing" , Italic ]} , {0.01 , 0.001} , {0.05 ,
4}}],
Consol [{colo^ Black, ImageSize —> Small ,
ContmlType —> ColoгSlideг }] } ] } , ImageSize —> 250], ContmlPlacement —> Left , ImageMa^ins —> Tiny]
],
{{Type, 1,
Style["type of elastica: ", 16]}, {1 —> S t y l e [ "
Inflectional", 15],
2 —> Style [ " Non— inflectional", 15], 3 —> Style [ " Critical " , 15] ,
4 —> Style^'C^cle", 15], 5 —> Style ["Line", 15]}, ContmlType —> RadioButtonBaг} ,
ContmlPlacement —> {Bottom}]
Рекомендовал к публикации
д.ф.-м.н. Ю. Л. Сачков
Об авторе:
Андрей Андреевич Ардентов
Окончил в 2009 г. УГП имени А.К. Айламазяна, участник семинара «Nonlinear control and singularities», завершает обучение в аспирантуре ИПС РАН им. А.К. Айламазяна под руководством д.ф.-м.н. Ю. Л. Сачкова
e-mail: [email protected]
Образец ссылки на эту публикацию:
А. А. Ардентов. Интерфейс для моделирования эластик Эйлера в программной среде Mathematica // Программные системы: теория и приложения : электрон. научн. журн. 2012. T. 3, № 1(10), с. 31-50.
URL: http://psta.psiras.ru/read/psta2012_1_31-50.pdf
A. A. Ardentov. Euler’s alasticae interface in Mathematica.
Abstract. The elastica can be understood from a number of different aspects, including as a mechanical equilibrium, a problem of the calculus of variations, and the solution to elliptic integrals. In addition, it has a number of analogies with physical systems, including a sheet holding a volume of water, the surface of a capillary, and the motion of a simple pendulum. It is also the mathematical model of the mechanical spline, used for shipbuilding and similar applications, and directly inspired the modern theory of mathematical splines. More recently, the major focus has been on efficient numerical techniques for computing the elastica and fitting it to spline problems. A beautiful family of curves based on beautiful mathematics has constructed by elliptic functions and interfaced by Wolfram Mathematica program.
Key Words and Phrases: Euler’s elasticae, optimal control, geometry, modeling, Wolfram Mathematica.