maximaおぼえがき
iMaximaやTeXmacs上などでの実行環境がありますが、terminal上で用いています。
基本
- 命令の最後には必ずセミコロン ; をつける!!
これを忘れると、なにも反応がないので、アセります^^;
終了は
1 quit();
Maximaの作法
1.命令の最後には必ずセミコロン ; をつける!!
1;が入力の終了
2.しかし、表示させたくないときは最後を$にする
$をつけると、outputは表示されないが、batch実行時のinputは表示される(勘違いしないこと)。
3.コロン : が代入演算子や変数の定義など
1変数名: 変数の内容;
2a:2;4.関数の定義は :=
1勘数名f(x):=x^2+x+1;5.clear 相当は kill
変数の内容を消去するときは
1kill(消去する変数名, ,...);
2kill(a);
3kill(all);/*全部クリア*/6.表示を整理
1simplify[f[x]]の代わりはratsimp(f(x));
2Fullsimplify[f[x]]の代わりはfullratsimp(f(x));7.コメントはC言語のように/* */
1/* ここにコメントをかく */行列
1.行列の生成
1 A:genmatrix(a,n,m);でn行m列の行列ができる。
1 (a1,1 a1,2)
2 (a1,2 a2,2)となる。
2.要素への代入は(代入演算子は : )
1 A[1][1]:5;などとする。
3.直接行列要素を入力する場合
1 A:matrix([1,2],[3,4]);とすると
1 [1 2]
2 [3 4]になる。
4.対角行列は
1 A:diagmatrix(3,2);(大きさ,数値)となる要素が変わる場合は
1A:apply(matrix,makelist(ident(次数)[i]*[1, 2, 3, 4などリスト],i,1,次数));5.単位行列は
1 I:ident(n)6.ベクトルは、要素を区切って設定。
1 b:matrix([1],[2],[4]);
2 c:matrix([2,1,3]);7.行列の累乗は
1 ^^8.行列と行列やベクトルの積はピリオド
1 .を使う
* (アスタリスク)を使うと、要素毎の積になるので注意。
9.行列の演算は
1転置:transpose(A)
2逆行列:invert(B)
3行列式:determinant(C)
4固有値:eigenvalues(D)
5固有ベクトル:eigenvectors(E);もし実行できなければ、各種パッケージを読み込んでください。
固有値関連:eigen.mac
行列のトレース:nchrpl.mac
1load(eigen);
2eigenvalues(A):
3
4load(nchrpl):
5mattrace(A);マニュアル探してください。
関数,式,表示
1.関数の定義
1 f(x,y,s,t):=x^s*y^t;2.表示
分数のまま表示されるが、展開したいときは
1 float(数値評価する式);3.数値解
1 float(solve([.....]))などのようにする。
2 solve([...])だけだと、分数のまま表示される。定数も
1 float(sqrt(2));
2 float(sin(30/180));などとする
4.ratsimpで整理して表示(上を参照)
5.coeffと同じ
1ratcoeff(式,項)6.解を代入
1 solve(a*x^2+b*x+c=0,x);
2 av=ex(x, %[1]);で解をavに代入できる
7.%piで円周率は定義されている。
8.文字で解きたい
連立方程式の解を求める時など、文字のまま扱いたい時は、 %を文字の前につける。 例えば
1 solve([%a1*x+%b1*y=%c1,%a2*x+%b2*y=%c2],[x,y]);ただし%pi(円周率)と%i(虚数単位)などはいくつかの文字定数は使用済なので注意!!
9.代入
式の変数を整理するときに使います。 evやsubstがあります。 example(ev)やexample(subst)を参照のこと
- ev(整理したい式, 式中の変数名と代入する値や変数)
- subst(代入する値, 代入される変数名, 式)
別行で代入変数指定しても効かないようで、 evやsubstの引数中で宣言しないと反映されないようです。
また、evは代入演算子として=と:両方使えるようですが、substは=だけでした。
そして、substは代入できる変数は一つだけのようですが、sublis,evは複数可能なようです。
1 a:matrix([x+y , 2],[1,x-z]);
2 /*
3 x:-y; 別行で変数に代入しても、式には反映されない
4 z:2*y;
5 */
6 aa:ev(a,x:-y,z:2*y);/*ev()の中で代入の書式を指定する*/
7 aa2:ev(a,x=-y,z=2*y);/* evは:でも=でも使える*/
8
9 ab:sublis([x=-y,z=2*y],aa);/* sublis使える,subst不可*/
10
11 ee:z*4+s*5;
12 subst(q,z,ee);/*1つの変数に代入するとき*/
13 sublis([z=2,s=4],ee);/*複数の変数に代入するとき*/
14 /*sublis([z:a,s:d],ee); error! sublisは=しか使えない? */miscなこと
1.helpは
1describe(topic) or example(topic) or ? topic2.保存はsave(`ファイル名`'',all);
ただし、全部Lisp?で書かれているのでよくわからん。
3.保存時に拡張子.tmをつけるとTeXMacs用のいろんなものが入る。
拡張子無しだと、入出力結果だけ保存
->次回TeXmacsから読み込んでも使えない ??
4.変数だけ保存する場合は
1write_data(変数名,"ファイル名",セパレータ)csv形式で保存されます。
セパレータは comma(","), pipe("|"), semicolon(";"),
'csv::(",")と同じ??
5.TeXで出力する時は
1 tex(計算式)6.バッチファイルの実行は
1 batch("ファイル名");ファイルの拡張子はmacを使っている例が多いようである。
以下もあるようだが、うまく動作しない。???
1 loadfile(``ファイル名'');
2 playback(all);で実行表示ファイル名はフルパスで書いたほうが平和
$MAXIMA\_DIRECTORYの share,share1,share2,tensor
から読み込もうとする?。
7.カレントディレクトリは system("pwd");
8.ディレクトリ変更はLispの関数を使用。
1?xchdir("~/hoge");などとします。 冒頭の?はLispの関数であることを示します。
参考元
- Maxima入門ノート(中川先生)
googleして探してください。(オリジナルの公開場所が不明で、cpが各所にあるようです。) - 入力例で学ぶmaximaの使い方(入門)
https://pianofisica.hatenablog.com/entry/2018/11/28/173122