Criando uma matriz com subscritos e sobrescritos

Oct 04 2020

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

4 HenrikSchumacher Oct 04 2020 at 15:15

Você pode usar, por exemplo,

MapThread[
 SubsuperscriptBox["c", ##] &,
 {Cs, Ss1}
 ]
4 kglr Oct 04 2020 at 16:22
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", ##]&para pares de valores de Cse Ss1(ou seja, para Transpose[{Cs, Ss1}}]):

Subsuperscript["c", ##] & @@@ Transpose[{Cs, Ss1}]