はじめに、このページは、書きかけのメモです。
http://homepage2.nifty.com/eman/electromag/maxwell.html
マクスウェルの方程式を復習してみる自分用のメモ
Java言語風にマクスウェル方程式を理解してみる。
式が4つほど、ならんでおるのぅ。
とりあえず、1つだけみていこうかな。
rot(E)+@B/@t=0 ←こんな感じのやつね。
(偏微分の記号をだすのがめんどくさかったので、@を偏微分の記号ってことにしました。)
式がかいてあって、その変数の定義があとにかいてある。
プログラムでは、変数の定義を先に書くのが基本なので、
並べ替えて書いておく。
単なる変数ではなくてベクトルのようだ。Javaのクラスぽく使って書いてみる。
3次元のベクトルをDimentionVector?クラスとする。
単位とかを保持した方がいいのかもしれない、 とりえずSI単位と、CGS単位を用意しておく。 それとよく使う記号も格納が必要かもしれない。 次元式もとりあえずつけちゃえ。
紐理論とかの影響で ひょっとしたら3次元じゃなくて 11次元かもしれないので、内部的にはArrayList?型でもっておく
abstruct class DimentionVector extends ArrayList<Double>{ //CGS単位 public String unitCgs=""; //SI単位 public String unitSi=""; //量記号 public String simbol=""; //次元解析 public String dimensionalAnalysis=""; public DimentionVector{ //x add(0); //y add(0); //z add(0); } public Double getX(){ get(0); } public void setX(Double value){ add(0,value); }
//Y,Zも同様 }
こんな感じで書いておく
Eって書きたいところだが、javaは分かりにくい名前はだめなのさ 電場 Eは英語でelectric field だから
class ElectricField? extends DimentionVector?
磁束密度はBって書いてあるけど 英語でmagnetic flux densityだから
class MagneticFluxDensity? extends DimentionVector?{
//CGS単位 public String unitCgs="G"; //SI単位 public String unitSi="T"; //量記号 public String simbol="B"; //次元解析 public String dimensionalAnalysis="MT(-2)I(-1)";
}
だね。Wikiをみるとと 透磁率と磁場の強さの積で表されるとかいてある。
で、E-Hで理論展開すればいいのか、E-Bで理論展開すればいいのか下記に述べられているので参考にするといいかもしれない。
http://ja.wikipedia.org/wiki/E-B%E5%AF%BE%E5%BF%9C%E3%81%A8E-H%E5%AF%BE%E5%BF%9C
統一理論の完成に必要な違いで、ループ電流の結果、磁場が存在しているとするのがE-B対応ってかいてってかいてあったけど、よくわからん。
カミオカンデで実験した人の論文が下記にあるけど、
http://www-sk.icrr.u-tokyo.ac.jp/sk/pub/master_web.pdf
宇宙ができたときぐらいのエネルギーがいるとか、なんとか書いてある、
function xyzVecor rot(xyzVector e){ return new xyz(@(e,z,y)-@(e,y,z),@(e,x,z)-@ez/@x,@ey/@x-@ex/@y); }
function Function @(Function func,Simbol s1,Simbol s2){ return @func.s1/@s2; }
ぐぐってみる
数式処理は、数式処理ソフトを使った方がよさそうだと思ってまいりました。
maximaという数式ソフトがあり、それを使ってマクスウェルの方程式を解いているらしい例が下記のアドレスにありました。
http://okwave.jp/qa/q3853447.html
最後の逆行列をもとめだしたあたりで、鬼のような数式の群れがでてきました。
人間がみても理解できないだろうなぁ。
数学は解く手順を覚える学問であり、実際の数式は、パソコンが内部的に管理してくれていたほうが、スマートだとおもったよ。
しかし、maximaのデフォルトってアスキーアートチックな出力でびっくり
プログラム的な出力をしたい場合は下記のtipsに書いてありました。
http://www.cymric.jp/maxima/tips.html
maximaって色々できすぎるので、まず最初はtip集から入門したほうがよさそうだなぁとおもったよ。
maxima --batch-string="factor(1000);"
ってやるんだって、かいてあっただけなんだけど、
どっちかっていうと、フィルタっぽく使いたいんだよね。
例
たとえば、factor(1000);をためしてみたいとすると下記のように記入する
echo display2d:false$factor(1000);|maxima -q|findstr "(%o"
コマンドラインから使えるってことは、あらゆるプログラム言語から使えるってことじゃん?
これはすごいことなのではなかろうか。。。