Maxima

計算結果のファイル保存/読み込み

すべて保存

save("result.max", all);
loadfile("result.max");

入力のみ保存

stringout("input.bat", input);

Unix系コマンド使用

system("cat input.bat");

texソースに変換

tex(d1);

バッチ処理

batch("batch.bat");

カレントディレクトリ変更

?xchdir("D:\\Temp")$

出力順序変更

Maxima標準だと,z^2+y^2+x^2のように我々の感覚とは逆に表示される. この出力式の変数順序を変更する.

ordergreat(x,y,z);

これにより,x^2+y^2+z^2のようにx,y,zの順になる.

orderless(z,y,x);

でも同様. 元の状態に戻したいときは,

unorder();

を実行する.また,他の順番にしたいときもunorder()を実行してから再度ordergreat,orderlessを実行する.

代入・置き換え

x=3をf=x^2+y^2に代入

f:x^2+y^2;
subst(3, x, f);

式の置き換えは,ratsubst(置き換える式,置き換えられる式,式)で行う.

関数定義

f(x):=x^2+3;

f(4);などとして使用する. 直前の結果から関数を定義するときは

define(f(x), %o1);

展開

expand((x+2)^5);
factor(x^2+2*x+1);

係数

有理式から変数の係数を取得する場合,

func:3*x^3+2*x^2+x+1+5*y^2+4*y+3*x*y;
coeff(func,x,1); /* xの係数 : 3y+1 */
coeff(func,x,2); /* x^2の係数 : 2 */
coeff(func,y,2); /* y^2の係数 : 5 */

多項式の整理

他変数の多項式を1つの変数について整理する.

func:3*x^3+2*x^2+x+1+5*y^2+4*y+3*x*y;
rat(%,x);

これにより,

3*x^3+2*x^2+(3*y+1)*x+5*y^2+4*y+1

となる.rat(func,x)でもよい.

微積

  • 微分 diff(数式,微分したい文字);
    diff((x^2+1)^3,x);
  • 積分 integrate(数式,積分したい文字);
    integrate(1/(1+x^3),x);
  • 微分 diff diff( f(x),x )
  • n階微分 diff diff( f(x),x,n )
  • 不定積分 integrate integrate( f(x),x )
  • 定積分 integrate integrate( f(x),x,a,b )
  • 数値積分 romberg romberg( f(x),x,a,b )
  • 偏微分 diff(f, x)だと,式f中のx以外の要素は定数と見なされ微分される.例えば,f中のyがxの関数であるとしたい場合は,dependsを用いる.
    depends(y,x);
    diff(x^2+y+xy,x);
    結果は,dependsなしだと 2*x,dependsありだと,2*x+'diff(y,x,1)となる. 依存関係を取り除く場合は,
    remove(y,dependency);

連立方程式

  • 代数方程式 solve( 方程式,変数 )
  • 連立方程式 solve([方程式1,方程式2、...],[変数1,変数2,...])
  • 連立方程式 algsys([方程式1,方程式2、...],[変数1,変数2,...])

ベクトル

  • 定義
    u: [ux,uy,uz];
    v: [vx,vy,vz];
  • 要素アクセス(1始まり)
    u[1];
  • 内積(ux*vx+uy*vy+uz*vz)
    u.v;
  • ノルム(|u|) ノルム関数の定義
    norm(u):=sqrt(u.u);
  • 外積 外積関数の定義
    cros(u,v):=[u[2]*v[3]-u[3]*v[2], u[3]*v[1]-u[1]*v[3], u[1]*v[2]-u[2]*v[1]];
  • 各要素同士の積([a*c, b*d])
    u*v;

行列

  • 定義
    M: matrix([a,b],[c,d]);
  • M.M;
  • 行列とベクトルの積
    M.u;
  • 各要素同士の積
    M*M;
  • 累乗
    M^^2;
  • 各要素の累乗
    M^2;
  • 行列式
    determinant(M);
  • 逆行列
    M^^-1;
  • トレース(対角成分の和)
    load("nchrpl");
    mattrace(M);

定数

  • 円周率
    %pi
  • 虚数単位
    %i
  • 自然対数の底
    %e
  • 黄金比(1+sqrt(5))/2
    %phi
    

計算結果の表示方法

  • 浮動小数点表示
    float(f(10));
    float(%pi);
  • より高精度な浮動小数点表示
    fpprec:100;  // 表示桁数設定
    bfloat(%pi);

整数論

  • 除法の商と余り
    quotient(60,7); // 商(整数)
    mod(60,7);      // 余り
    divide(60,7);   // 商と余り両方
  • 素数かどうかを調べる(true or false)
    primep(67);
  • 素因数分解
    factor(207);    // 結果は3^2 * 23
    ifactors(207);  // 結果は[3,2],[23,1] -> 3^2 * 23^1 の形式

終了

quit();

SPHのPoly6重み関数((h^2-r^2)^3)の係数を求める

W(r):=(h^2-r^2)^3;
integrate( integrate( integrate( W(r)*r^2*sin(theta), r, 0, h), theta, 0, %pi), phi, 0, 2*%pi);

結果は,

         9
 64 %pi h
 ---------
    315

係数はこの逆数になる(有効範囲内の体積分で割ることで∫W=1となる).

2次元では,

integrate( integrate( W(r)*r, r, 0, h), theta, 0, 2*%pi);

リンク

FrontPage


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2024-03-08 (金) 18:06:05