共変ベクトル、反変ベクトル生成器を作ってみた(MathJaxがFirebaseで動かなくて中途半端なでき)


共変ベクトルと反変ベクトルの計算を楽にしたい

一般相対性理論を勉強する場合に最大の難関が、「共変ベクトルや反変ベクトルのイメージがつかない」ことだと思います。
共変ベクトルと反変ベクトルを掛け合わせると綺麗にスカラーになる部分が一番面白いと個人的には思うのですが、その手前でイメージがつかないと挫折しそうでした。
そんなとき、「自動でクリストッフェルや共変や反変を計算してくれるサイトがあればなあ」と思っていました。
思っていたので、作りたくなり、作りました。

反変ベクトルと共変ベクトルの計算機

自分のコンピューターでみた場合 vs Firebaseにホスティングした場合

自分のコンピューターでみると、うん!ばっちり!なできです 1次〜100次元まで計算できます!

 
しかし、Firebaseにホスティングすると、LaTex表示になってしまいます。

なぜこうなったのか

webに数式を表示するには、「MathJax」というjavascriptの手法を使うのが楽で、
MathJaxを使えば、Latex形式で貼り付ければ数式が表示されます。
しかし、FirebaseはMathJaxと相性が悪いらしく、なんらかのおまじないを打たなければ厳しいみたいです。

中の仕組み

今回の作品は、全然ダメではありますが、
「LaTex形式では掃き出せている」ので、個人的には満足です(wordとかに貼り付けて変換するなりしていただければ使えるでしょうし)

その場で計算式を解いているわけではなく、pythonでn=1~100まで計算させてからその結果を予めhtmlに忍ばせており、
vue.jsでイベントハンドリング(数値が入力されたら、showされるものを変える)しています。

結果と考察

・webに数式を表示する技術に技術的限界が現状あり、これは誰かが解決してもいい問題のように感じた
 ⇨そのため、今回はwebブラウザ上での計算を諦め、予めpythonで計算したものを表示することにした。

・クリストッフェルをそのまま計算したりする手法は、pythonやC++では存在するが、web上でだれでも計算できるようには現状なっていない。ここは誰かが解決してもいいような問題に感じた
 ⇨大学生のレポートが楽になるし、相対性理論で苦しめられる学生が減るのでは?

・LaTexにおいて、「\」が多様されるが、pythonはこの記号がエスケープに使われるため、かなりプログラム自体に苦戦した。
 ⇨pythonにおいては、「\」によって、「\」一個分を表示する(エスケープでエスケープする)という文法であることを学んだ。これに気づくまでがまた長かった。

今後

Firebaseがダメなら、HerokuとAWSは試したいところ。
できれば、共変ベクトル、反変ベクトルの経験をいかして、リッチテンソル、クリストッフェルも計算したいところ!(これもブラウザ上計算ではなく、結果を予め出力したものが妥当に思います。)

HTMLでLaTex形式で出力するpythonのソースコード

for n in range(1,101):
    First_1 = "          <jigen"
    First_2 = " v-show="
    First_3 = "\"jigen == "
    First_4 = "\">"
    First = First_1 + str(n) + First_2+ First_3 + str(n) + First_4
    print(First)

    Second_1 = "            ~~~~~~~~~~~~~~"
    print(Second_1)

    Third_1 = "            <br>共変ベクトル \[q_i^\prime=\]"
    print(Third_1)
    Forth_1 = "            <p class="+ "\"sample1\"" + ">"
    print(Forth_1)
    Fifth_1 = "              <!-- 共変ベクトル -->"
    print(Fifth_1)

    #共変
    res_start = "\["
    res1 = "\\"+ " " + "\\"+ " " +"\\"+ "frac{\partial x_"
    res2 = "}{\partial x_i\ }\ q_"
    res_end = "\]"

    res_ans1 = "" 

    for s in reversed(range(1,n+1)):
      res = res1 + str(s) + res2 + str(s)
      #print(res)
      res_ans1 = res + "+" + " " + res_ans1
      #print(res_ans1)

    res_ans1 = res_ans1.rstrip(" +")
    res_ans2 = "              " +res_start + res_ans1 + res_end
    print(res_ans2)

    Seventh_1 = "            </p>"
    print(Seventh_1)

    Eighth_1 = "            ~~~~~~~~~~~~~~"
    print(Eighth_1)

    Ninth_1 = "            <br>反変ベクトル \[q^{\prime i}=\]"
    print(Ninth_1)
    Tenth_1 = "            <p class="+ "\"sample1\"" + ">"
    print(Tenth_1)
    Eleventh_1 = "              <!-- 反変ベクトル -->"
    print(Eleventh_1)




    #反変
    res_start = "\["
    res1 = "\\"+ " " + "\\" + "frac{\partial x^{\prime i}}{\partial x^"
    res2 = "\ }\ q^"
    res_end = "\]"

    res_ans1 = "" 

    for s in reversed(range(1,n+1)):
      res = res1 + str(s) + res2 + str(s)
      #print(res)
      res_ans1 = res + "+" + " " + res_ans1
      #print(res_ans1)

    res_ans1 = res_ans1.rstrip(" +")
    res_ans2 = "              " + res_start + res_ans1 + res_end
    print(res_ans2)

    Thirteenth_1 = "            </p>"
    print(Thirteenth_1)

    Forteenth_1 = "          </jigen"+str(n)+">"
    print(Forteenth_1)