Criando uma matriz com subscritos e sobrescritos
Gostaria de descobrir como construir uma matriz usando subscritos e sobrescritos com base nas seguintes informações:
Cs = {1, 3, 5};
Ss = {1, -1, 1};
Rules = {1 -> "+", -1 -> "-"};
Ss1 = Ss /. Rules;
Se eu tentar, por exemplo:
{SubsuperscriptBox["c", Cs[[1]], Ss1[[1]]],
SubsuperscriptBox["c", Cs[[2]], Ss1[[2]]],
SubsuperscriptBox["c", Cs[[3]], Ss1[[3]]]} // DisplayForm
Recebo um resultado de:
$\{c^{+}_1,c^{-}_3,c^{+}_5\}$
É isso que eu quero obter. No entanto, quero fazer isso de forma mais automática, em vez de codificá-lo como acabei de fazer. Quer dizer, devo ser capaz de variar os arrays Cs e Ss para algo arbitrário. Por exemplo, digamos que em vez disso:
Cs = {1, 2, 4, 5};
Ss = {1, -1, 1, -1};
Rules = {1 -> "+", -1 -> "-"};
Ss1 = Ss /. Rules;
Eu deveria então obter:
$\{c^{+}_1,c^{-}_2,c^{+}_4,c^{-}_5\}$
Claro, eu poderia apenas alterar o segundo bloco de código, mas quero ver se há uma maneira mais limpa de fazer isso, sem precisar alterá-lo manualmente.
Respostas
Você pode usar, por exemplo,
MapThread[
SubsuperscriptBox["c", ##] &,
{Cs, Ss1}
]
Cs = {1, 2, 4, 5};
Ss = {1, -1, 1, -1};
Ss1 = Ss /. {1 -> "+", -1 -> "-"};
Thread[Subsuperscript["c", Cs, Ss1]]
Você também pode Apply (@@@)funcionar Subsuperscript["c", ##]¶ pares de valores de Cse Ss1(ou seja, para Transpose[{Cs, Ss1}}]):
Subsuperscript["c", ##] & @@@ Transpose[{Cs, Ss1}]