Next: , Previous: Introduction to Maximas Database, Up: Maximas Database   [Contents][Index]

11.2 Functions and Variables for Properties

関数: declare (a_1, p_1, a_2, p_2, …)

アトムやアトムのリストa_iに、プロパティやプロパティのリストp_iを割り当てます。 a_ip_iがリストの時、 アトムのそれぞれは、プロパティすべてを得ます。

declareは引数をクォートします。 declareはいつもdoneを返します。

それぞれの宣言フラグに関する記述で注意しているように、 いくつかのフラグに関して、 もしobjectfeatureを持つよう宣言されているなら、 featurep(object, feature)は、 trueを返します。 しかしながら、featurepはいくつかのフラグを認識しません; これはバグです。

featuresも参照してください。

declareは以下のプロパティを認識します:

evfun

evのフラグ引数としてa_iが現れた時 a_iで名付けられた関数を適用するように evに伝えます。 evfunを参照してください。

evflag

evのフラグ引数としてa_iが現れた時 evの実行中a_itrueにバインドされるように evに伝えます。 evflagを参照してください。

bindtest

a_iがバインドされていない状態に評価された時、 Maximaにエラーをトリガーするように伝えます。

noun

a_iを名詞としてパースするようにMaximaに伝えます。 この効果は、a_iのインスタンスを'a_inounify(a_i) で置き換えることです。どちらに置き換えるかは文脈に依存します。

constant

a_iをシンボル定数と考えるようにMaximaに伝えます。

scalar

a_iをスカラー変数と考えるようにMaximaに伝えます。

nonscalar

a_iを非スカラー変数と考えるようにMaximaに伝えます。 普通の使い方は、変数をシンボルベクトルや行列として宣言することです。

nonarray

Maximaにa_iを配列でないものと考えるように伝えます。 この宣言は添字付き変数名の多重評価を抑制します。

mainvar

a_iを「主変数」と考えるようにMaximaに伝えます。 ordergreatpで決定されるように、 Maximaの式の標準順序では、主変数は他のすべての定数や変数に続きます。

alphabetic

(文字列の)a_iの中の文字すべてをアルファベット文字として認識するように Maximaに伝えます。

feature

a_iをfeature名として認識するようにMaximaに伝えます。 他のアトムは、a_iプロパティを持つように定義されます。

rassociative, lassociative

a_iを右結合、もしくは左結合関数として認識するようにMaximaに伝えます。

nary

a_iをn項関数として認識するようにMaximaに伝えます。

nary宣言は、nary関数をコールするのとは同じではありません。 declare(foo, nary)だけの効果は、Maxima整理器を ネストされた式を平坦にするように指示することです。 例えば、foo(x, foo(y, z))foo(x, y, z)に整理します。

symmetric, antisymmetric, commutative

a_iを対称もしくは反対称関数として認識するようにMaximaに伝えます。 commutativesymmetricと同じです。

oddfun, evenfun

a_iを偶関数もしくは奇関数として認識するようにMaximaに伝えます。

outative

a_i式を最初の引数から定数因子を引き出すことで整理するようにMaximaに伝えます。

a_iが1つ引数を持つ時、 もしリテラル定数や宣言定数なら、因子は定数とみなされます。

a_iが2つ以上の引数を持つ時、 もし2番目の引数がシンボルであり、因子が2番目の引数の制約を受けなければ、 因子は定数とみなされます。

multiplicative

代入a_i(x * y * z * ...) --> a_i(x) * a_i(y) * a_i(z) * .... によって、a_i式を整理するようにMaximaに伝えます。 代入は、1番目の引数のみで実行されます。

additive

代入a_i(x + y + z + ...) --> a_i(x) + a_i(y) + a_i(z) + .... によって、a_i式を整理するようにMaximaに伝えます。 代入は、1番目の引数のみで実行されます。

linear

a_ioutativeかつadditiveに宣言することと同値です。

integer, noninteger

a_iを整数もしくは非整数変数として認識するようにMaximaに伝えます。

even, odd

a_iを偶数変数もしくは奇数変数として認識するようにMaximaに伝えます。

rational, irrational

a_iを有理変数もしくは非有理実変数として認識するようにMaximaに伝えます。

real, imaginary, complex

a_iを実変数もしくは純虚数変数もしくは複素変数として認識するようにMaximaに伝えます。

increasing, decreasing

a_iを単調増加関数もしくは単調減少関数として認識するようにMaximaに伝えます。

posfun

a_iを正関数として認識するようにMaximaに伝えます。

integervalued

a_iを整数値を返す関数として認識するようにMaximaに伝えます。

例:

evfunevflag宣言。

(%i1) declare (expand, evfun);
(%o1)                         done
(%i2) (a + b)^3;
                                   3
(%o2)                       (b + a)
(%i3) (a + b)^3, expand;
                     3        2      2      3
(%o3)               b  + 3 a b  + 3 a  b + a
(%i4) declare (demoivre, evflag);
(%o4)                         done
(%i5) exp (a + b*%i);
                             %i b + a
(%o5)                      %e
(%i6) exp (a + b*%i), demoivre;
                      a
(%o6)               %e  (%i sin(b) + cos(b))

bindtest宣言。

(%i1) aa + bb;
(%o1)                        bb + aa
(%i2) declare (aa, bindtest);
(%o2)                         done
(%i3) aa + bb;
aa unbound variable
 -- an error.  Quitting.  To debug this try debugmode(true);
(%i4) aa : 1234;
(%o4)                         1234
(%i5) aa + bb;
(%o5)                       bb + 1234

noun宣言。

(%i1) factor (12345678);
                             2
(%o1)                     2 3  47 14593
(%i2) declare (factor, noun);
(%o2)                         done
(%i3) factor (12345678);
(%o3)                   factor(12345678)
(%i4) ''%, nouns;
                             2
(%o4)                     2 3  47 14593

constant, scalar, nonscalar, mainvar宣言。

alphabetic宣言。

(%i1) xx\~yy\`\@ : 1729;
(%o1)                         1729
(%i2) declare ("~`@", alphabetic);
(%o2)                         done
(%i3) xx~yy`@ + @yy`xx + `xx@@yy~;
(%o3)               `xx@@yy~ + @yy`xx + 1729
(%i4) listofvars (%);
(%o4)                  [@yy`xx, `xx@@yy~]

feature宣言。

(%i1) declare (FOO, feature);
(%o1)                         done
(%i2) declare (x, FOO);
(%o2)                         done
(%i3) featurep (x, FOO);
(%o3)                         true

rassociative, lassociative宣言。

nary宣言。

(%i1) H (H (a, b), H (c, H (d, e)));
(%o1)               H(H(a, b), H(c, H(d, e)))
(%i2) declare (H, nary);
(%o2)                         done
(%i3) H (H (a, b), H (c, H (d, e)));
(%o3)                   H(a, b, c, d, e)

symmetric, antisymmetric宣言。

(%i1) S (b, a);
(%o1)                        S(b, a)
(%i2) declare (S, symmetric);
(%o2)                         done
(%i3) S (b, a);
(%o3)                        S(a, b)
(%i4) S (a, c, e, d, b);
(%o4)                   S(a, b, c, d, e)
(%i5) T (b, a);
(%o5)                        T(b, a)
(%i6) declare (T, antisymmetric);
(%o6)                         done
(%i7) T (b, a);
(%o7)                       - T(a, b)
(%i8) T (a, c, e, d, b);
(%o8)                   T(a, b, c, d, e)

oddfun, evenfun宣言。

(%i1) o (- u) + o (u);
(%o1)                     o(u) + o(- u)
(%i2) declare (o, oddfun);
(%o2)                         done
(%i3) o (- u) + o (u);
(%o3)                           0
(%i4) e (- u) - e (u);
(%o4)                     e(- u) - e(u)
(%i5) declare (e, evenfun);
(%o5)                         done
(%i6) e (- u) - e (u);
(%o6)                           0

outative宣言。

(%i1) F1 (100 * x);
(%o1)                       F1(100 x)
(%i2) declare (F1, outative);
(%o2)                         done
(%i3) F1 (100 * x);
(%o3)                       100 F1(x)
(%i4) declare (zz, constant);
(%o4)                         done
(%i5) F1 (zz * y);
(%o5)                       zz F1(y)

multiplicative宣言。

(%i1) F2 (a * b * c);
(%o1)                       F2(a b c)
(%i2) declare (F2, multiplicative);
(%o2)                         done
(%i3) F2 (a * b * c);
(%o3)                   F2(a) F2(b) F2(c)

additive宣言。

(%i1) F3 (a + b + c);
(%o1)                     F3(c + b + a)
(%i2) declare (F3, additive);
(%o2)                         done
(%i3) F3 (a + b + c);
(%o3)                 F3(c) + F3(b) + F3(a)

linear宣言。

(%i1) 'sum (F(k) + G(k), k, 1, inf);
                       inf
                       ====
                       \
(%o1)                   >    (G(k) + F(k))
                       /
                       ====
                       k = 1
(%i2) declare (nounify (sum), linear);
(%o2)                         done
(%i3) 'sum (F(k) + G(k), k, 1, inf);
                     inf          inf
                     ====         ====
                     \            \
(%o3)                 >    G(k) +  >    F(k)
                     /            /
                     ====         ====
                     k = 1        k = 1
宣言: features

Maximaは、関数や変数のある数学的プロパティを認識します。 それらは「フィーチャー」と呼ばれます。

declare (x, foo)は、 プロパティfooを関数もしくは変数xに与えます。

declare (foo, feature)は、 新しいフィーチャーfooを宣言します。 例えば、 declare ([red, green, blue], feature)は、 3つの新しいフィーチャーred, green, blueを宣言します。

もしxfooプロパティを持つなら、 述語論理featurep (x, foo)は、trueを返し、 そうでなければ、falseを返します。

インフォリストfeaturesは既知のフィーチャーのリストです。 それらは、

   integer        noninteger      even
   odd            rational        irrational
   real           imaginary       complex
   analytic       increasing      decreasing
   oddfun         evenfun         posfun
   commutative    lassociative    rassociative
   symmetric      antisymmetric

プラス、任意のユーザー定義フィーチャーです。

featuresは、数学的フィーチャーのリストです。 非数学的で、システム依存のフィーチャーのリストもあります。 statusを参照してください。

関数: get (a, i)

iが示すアトム aのユーザープロパティを検索し、 もしaがプロパティ iを持たないなら、 falseを返します。

getは、引数を評価します。

(%i1) put (%e, 'transcendental, 'type);
(%o1)                    transcendental
(%i2) put (%pi, 'transcendental, 'type)$
(%i3) put (%i, 'algebraic, 'type)$
(%i4) typeof (expr) := block ([q],
        if numberp (expr)
        then return ('algebraic),
        if not atom (expr)
        then return (maplist ('typeof, expr)),
        q: get (expr, 'type),
        if q=false
        then errcatch (error(expr,"is not numeric.")) else q)$
(%i5) typeof (2*%e + x*%pi);
x is not numeric.
(%o5)  [[transcendental, []], [algebraic, transcendental]]
(%i6) typeof (2*%e + %pi);
(%o6)     [transcendental, [algebraic, transcendental]]

プロパティ: nonarray

コマンドdeclare(a, nonarray)はMaximaに aが配列でないものと考えるように伝えます。 もしaが添字付き変数なら、この宣言は多重評価を抑制します。

例:

(%i1) a:'b$ b:'c$ c:'d$


(%i4) a[x];
(%o4)                          d
                                x
(%i5) declare(a, nonarray);
(%o5)                         done
(%i6) a[x];
(%o6)                          a
                                x
宣言: posfun

declare (f, posfun)は、 fを正の関数と宣言します。 is (f(x) > 0)trueを出力します。

関数: printprops (a, i)
関数: printprops ([a_1, ..., a_n], i)
関数: printprops (all, i)

アトムaに関連付けられた指標iの属性を表示します。 aは、アトムのリストもしくはアトムallもありえます。 その場合,与えられたプロパティを持つすべてのアトムに適用します。 例えば、 printprops ([f, g], atvalue)printpropsは、表示できないプロパティ、 すなわちatvalue, atomgrad, gradef, matchdeclareのためのものです。


Next: , Previous: Introduction to Maximas Database, Up: Maximas Database   [Contents][Index]