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 ? topic

2.保存は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の関数であることを示します。

参考元