2014 dxdy logo

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

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




 
 [Wolfram mathematica] получить значение индекса
Сообщение01.03.2015, 00:58 
Задача примерно такая: есть достаточно произвольный массив, допустим матрица, примерно такого вида:
$\left(
\begin{array}{cccc}
 \lambda _1 \psi _1 & \lambda _1 \phi _1 & \psi _1 & \phi _1 \\
 \lambda _2 \psi _2 & \lambda _2 \phi _2 & \psi _2 & \phi _2 \\
 \lambda _3 \psi _3 & \lambda _3 \phi _3 & \psi _3 & \phi _3 \\
 \lambda _4 \psi _4 & \lambda _4 \phi _4 & \psi _4 & \phi _4 \\
\end{array}
\right)$
Нужно выполнить замену, например:
$\psi_{2k}=-\phi^*_{2k-1}$
Непонятно как это делать, я пробовал создать шаблон с которым можно было бы сравнивать каждый элемент, но не ясно как создать такой шаблон. Или как-то исхитриться с SameQ, но тоже ничего не выходит. Мне казалось в математике должны быть какие-то мощные селекторы, которые позволяют выбрать любой кусок в выражении, но в хелпе и гугле только какие-то тривиальные примеры их использования.

Ещё один глупый вопрос: существует ли способ мержить матрицы без плясок с бубном? Я имею ввиду встроенные функции. Чтобы из трёх столбцов a,b,c составить матрицу мне пришлось использовать такую конструкцию:
Код:
Transpose[Flatten[{Transpose[a], Transpose[b], Transpose[c]}, 1]]

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

 
 
 
 Re: [Wolfram mathematica] получить значение индекса
Сообщение01.03.2015, 02:41 
Насчёт шаблона: не пробовали что-нибудь типа \[Psi][n_?EvenQ] :> -Conjugate[\[Phi][n-1]]? (Надеюсь, правильно записал не открывая M..)

-- Вс мар 01, 2015 04:44:25 --

(Как нижний индекс представляется — не помню, поэтому написал как применение. Работать должно одинаково хорошо (т. е. или плохо) с обоими.)

 
 
 
 Re: [Wolfram mathematica] получить значение индекса
Сообщение01.03.2015, 10:36 
no_name в сообщении #983872 писал(а):
Чтобы из трёх столбцов a,b,c составить матрицу мне пришлось использовать такую конструкцию:

Столбец это вложенный список список a={{a1},...} или что? Если первое, а столбцы заданы в a[k], $k=1,\ldots,n$, то так:
Код:
Transpose@Flatten[Table[a[k], {k, n}], {3}][[1]]

 
 
 
 Re: [Wolfram mathematica] получить значение индекса
Сообщение01.03.2015, 16:15 
Аватара пользователя
no_name, если у Вас матрица в символьном виде, то см. пост arseniiv. Может быть, нужно будет написать
Код:
Subscript[\[Psi], n_?EvenQ] :> -Conjugate[Subscript[\[Phi], 2n-1]]
В моднявеньких весиях можно как-то так
Код:
Indexed[\[Psi], {n_?EvenQ}] :> -Conjugate[Indexed[\[Phi], {2n-1}]]


no_name в сообщении #983872 писал(а):
существует ли способ мержить матрицы без плясок с бубном?
Ещё посмотрите функцию ArrayFlatten.

 
 
 
 Re: [Wolfram mathematica] получить значение индекса
Сообщение06.03.2015, 00:18 
arseniiv, Vince Diesel, Mysterious Light, большое спасибо, очень продвинулся.

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


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