2014 dxdy logo

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

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




 
 Абсолютно симметричный тензор
Сообщение07.11.2011, 13:17 
Аватара пользователя
Пытаюсь в математике построить тензор ранга $m$ в размерности $n$ так, чтобы он был симметричен при перестановке любых двух индексов и зависел от минимального кол-ва параметров.
Мой метод(недоработанный):
Код:
m=2; //
n=4; // Задаем начальные значения
range = index = {};
For[i = 1, i <= m, i++,
index = Append[index, Subscript[j, i]]; //генерируем список индексов
range = Append[range, {Subscript[j, i], 1, n}]  //генерируем итераторы (не работает)


Т.е. оно работает, и даже присваевает range значение
Код:
{{Subscript[j, 1], 1, 4}, {Subscript[j, 2], 1, 4}}

Но далее задумывалось сделать так:
Код:
A = Table[Apply[a, Sort[index]], range]// сортируем индексы(в порядке возрастания, но это не суть) и присваевам элементу с индексом  {i1,i2...im} значение элемента с индексом  Sort[{i1,i2...im}]

Но для функции Table нужно перечислять параметры через запятую а у меня range является матрицей. Что делать?

И второй вопрос(чтобы не открывать новую тему):
сколько независимых компонент у абсолютно симметричного тензора ранга $m$ в размерности $n$?

 
 
 
 Re: Абсолютно симметричный тензор
Сообщение07.11.2011, 14:54 
Bulinator в сообщении #500542 писал(а):
И второй вопрос(чтобы не открывать новую тему):
сколько независимых компонент у абсолютно симметричного тензора ранга $m$ в размерности $n$?
$C_{n+m-1}^m$

 
 
 
 Re: Абсолютно симметричный тензор
Сообщение07.11.2011, 15:45 
Аватара пользователя
espe в сообщении #500566 писал(а):
$C_{n+m-1}^m$

Спасибо!

-- Пн ноя 07, 2011 14:55:32 --

Update:
Где-то вначале определяю функцию:
Код:
F[list_] := a @@ Sort[list];

А далее при создании таблицы пишу так:
Код:
A:=Table @@ Join[{F @@ {index}}, range])// В аргументе Join генерируется список параметров функции Table

Получается, почему-то, просто-матрица:
Код:
{{a[1, 1], a[1, 2], a[1, 3], a[1, 4]}, {a[2, 1], a[2, 2], a[2, 3],
  a[2, 4]}, {a[3, 1], a[3, 2], a[3, 3], a[3, 4]}, {a[4, 1], a[4, 2],
  a[4, 3], a[4, 4]}}

:(((

 
 
 
 Re: Абсолютно симметричный тензор
Сообщение07.11.2011, 16:38 
Bulinator в сообщении #500542 писал(а):
Но для функции Table нужно перечислять параметры через запятую а у меня range является матрицей. Что делать?
Есть выход! Надо сначала заменить голову выражения с List на Sequence, а потом только подставить на место итераторов в Table. Sequence-выражение «разворачивается» в параметры, куда бы вы его не засунули.
Чтобы это сделать, вам надо вместо range подставлять Sequence @@ range.

 
 
 
 Re: Абсолютно симметричный тензор
Сообщение07.11.2011, 16:39 
Аватара пользователя
arseniiv, спасибо за ответ. Но я уже это сделал и возникла другая проблема(см. сообщение выше).

-- Пн ноя 07, 2011 15:44:02 --

Нашел дебильный солюшн, но работает(притом только один раз до перезагрузки ядра):
Код:
m = 2;
n=4;
index = {};
range = {};
For[i = 1, i <= m, i++,
range = Append[range, {Subscript[j, i], 1, n}];
index = Append[index, Subscript[j, i]]]
A = Apply[Table, Join[{F @@ {index}}, range]];
F[list_] := a @@ Sort[list];

Проделав то-же самое во второй раз, получим неправильный результат:)))) Можно конечно в начало вставить
Код:
Clear[F]
но как-то стремно....

 
 
 
 Re: Абсолютно симметричный тензор
Сообщение07.11.2011, 16:55 
Может, всё это засунуть в Block? Тогда F каждый раз будет локальной, и её очищать не надо будет.

Я пока что ничего не понял, :oops: потому только такое пространное могу.

 
 
 
 Re: Абсолютно симметричный тензор
Сообщение07.11.2011, 17:05 
Аватара пользователя
arseniiv в сообщении #500610 писал(а):
Я пока что ничего не понял

Упрощенный код:
Код:
m = 2;
n=4;
Clear[F];
index = {};
range = {};
For[i = 1, i <= m, i++,
range = Append[range, {Subscript[j, i], 1, n}];
index = Append[index, Subscript[j, i]]]
A = Apply[Table, Join[{F[index]}, range]];
F[list_] := a @@ Sort[list];

Если не очищать F, то Математика эволюирует выражение F[index], перед тем как вставить в Table. Однако на тот момент index={j_1,j_2} а не численным значениям, так что Sort в F не сортирует значения и вместо F[index] вставляется просто a[j_1,j_2] и лишь потом индексам задаются их значения. А ежели функция F не определена, Математика оставляет заместо нее просто F[j_1,j_2], и вставляет правильные значения после ее определения.

 
 
 
 Re: Абсолютно симметричный тензор
Сообщение07.11.2011, 17:11 
Тогда, к примеру, вместо A = напишите A :=. Кажется, должно такое отложенное вычисление именно здесь пригодиться тоже.

-- Пн ноя 07, 2011 20:12:21 --

Действительно, по смыслу := тут всё-таки ближе.

 
 
 
 Re: Абсолютно симметричный тензор
Сообщение07.11.2011, 17:15 
Аватара пользователя
arseniiv в сообщении #500623 писал(а):
Действительно, по смыслу := тут всё-таки ближе.

Ан-нет... Не работает. :))) И знаете почему? Проследите очередь выполнения операций.

 
 
 
 Re: Абсолютно симметричный тензор
Сообщение07.11.2011, 18:25 
Аватара пользователя
Пишу потомкам. Если кому-нибудь понадобится:

Код:
SymTenz[srank_, sdym_, sname_: a] :=
Block[{index = {}, range = {},Flongname,i,A},
  For[i = 1, i <= srank, i++,
   range = Append[range, {Subscript[j, i], 1, sdym}];
   index = Append[index, Subscript[j, i]]];
  A = Table @@ Join[{Flongname[index]}, range];
  Flongname[list_] := sname @@ Sort[list];
  Return[A]]

Параметры:
srank- ранг тензора
sdym- размерность пространства
sname- имя переменной(по умолчанию- a)

 
 
 
 Re: Абсолютно симметричный тензор
Сообщение07.11.2011, 18:39 

(Стрянно.)

Bulinator в сообщении #500628 писал(а):
Проследите очередь выполнения операций.
Ну так с := очередь ведь не важна! Определим так, а потом эдак или наоборот — не важно, ведь := присваивает без немедленного вычисления. Странно, что не сработало. :roll:

Bulinator в сообщении #500663 писал(а):
sdym
От слова dymension, да? :D

 
 
 
 Re: Абсолютно симметричный тензор
Сообщение07.11.2011, 19:19 
Аватара пользователя

(Оффтоп)

arseniiv в сообщении #500668 писал(а):
От слова dymension, да?

Нет :))))))


-- Пн ноя 07, 2011 18:20:34 --

arseniiv в сообщении #500668 писал(а):
ведь := присваивает без немедленного вычисления.

Но потом же, когда это вычисление уже начинается, порядок выполнения важен :))))

 
 
 
 Re: Абсолютно симметричный тензор
Сообщение07.11.2011, 19:27 
Так ведь когда оно начнётся, всё уже определено! Или я недоглядел.

 
 
 
 Re: Абсолютно симметричный тензор
Сообщение07.11.2011, 19:31 
Аватара пользователя
arseniiv
прямой эксперимент противоречит Вашей теории. Просто откройте Математику и скопируйте код.
И прикажите установить на мессере фотоаппаратуру если Вам слова моего мало(с)... :)

 
 
 
 Re: Абсолютно симметричный тензор
Сообщение07.11.2011, 19:33 

(Оффтоп)

Пока не могу. :roll:

 
 
 [ Сообщений: 15 ] 


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