File: maxima_103.html

package info (click to toggle)
maxima 5.47.0-9
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 193,104 kB
  • sloc: lisp: 434,678; fortran: 14,665; tcl: 10,990; sh: 4,577; makefile: 2,763; ansic: 447; java: 328; python: 262; perl: 201; xml: 60; awk: 28; sed: 15; javascript: 2
file content (330 lines) | stat: -rw-r--r-- 23,262 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Created by GNU Texinfo 5.1, http://www.gnu.org/software/texinfo/ -->
<head>
<title>Maxima Manual: Введение в пакет itensor</title>

<meta name="description" content="Maxima Manual: Введение в пакет itensor">
<meta name="keywords" content="Maxima Manual: Введение в пакет itensor">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="maxima_toc.html#Top" rel="start" title="Top">
<link href="maxima_264.html#g_t_0423_043a_0430_0437_0430_0442_0435_043b_044c-_0444_0443_043d_043a_0446_0438_0439-_0438-_043f_0435_0440_0435_043c_0435_043d_043d_044b_0445" rel="index" title="Указатель функций и переменных">
<link href="maxima_toc.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="maxima_102.html#g_t_041f_0430_043a_0435_0442-itensor" rel="up" title="Пакет itensor">
<link href="maxima_104.html#g_t_0424_0443_043d_043a_0446_0438_0438-_0438-_043f_0435_0440_0435_043c_0435_043d_043d_044b_0435-_043f_0430_043a_0435_0442_0430-itensor" rel="next" title="Функции и переменные пакета itensor">
<link href="maxima_102.html#g_t_041f_0430_043a_0435_0442-itensor" rel="previous" title="Пакет itensor">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.indentedblock {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
div.smalllisp {margin-left: 3.2em}
kbd {font-style:oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space:nowrap}
span.nolinebreak {white-space:nowrap}
span.roman {font-family:serif; font-weight:normal}
span.sansserif {font-family:sans-serif; font-weight:normal}
ul.no-bullet {list-style: none}
body {color: black; background: white;  margin-left: 8%; margin-right: 13%;
      font-family: "FreeSans", sans-serif}
h1 {font-size: 150%; font-family: "FreeSans", sans-serif}
h2 {font-size: 125%; font-family: "FreeSans", sans-serif}
h3 {font-size: 100%; font-family: "FreeSans", sans-serif}
a[href] {color: rgb(0,0,255); text-decoration: none;}
a[href]:hover {background: rgb(220,220,220);}
div.textbox {border: solid; border-width: thin; padding-top: 1em;
    padding-bottom: 1em; padding-left: 2em; padding-right: 2em}
div.titlebox {border: none; padding-top: 1em; padding-bottom: 1em;
    padding-left: 2em; padding-right: 2em; background: rgb(200,255,255);
    font-family: sans-serif}
div.synopsisbox {
    border: none; padding-top: 1em; padding-bottom: 1em; padding-left: 2em;
    padding-right: 2em; background: rgb(255,220,255);}
pre.example {border: 1px solid rgb(180,180,180); padding-top: 1em;
    padding-bottom: 1em; padding-left: 1em; padding-right: 1em;
    background-color: rgb(238,238,255)}
div.spacerbox {border: none; padding-top: 2em; padding-bottom: 2em}
div.image {margin: 0; padding: 1em; text-align: center}
div.categorybox {border: 1px solid gray; padding-top: 1em; padding-bottom: 1em;
    padding-left: 1em; padding-right: 1em; background: rgb(247,242,220)}
img {max-width:80%; max-height: 80%; display: block; margin-left: auto; margin-right: auto}

-->
</style>

<link rel="icon" href="figures/favicon.ico">
<script src="https://polyfill.io/v3/polyfill.min.js?features=es6>"></script>
<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
</head>

<body lang="ru" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<a name="g_t_0412_0432_0435_0434_0435_043d_0438_0435-_0432-_043f_0430_043a_0435_0442-itensor"></a>
<div class="header">
<p>
Next: <a href="maxima_104.html#g_t_0424_0443_043d_043a_0446_0438_0438-_0438-_043f_0435_0440_0435_043c_0435_043d_043d_044b_0435-_043f_0430_043a_0435_0442_0430-itensor" accesskey="n" rel="next">Функции и переменные пакета itensor</a>, Previous: <a href="maxima_102.html#g_t_041f_0430_043a_0435_0442-itensor" accesskey="p" rel="previous">Пакет itensor</a>, Up: <a href="maxima_102.html#g_t_041f_0430_043a_0435_0442-itensor" accesskey="u" rel="up">Пакет itensor</a> &nbsp; [<a href="maxima_toc.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="maxima_264.html#g_t_0423_043a_0430_0437_0430_0442_0435_043b_044c-_0444_0443_043d_043a_0446_0438_0439-_0438-_043f_0435_0440_0435_043c_0435_043d_043d_044b_0445" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Vvedenie-v-paket-itensor"></a>
<h3 class="section">25.1 Введение в пакет itensor</h3>

<p>В Maxima реализованы два различных типа операций над тензорами:
операции над компонентами &ndash; пакет <code>ctensor</code> и операции с индексами &ndash; пакет
<code>itensor</code>.
</p>
<p>ВАЖНОЕ ЗАМЕЧАНИЕ: Пожалуйста, ниже, обратите внимание на нововведения в системе индексных
обозначений для тензоров.
</p>
<p>При операциях с компонентами тензорный объект рассматривается, как многомерный массив
или матрица.  Операции свертки и ковариантного дифференцирования над такими объектами
фактически сводятся к дифференцированию элементов матрицы и суммированию по повторяющимся индексам
при помощи команды <code>do</code>.  Полученный результат операций над компонентами тензора
хранится в форме массива или матрицы.
</p>
<p>При операциях с индексами, тензор рассматривается как функция своих индексов (ковариантных,
контравариантных и индексов производной).  В этом случае результат тензорных операций,
например, таких как свертка или ковариантное дифференцирование, достигается только
с помощью соответствующих манипуляций с индексами, а не с
компонентами, которым они соответствуют.
</p>
<p>Оба подхода к рассмотрению дифференциальных, алгебраических и аналитических проблем в
контексте Римановой геометрии имеют и преимущества,  и недостатки,
которые выявляются при рассмотрении конкретных задач.  Необходимо иметь ввиду
следующие специфические свойства каждого из методов:
</p>
<p>i) Представление тензоров в явном виде через их компоненты делает
<code>ctensor</code> алгоритмически простым в использовании. Вычисления метрики,
производных тензоров и инвариантов реализуются непосредственно по определению.
Однако, несмотря на вычислительную мощь Maxima, в случае достаточно
сложной метрики, внутренние функциональные связи и координатные зависимости
компонент метрики легко могут привести к чрезвычайно громоздким выражениям,
со скрытой структурой.
</p>
<p>ii) В силу специфики способа, при котором тензора и операции над ними
рассматриваются в терминах символьных операций над их индексами, выражения,
вычисления которых в компонентном представлении выглядели бы громоздко, могут быть
иногда сильно упрощены при помощи использования симметрий тензоров и
специальных функций пакета <code>itensor</code>, использующих симметрии.  В тоже
время, индексное представление тензоров в этом пакете создает
определенные трудности при определении метрики, функций
и вычислении дифференцируемых объектов.
</p>






<a name="Novye-soglasheniya-dlya-oboznacheniya-tenzornykh-indeksov"></a>
<h4 class="subsection">25.1.1 Новые соглашения для обозначения тензорных индексов</h4>

<p>До настоящего времени, в пакете  <code>itensor</code> были приняты обозначения,
которые не сохраняли порядок индексов при операциях свертки, например:
</p>
<div class="example">
<pre class="example">(%i2) imetric(g);
(%o2)                                done
(%i3) ishow(g([],[j,k])*g([],[i,l])*a([i,j],[]))$
                                 i l  j k
(%t3)                           g    g    a
                                           i j
(%i4) ishow(contract(%))$
                                      k l
(%t4)                                a
</pre></div>

<p>Этот результат не верен за исключением случая когда тензор <code>a</code>
симметричен.  Порядок следования индекса теряется при свертке, несмотря на
то, что <code>itensor</code> сохраняет порядок индексов внутри
каждого набора ковариантных и контравариантных индексов (в соответствии
со свойствами симметрии).
</p>
<p>Для того, чтобы избежать данной проблемы была предложена новая система
обозначений, которая совместима с существующей. В данном случае
контравариантные индексы могут быть вставлены в нужную позицию в наборе
ковариантных, но со знаком минус. Функции типа  <code>contract()</code> и
<code>ishow()</code> были модифицированы таким образом, чтобы понимать
новые обозначения.
</p>
<p>В данных обозначениях вычисление предыдущего примера дает:
</p>
<div class="example">
<pre class="example">(%i5) ishow(g([-j,-k],[])*g([-i,-l],[])*a([i,j],[]))$
                                 i l       j k
(%t5)                           g    a    g
                                      i j
(%i6) ishow(contract(%))$
                                      l k
(%t6)                                a
</pre></div>

<p>В настоящий момент, единственной функцией, где  новые обозначения
играют существенную роль является <code>lc2kdt</code>. Благодаря этому
удается получить корректный результат для тензорного произведения
символов Леви-Чивита, применяя метрический тензор не прибегая
к пересортировке численных индексов обобщенных символов Кронекера.
</p>
<p>Поскольку данные нововведения сделаны относительно недавно, можно
ожидать присутствие ошибок.  Код был достаточно тщательно
протестирован, чтобы убедиться, что ничего не нарушается
при использовании старых обозначений. В тоже время при работе
в новых обозначения шанс получения ошибки довольно значителен.
Для исправления замеченных ошибок обращайтесь к разработчикам.
</p>

<a name="Manipulirovanie-tenzornymi-indeksami"></a>
<h4 class="subsection">25.1.2 Манипулирование тензорными индексами</h4>

<p>Пакет манипулирования тензорными индексами загружается в Maxima командой
<code>load(&quot;itensor&quot;)</code>. Доступен ряд демонстрационных программ,
которые загружаются командой <code>demo(tensor)</code>.
</p>
<p>В этом пакете тензор рассматривается, как функция индексов и их списков.
Список ковариантных индексов &ndash; это первый аргумент индексного
объекта. Далее идет список контравариантных индексов и индексы
производной. Списки могут быть пустыми &ndash; <code>[]</code>. Это говорит об отсутствии
ковариантный или контравариантных индексов тензора. Таким образом, <code>g([a,b],[c])</code>
представляет тензор <code>g</code>, который имеет 2 ковариантных индекса
<code>(a,b)</code>, один контравариантный &ndash; (<code>c</code>) и не имеет индексов производной.
</p>
<p>Если есть индексы производной, то они добавляются в качестве
дополнительных аргументов после списка контравариантных индексов.
Они могут быть либо определены пользователем в явном виде,  либо
получены в процессе дифференцирования тензора.
Поскольку обычная производная &ndash; это коммутативная операция, то индексы
производной по умолчанию сортируются в алфавитном порядке если флаг
<code>iframe_flag</code> не равен <code>true</code>, указывая на то, что
используется тетрадная метрика. Такой принцип сортировки делает возможным
для  Maxima распознать что, например, <code>t([a],[b],i,j)</code> есть тоже
самое что и <code>t([a],[b],j,i)</code>.  Дифференцирование индексных
объектов в отношении координат, индексы которых не являются аргументом
этого объекта, в обычной ситуации давало бы ноль, потому, что
по-умолчанию Maxima не знает, что тензор, представляемый в виде функции
по индексам, может неявно зависеть от соответствующей
координаты.  Модификация существующей функции <code>diff</code> в
пакете <code>itensor</code> приводит к тому, что любой индексный объект зависит от
любой переменной дифференцирования пока не объявлено обратное. Это
делает возможным распространить известное правило суммирования по немым
индексам на индексы производных. Необходимо отметить, что <code>itensor</code> не
заложена возможность для подъема индексов производных и поэтому они
всегда рассматриваются как ковариантные.
</p>
<p>В настоящий момент, все функции направленные на упрощение тензорных
выражений предполагают, что по умолчанию тензор не обладает
какими-либо свойствами симметрии. Это условие может быть переопределено путем
замены значения флага <code>allsym:false</code> на <code>true</code>. В этом
случае функции манипулирования индексами будут рассматривать все
индексные объекты, как полностью симметричные по спискам ковариантных
и контравариантных индексов.
</p>
<p>Пакет <code>itensor</code> рассматривает тензора, как функциональные объекты. При
манипулировании тензорными уравнениями используются алгебраические правила,
свойства симметрии и свертки. Кроме того, в <code>itensor</code> определены операции
ковариантного дифференцирования, а также кривизна и
кручение. Вычисления могут проводится также и с учетом метрики
подвижных базисов (тетрады) если значение переменной
<code>iframe_flag</code> равно <code>true</code>.
</p>
<p>В примере ниже показано как загрузить пакет <code>itensor</code>, задать имя
метрики и выполнить простые вычисления.
</p>
<div class="example">
<pre class="example">(%i1) load(&quot;itensor&quot;);
(%o1)      /share/tensor/itensor.lisp
(%i2) imetric(g);
(%o2)                                done
(%i3) components(g([i,j],[]),p([i,j],[])*e([],[]))$
(%i4) ishow(g([k,l],[]))$
(%t4)                               e p
                                       k l
(%i5) ishow(diff(v([i],[]),t))$
(%t5)                                  0
(%i6) depends(v,t);
(%o6)                               [v(t)]
(%i7) ishow(diff(v([i],[]),t))$
                                    d
(%t7)                               -- (v )
                                    dt   i
(%i8) ishow(idiff(v([i],[]),j))$
(%t8)                                v
                                      i,j
(%i9) ishow(extdiff(v([i],[]),j))$
(%t9)                             v    - v
                                   j,i    i,j
                                  -----------
                                       2
(%i10) ishow(liediff(v,w([i],[])))$
                               %3          %3
(%t10)                        v   w     + v   w
                                   i,%3    ,i  %3
(%i11) ishow(covdiff(v([i],[]),j))$
                                              %4
(%t11)                        v    - v   ichr2
                               i,j    %4      i j
(%i12) ishow(ev(%,ichr2))$
               %4 %5
(%t12) v    - g      v   (e p       + e   p     - e p       - e    p
        i,j           %4     j %5,i    ,i  j %5      i j,%5    ,%5  i j

                                         + e p       + e   p    )/2
                                              i %5,j    ,j  i %5
(%i13) iframe_flag:true;
(%o13)                               true
(%i14) ishow(covdiff(v([i],[]),j))$
                                             %6
(%t14)                        v    - v   icc2
                               i,j    %6     i j
(%i15) ishow(ev(%,icc2))$
                                             %6
(%t15)                        v    - v   ifc2
                               i,j    %6     i j
(%i16) ishow(radcan(ev(%,ifc2,ifc1)))$
             %6 %8                    %6 %8
(%t16) - (ifg      v   ifb       + ifg      v   ifb       - 2 v
                    %6    j %8 i             %6    i j %8      i,j

                                             %6 %8
                                        - ifg      v   ifb      )/2
                                                    %6    %8 i j
(%i17) ishow(canform(s([i,j],[])-s([j,i])))$
(%t17)                            s    - s
                                   i j    j i
(%i18) decsym(s,2,0,[sym(all)],[]);
(%o18)                               done
(%i19) ishow(canform(s([i,j],[])-s([j,i])))$
(%t19)                                 0
(%i20) ishow(canform(a([i,j],[])+a([j,i])))$
(%t20)                            a    + a
                                   j i    i j
(%i21) decsym(a,2,0,[anti(all)],[]);
(%o21)                               done
(%i22) ishow(canform(a([i,j],[])+a([j,i])))$
(%t22)                                 0
</pre></div>


<a name="Item_003a-Itensor_002fnode_002f_0424_0443_043d_043a_0446_0438_0438-_0438-_043f_0435_0440_0435_043c_0435_043d_043d_044b_0435-_043f_0430_043a_0435_0442_0430-itensor"></a><hr>
<div class="header">
<p>
Next: <a href="maxima_104.html#g_t_0424_0443_043d_043a_0446_0438_0438-_0438-_043f_0435_0440_0435_043c_0435_043d_043d_044b_0435-_043f_0430_043a_0435_0442_0430-itensor" accesskey="n" rel="next">Функции и переменные пакета itensor</a>, Previous: <a href="maxima_102.html#g_t_041f_0430_043a_0435_0442-itensor" accesskey="p" rel="previous">Пакет itensor</a>, Up: <a href="maxima_102.html#g_t_041f_0430_043a_0435_0442-itensor" accesskey="u" rel="up">Пакет itensor</a> &nbsp; [<a href="maxima_toc.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="maxima_264.html#g_t_0423_043a_0430_0437_0430_0442_0435_043b_044c-_0444_0443_043d_043a_0446_0438_0439-_0438-_043f_0435_0440_0435_043c_0435_043d_043d_044b_0445" title="Index" rel="index">Index</a>]</p>
</div>



</body>
</html>