Maxima/関数を定義する
関数を定義する
[編集]具体的関数の定義
[編集]数式・条件式などを与え具体的な数字を返す関数の定義方法である。
置き換え割り当て(:=)
[編集]関数名(変数1,変数2):=(式)は、視覚的にもわかりやすい関数定義法である。
(%i1) f(x,y):=(x^2+x*y)/y; 2 x + x y (%o1) f(x, y) := -------- y (%i2) f(0,1); (%o2) 0 (%i3) f(a,1); 2 (%o3) a + a (%i4) f(a,2); 2 a + 2 a (%o4) -------- 2
しかし、式の中に出てくる変数は、何もかも置き換えられてしまうので、時折不都合が出てくる。
(%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) - 1 (%i5) diff(sin(%pi),%pi); (%o5) 0
(%i3)のコマンドの答えは、通常なら(%o4)の結果を期待するであろうが、実際は(%i5)のようなコマンドと解釈されている。
定義(define)
[編集]先のような問題を回避するためには、define(f(x),diff(sin(x),x))で関数の定義を行う。
(%i1) define(f(x),diff(sin(x),x)); (%o1) f(x) := cos(x) (%i2) f(%pi); (%o2) - 1
また置き換え割り当てでは、f(x):=%;のような関数定義はできないのだが、define(f(x),%);ならできる。
(%i1) (x+2*y)^2; 2 (%o1) (2 y + x) (%i2) f(x):=%; (%o2) f(x) := % (%i3) f(1); (%o3) f(x) := % (%i4) define(f(x),%o1); 2 (%o4) f(x) := (2 y + x) (%i5) f(1); 2 (%o5) (2 y + 1)
ローカル変数の使用(block)
[編集]関数の定義をプログラム言語のように長くなると、その関数の内部処理だけに使う変数がほしくなってくる。たとえ、その関数の外側で同名の変数があったとしても、関数内部ではまったく独立した変数として扱われる変数をプログラム言語ではローカル変数と言うが、Maximaでもローカル変数を用いることができる。
block([変数1,変数2,...], 処理1, 処理2, ...)の変数1,2は、blockの(と)の間だけで有効なローカル変数となる。blockの返値は、カンマで区切られた処理の一番最後の式の値である。
抽象的関数の定義
[編集]数式ではなく、性質だけを与える関数の定義法である。 まだ、解けてない関数や数式を特定しない一般的な関数を与える場合に使う。
性質の付加(declare)
[編集]declare(関数1,属性1,関数2,属性2,...)は関数に属性を与える。
- analytic - 解析的
- 引数の交換の対称性
commutative, symmetric(対称) antisymmetric(非対称)
- 引数の入れ子性
lassociative rassociative
- 返値に関すること
posfun integervaled
- 関数の勾配の性質
incleasing decleasing
- 返値の偶奇性
oddfun evenfun
featureじゃないが関数の重要な属性
[編集]線形性 liner,outative,additive
積算性 multiplicative
依存関係を与える(depends)
[編集]depends(y,x)