Membuat Array dengan Subscripts dan Superscripts
Saya ingin mencari cara untuk membuat array menggunakan subskrip dan superskrip berdasarkan info berikut:
Cs = {1, 3, 5};
Ss = {1, -1, 1};
Rules = {1 -> "+", -1 -> "-"};
Ss1 = Ss /. Rules;
Jika saya coba, misalnya:
{SubsuperscriptBox["c", Cs[[1]], Ss1[[1]]],
SubsuperscriptBox["c", Cs[[2]], Ss1[[2]]],
SubsuperscriptBox["c", Cs[[3]], Ss1[[3]]]} // DisplayForm
Saya mendapatkan hasil dari:
$\{c^{+}_1,c^{-}_3,c^{+}_5\}$
Inilah yang ingin saya dapatkan. Namun, saya ingin melakukan ini secara lebih otomatis, daripada melakukan hard-coding seperti yang baru saja saya lakukan. Maksud saya, saya harus dapat memvariasikan array Cs dan Ss menjadi sesuatu yang sewenang-wenang. Misalnya, katakan saya punya:
Cs = {1, 2, 4, 5};
Ss = {1, -1, 1, -1};
Rules = {1 -> "+", -1 -> "-"};
Ss1 = Ss /. Rules;
Saya kemudian harus mendapatkan:
$\{c^{+}_1,c^{-}_2,c^{+}_4,c^{-}_5\}$
Tentu saja, saya dapat mengubah blok kode kedua, tetapi saya ingin melihat apakah ada cara yang lebih bersih untuk melakukan ini, tanpa saya perlu mengubahnya secara manual.
Jawaban
Anda dapat menggunakan, misalnya,
MapThread[
SubsuperscriptBox["c", ##] &,
{Cs, Ss1}
]
Cs = {1, 2, 4, 5};
Ss = {1, -1, 1, -1};
Ss1 = Ss /. {1 -> "+", -1 -> "-"};
Thread[Subsuperscript["c", Cs, Ss1]]
Anda juga bisa Apply (@@@)fungsi Subsuperscript["c", ##]&untuk memasangkan nilai dari Csdan Ss1(yaitu, ke Transpose[{Cs, Ss1}}]):
Subsuperscript["c", ##] & @@@ Transpose[{Cs, Ss1}]