maximaでの関数の定義法にはいくつかあります。 まず最も基本的な方法です。関数名のすぐ横にくる変数は関数の引数(ひきすう)です。 具体的な例を見てみましょう。基本的な関数定義
関数名(変数) := 本体 関数名(変数1,変数2,...) := 本体上記のように引数に別の文字を与えることも出来ます。 関数を実行した際、式の中に出てくる変数を 引数で置き換える、という動作をしています。 これが問題となる場合があります。 この場合に使うのがdefine関数です。関数の使用例
(%i1) f(x):= x^2 + 2*x + 3; (%o1) f(x):=x^2+2*x+3 (%i2) f(1); (%o2) 6 (%i3) f(x+y); (%o3) (y+x)^2+2*(y+x)+3 (%i4) g(x,y) := x+y+1; (%o4) g(x,y):=x+y+1 (%i5) g(x,3); (%o5) x+4最初の関数定義と違う点として、右辺の式は評価されます。 なので、別の計算結果を使って関数を定義する、といったことも可能になります。 次の例では、最初の方式で定義した関数は sin(x)を微分してcos(x)にしたあとcos(%pi)を計算したいのに 単純に置き換えられるためにdiff(sin(%pi),x)が計算され結果が0となってしまいます。 defineを使えば、先にdiffの箇所が評価されて f(x)はcos(x)とあらかじめ計算されてから定義されるために ちゃんと求める結果が得られています。define関数の書式
define(f(x1,...,xn),式)define関数が必要となる場合
(%i1) f(x):=diff(sin(x),x); (%o1) f(x):=diff(sin(x),x) (%i2) f(x); (%o2) cos(x) (%i3) f(%pi); (%o3) 0 (%i4) cos(%pi); (%o4) define(g(x),diff(sin(x),x)); (%i5) g(%pi) (%o5) -1