8 Evaluation
8 評価
評価のための関数と変数
Previous: Evaluation, Up: Evaluation [Contents][Index]
8.1 評価のための関数と変数
Operator:'オペレータ
単一引用演算子'は評価を防ぎます。
シンボルに適用されるシングルクォートは、シンボルの評価を妨げます。
関数呼び出しに適用される単一の引用符は、関数の引数はまだ評価されますが、関数の評価を妨げます(評価が他の方法で妨げられない場合 ) 。結果は関数呼び出しの名詞形式です。
丸括弧で囲まれた式に適用されると、単一の引用符は式内のすべてのシンボルと関数呼び出しの評価を妨げます。例えば、 '(f(x)) は、式 f(x) を評価しないことを意味します。'f(x) (f(x) の代わりに f に適用される単一引用符で) は、[x] に適用される f の名詞形式を返すことを意味します。
単一の見積もりは単純化を妨げません。
グローバルフラグ noundisp が true の場合、名詞は 1 つの引用符で表示されます。このスイッチは、関数定義を表示するときに常にtrueです。
引用符演算子 '' と名詞も参照してください。
例:
シンボルに適用されるシングルクォートは、シンボルの評価を妨げます。
(%i1) aa: 1024;
(%o1) 1024
(%i2) aa^2;
(%o2) 1048576
(%i3) 'aa^2;
2
(%o3) はるか
(%i4) ''%;
(%o4) 1048576
関数呼び出しに適用されると、単一の引用符は関数呼び出しの評価を妨げます。結果は関数呼び出しの名詞形式です。
(%i1) x0: 5;
(%o1) 5
(%i2) x1: 7;
(%o2) 7
(%i3) をインテグレートする (x^2, x, x0, x1);
218
(%o3) ---
3
(%i4) 'integrate (x^2, x, x0, x1);
7
/
[ 2
(%o4) I x dx
]
/
5
(%i5) %, 名詞;
218
(%o5) - -
3
丸括弧で囲まれた式に適用されると、単一の引用符は式内のすべてのシンボルと関数呼び出しの評価を妨げます。
(%i1) aa: 1024;
(%o1) 1024
(%i2) BB: 19;
(%o2) 19
(%i3) sqrt(aa) + BB;
(%o3) 51
(%i4) '(sqrt(aa) + BB);
(%o4) BB + sqrt(aa)
(%i5) ''%;
(%o5) 51
単一の見積もりは単純化を妨げません。
(%i1) sin (17 * %pi) + cos (17 * %pi);
(%o1) - 1
(%i2) '(sin (17 * %pi) + cos (17 * %pi));
(%o2) - 1
マキシマは、その構築された数学関数による浮動小数点演算を単純化すると考えています。
(%i1) sin(1.0);
( % o1).8414709848078965
(%i2) '(sin(1.0));
( % o2).8414709848078965
グローバルフラグ noundisp が true の場合、名詞は 1 つの引用符で表示されます。
(%i1) x:%pi;
(%o1) %pi
(%i2) bfloat(x);
(%o2) 3.141592653589793b0
(%i3) sin(x);
(%o3) 0
(%i4) noundisp;
(%o4) false
(%i5) 'bfloat(x);
(%o5) bfloat(%pi)
(%i6) bfloat('x);
(%o6) x
(%i7)'sin(x);
(%o7) 0
(%i8) sin('x);
(%o8) sin(x)
(%i9) noundisp : not noundisp;
(%o9) true
(%i10) 'bfloat(x);
(%o10) 'bfloat(%pi)
(%i11) bfloat('x);
(%o11) x
(%i12)'sin(x);
(%o12) 0
(%i13) sin('x);
(%o13) sin(x)
(%i14)
カテゴリー: 評価 · オペレーター ·
演算子 :''
引用符演算子 '' (2 つの単一引用符) は、入力式の評価を変更します。
一般的な式exprに適用されると、 quote-quote は入力式のexprにexprの値を置き換えます。
式の演算子に適用され、引用符は演算子を名詞から動詞に変更します(動詞ではない場合 ) 。
引用符演算子は、入力パーサによって適用されます。 パースされた入力式の一部として保存されません。引用符演算子は、引用符が解析されるとすぐに常に適用され、引用符は使用できません。したがって、引用符は、関数定義、ラムダ式、単引用符で引用された式など、評価が他の方法で抑制されたときに評価を引き起こします。
引用符は、バッチと負荷によって認識されます。
ev、シングルクォート演算子'と名詞も参照してください。
例:
一般的な式exprに適用されると、 quote-quote は入力式のexprにexprの値を置き換えます。
(%i1) expand ((a + b)^3);
3 2 2 3
(%o1) b + 3 a b + 3 a b + a
(%i2) [_, ''_];
3 3 2 2 3
(%o2) [expand ((b + a) ), b + 3 a b + 3 a b + a ]
(%i3) [%i1, ''%i1];
3 3 2 2 3
(%o3) [expand ((b + a) ), b + 3 a b + 3 a b + a ]
(%i4) [aa : cc, BB : dd, cc : 17, dd : 29];
(%o4) [cc, dd, 17, 29]
(%i5) foo_1 (x) := aa - BB * x;
(%o5) foo_1(x) := aa - BB x
(%i6) foo_1 (10);
(%o6) cc - 10 dd
(%i7) ''%;
(%o7) - 273
(%i8) ''(foo_1 (10));
(%o8) - 273
(%i9) foo_2 (x) := aa - bb * x;
(%o9) foo_2(x) := cc - dd x
(%i10) foo_2 (10);
(%o10) - 273
(%i11) [x0 : x1, x1 : x2, x2 : x3];
(%o11) [x1, x2, x3]
( % i12) x0;
(%o12) x1
(%i13) ''x0;
(%o13) x2
(%i14) x0;
(%o14) x3
式の演算子に適用され、引用符は演算子を名詞から動詞に変更します(動詞ではない場合 ) 。
(%i1) declare (foo, noun);
(%o1) done
(%i2) foo (x) := x - 1729;
(%o2) ''foo(x) := x - 1729
(%i3) foo (100);
(%o3) foo(100) オリジナルのオリジナルのオリジナルのオリジナルのオリジナルのオリジナルのオリジナルのオリジナルのオリジナルのオリジナルのオリジナルのオリジナルのオリジナルのオリジナルのオリジナルのオリジナルのオリジナルのオリジナルのオリジナルのオリジナルのオリジナルのオリジナルのオリジナルのオリ
(%i4) ''foo (100);
(%o4) - 1629
引用符演算子は、入力パーサによって適用されます。 パースされた入力式の一部として保存されません。
(%i1) [aa : BB, cc : dd, BB : 1234, dd : 5678];
(%o1) [bb, dd, 1234, 5678]
(%i2) aa + cc;
(%o2) dd + BB
(%i3) display (_, op (_), args (_));
_ = cc + aa
op(cc + aa) = +
args(cc + aa) = [cc, aa]
(%o3) が完了しました
(%i4) ''(aa + cc);
(%o4) 6912
(%i5) 表示 (_, op (_), args (_));
_ = dd + BB
op(dd + BB) = +
args(dd + BB) = [dd, BB]
(%o5) が完了しました
引用符は、関数定義、ラムダ式、単引用符で引用された式など、評価が他の方法で抑制されたときに評価を引き起こします。
(%i1) foo_1a (x) := ''(integrate (log (x), x));
(%o1) foo_1a(x) := x log(x) - x
(%i2) foo_1b (x) := integrate (log (x), x);
(%o2) foo_1b(x) := integrate(log(x), x)
(%i3) dispfun (foo_1a, foo_1b);
(%t3) foo_1a(x) := x log(x) - x
(%t4) foo_1b(x) := integrate(log(x), x)
(%o4) [%t3, %t4]
(%i5) をインテグレートする (log (x), x);
(%o5) x log(x) - x
(%i6) foo_2a (x) := ''%;
(%o6) foo_2a(x) := x log(x) - x
(%i7) foo_2b (x) := %;
(%o7) foo_2b(x) := %
(%i8) dispfun (foo_2a, foo_2b);
(%t8) foo_2a(x) := x log(x) - x
(%t9) foo_2b(x) := %
(%o9) [%t7, %t8] オリジナルオリジナルオリジナルオリジナルオリジナルオリジナルオリジナルオリジナルオリジナルオリジナルオリジナルオリジナルオリジナルオリジナルオリジナルオリジナルオリジナルオリジナルオリジナルオリジナルオリジナルオリジナルオリジナルオリジナルオリジナルオリジナルオリジナルオリジナルオリ
(%i10) F : lambda ([u], diff (sin (u), u));
(%o10) lambda([u], diff(sin(u, u))
(%i11) G : lambda ([u], ''(diff (sin (u, u)));
(%o11) lambda([u], cos(u))
(%i12) '(sum (a[k], k, 1, 3) + sum (b[k], k, 1, 3));
(%o12) sum(b, k, 1, 3) + sum(a, k, 1, 3)
k k
(%i13) '((sum (a[k], k, 1, 3)) + (sum (b[k], k, 1, 3)));
(%o13) b + a + b + a + b + a
3 3 2 2 1 1
カテゴリー: 評価 · オペレーター ·
Function: ev (expr, arg_1,..., arg_n)
引数 arg_1,..., arg_n で指定された環境で式 expr を評価します。引数は、スイッチ(ブールフラグ)、割り当て、方程式、および関数です。ev は評価の結果(別の式)を返します。
評価は、以下の手順で実行されます。
まず、以下のいずれかまたはすべての引数をスキャンして環境を設定します。
スイッチの設定に関係なく、if false は簡略化を阻害するため、pr は簡略化されます。
noeval は ev の評価段階を抑制します(下記の手順 (4) を参照 ) 。これは他のスイッチと組み合わせて、exprを再評価せずに再簡略化するのに便利です。
名詞は、名詞形式(通常は 'integrate または 'diff のような未評価の関数)をprで評価します。
拡大は拡大を引き起こします。
expand (m, n) は expansion を起こし、 maxposex と maxnegex の値をそれぞれ m と n に設定します。
detout は、expr で計算されたマトリクスインバースを、各要素を分割するのではなく、その決定子をインバースの外側に保つようにします。
diff は、expr に示されているすべての差分を実行します。
derivlist (x, y, z,...) は、指定された変数に対する差分のみを生成します。derivlist も参照してください。
risk は、expr のインテグラルを Risch アルゴリズムを使用して評価します。リッチを見てください。標準統合ルーチンは、特別なシンボル名を使用するときに呼び出されます。
float は、非整合的な合理的な数値を浮動小数点に変換します。
数値は、浮動小数点で数値引数を持つ数学関数(指数化を含む)を評価します。値が与えられたexprの変数が値に置き換えられます。また、フロートスイッチをオンにします。
pred は predicate (true または false を評価する式) を評価します。
eval は、expr の追加の評価を引き起こします。(下の手順(5)を参照してください。eval は複数回発生する場合があります。eval の各インスタンスに対して、式は再度評価されます。
A が評価フラグであると宣言された原子である場合、evflag は、expr の評価中に A を true に結び付けます。
V:式(または交互にV=式)は、exprの評価中にVが式の値に束縛されるようにします。V が Maxima オプションである場合、式は expr の評価中にその値に使用されることに注意してください。もし、ev に対する複数の引数がこの型の場合、バインディングは並列に行われます。V が非原子表現の場合、結合ではなく代替が行われます。
評価関数であるFが宣言されている場合、evfunはexprにFを適用します。
sum など他の関数名は、それらが動詞であるかのように、expr にそれらの名前が存在するかどうかを評価します。
さらに、expr に存在する関数 (例えば F(x ) ) は、f(x) := 式を ev への引数として与えることにより、expr の評価の目的のためにローカルに定義されることがあります。
上記で述べられていない原子や引数としてサブスクリプト変数やサブスクリプト式が与えられた場合、その原子が評価され、結果が式や割り当てである場合、示されたバインディングまたは置換が実行されます。結果がリストの場合、リストのメンバーは ev に与えられた追加の引数であるかのように扱われます。これにより、与えられる方程式のリスト (例: [X=1, Y=A**2]) や、 solve によって返される方程式のリスト (例: %t1 と %t2 が方程式である場合、[%t1, %t2]) が許可されます。
evの引数は、左から右へ順番に処理される置換方程式と、例えば ev (expr, ratsimp, realpart) が realpart (ratsimp (expr) として処理される評価関数を除いて、任意の順序で与えられることがあります。
スイッチはブロック単位でローカルに設定することもできますし、 Maxima ではグローバルに設定することもできます。
expr が正規理論式 (CRE) の場合、ev によって返される式も CRE になります。
ステップ(1)では、引数内の式の左側に表示される、または値が式である場合、いくつかの引数の値に表示される、サブスクリプトされていない変数のリストが作成されます。式exprの変数(メモ化関数に関連付けられていないサブスクリプト変数とサブスクリプトされていない変数)は、このリストに含まれる変数を除いて、グローバル値に置き換えられます。通常、exprは単なるラベルまたは % ( 下の例の %i2 のように) であるため、このステップは単にラベルによって名付けられた式を取得するだけで、ev が動作する可能性があります。
引数によって置換が示されている場合は、今実行されます。
その後、結果の式は再評価され(引数がnoevalでない限り ) 、 引数に従って簡略化されます。expr の関数呼び出しは、その中の変数が評価された後に実行され、ev(F(x)) は F(ev(x) のように振る舞う可能性があることに注意してください。
引数の eval のインスタンスごとに、手順 (3) と (4) が繰り返されます。
関連項目 '', at と subst も参照。
例:
(%i1) 罪(x) + cos(y) + (w+1)^2 + 'diff (sin(w), w);
d 2
(%o1) cos(y) + sin(x) + -- (sin)(w)) + (w + 1)
dw
(%i2) ev (%, numer, expand, diff, x=2, y=1);
2
(%o2) cos(w) + w + 2 w + 2.449599732693821
代替のトップレベルの構文が ev に提供されていて、 ev() なしで引数を入力するだけです。つまり、単純に書くことができます
expr, arg_1,..., arg_n
これは、関数、ブロックなど、他の式の一部として許可されていません。
次の例では、並列結合プロセスに注目してください。
(%i3) プログラムモード: false;
(%o3) false
(%i4) x+y, x: a+y, y: 2;
(%o4) y + a + 2
(%i5) 2*x - 3*y = 3$
(%i6) -3*x + 2*y = -4$
(%i7) solve ([%o5, %o6]);
ソリューション
1
(%t7) y = -
5
6
(%t8) x = -
5
(%o8) %t7, %t8?
( % i8) %o6, %o8;
(%o8) - 4 = - 4
(%i9) x + 1/x > gamma (1/2);
1
(%o9) x + - > sqrt(%pi)
x
(%i10) %, numer, x=1/2;
(%o10) 2.5 > 1.772453850905516
(%i11) %, pred;
(%o11) true
カテゴリー: 評価 ·
特殊記号: eval
ev (expr) への呼び出しの引数として、 eval は expr の追加評価を引き起こします。ev を参照。
例:
(%i1) [a:b,b:c,c:d,d:e];
(%o1) [b, c, d, e]
(%i2) a;
(%o2) b
(%i3) ev(a);
(%o3) c
(%i4) ev(a),eval;
(%o4) e
( % i5) a,eval,eval;
(%o5) e
カテゴリー: 評価フラグ ·
プロパティ: evflag
シンボル x に evflag プロパティがある場合、 ev(expr, x) と expr, x (インタラクティブプロンプトで) は ev(expr, x = true) と等価です。つまり、x は true に束縛され、expr は評価されます。
式 declare(x, evflag) は変数 x に evflag プロパティを与えます。
デフォルトで evflag プロパティを持つフラグは次のようになります。
代数 cauchysum デモ
dotscrules %emode %enumer
Exptisolate factorflagを指数関数化
フロートハーファングル 幼児
isolate_wrt_times keepfloat letrat
listarith logabs logarc
logexpand lognegint
m1pbranch numer_pbranch programmode
ラタックスパンド ratalgdenom ratfac
ratmx ratsimpexpons
simpproduct simpsum sumexpand
trigexpand
例:
(%i1) sin (1/2);
1
(%o1) sin(-)
2
(%i2) sin (1/2), float;
(%o2) 0.479425538604203
(%i3) sin (1/2), float=true;
(%o3) 0.479425538604203
(%i4) オプション : false;
(%o4) false
(%i5) 1 + 1;
(%o5) 1 + 1
(%i6) 1 + 1, スイッチ;
(%o6) 2
(%i7) メッセージ : true;
(%o7) true
(%i8) sum (1/k^2, k, 1, inf);
inf
====
\ 1
(%o8) > --
/ 2
==== k
k = 1
(%i9) sum (1/k^2, k, 1, inf), simpsum;
2
%pi
(%o9) ----
6
(%i10) declare (aa, evflag);
(%o10) が完了しました
( % i11) if aa = true then YES else NO;
(%o11) NO
( % i12) if aa = true then YES else NO, aa;
(%o12) はい
カテゴリー: 評価フラグ · 簡略化フラグと変数 ·
プロパティ: evfun
関数 F に evfun プロパティがある場合、式 ev(expr, F) と expr, F (インタラクティブプロンプトで) は F(ev(expr) と等価です。
2つ以上のevfun関数F、Gなどが指定されている場合、関数は指定された順序で適用されます。
式 declare(F, evfun) は関数 F に evfun プロパティを与えます。 デフォルトで evfun プロパティを持つ関数は次のとおりです。
bfloat 因子 fullratsimp
logcontract 極形ラドカン
ratexpand ratsimp 直方体
ルーツcontract trigexpand トリグレード
例:
(%i1) x^3 - 1;
3
(%o1) x - 1
(%i2) x^3 - 1, factor;
2
(%o2) (x - 1) (x + x + 1)
(%i3) 因子 (x^3 - 1);
2
(%o3) (x - 1) (x + x + 1)
(%i4) cos(4 * x) / sin(x)^4;
cos(4 x)
(%o4) --------
4
sin (x)
(%i5) cos(4 * x) / sin(x)^4, trigexpand;
4 2 2 4
sin (x) - 6 cos (x)
(%o5) -------------------------------------
4
sin (x)
(%i6) cos(4 * x) / sin(x)^4, trigexpand, ratexpand;
2 4
6 cos (x) cos (x)
(%o6) - --------- + ------- + 1
2 4
sin (x) sin (x)
(%i7) ratexpand (trigexpand (cos(4 * x) / sin(x)^4));
2 4
6 cos (x) cos (x)
(%o7) - --------- + ------- + 1
2 4
sin (x) sin (x)
(%i8) declare ([F, G], evfun);
(%o8) が完成しました。
(%i9) (aa : BB, BB : cc, cc : dd);
(%o9) dd
( % i10) aa;
(%o10) BB
(%i11) aa, F;
(%o11) F(cc)
(%i12) F (aa);
(%o12) F(bb)
(%i13) F (ev (aa));
(%o13) F(cc)
(%i14) aa, F, G;
(%o14) G(F(cc))
(%i15) G (F (ev (aa)));
(%o15) G(F(cc))
カテゴリー: 評価フラグ ·
オプション変数: infeval
「無限評価」モードを有効にします。ev は、変化を止めるまで式を繰り返し評価します。このモードでは、変数 X が評価されないようにするには、ev の引数として X='X を含めるだけです。もちろん ev (X, X=X+1, infeval) のような式は無限ループを生成します。
カテゴリー: 評価フラグ ·
特別シンボル:noeval
noeval は ev の評価段階を抑制します。これは他のスイッチと組み合わせて、再評価せずに式を再簡略化する場合に便利です。
カテゴリー: 評価フラグ ·
特別記号: 名詞
名詞はevflagです。evコマンドのオプションとして使用すると、nounはev’dである式で発生するすべての「noun」フォームを「verbs」に変換します。 つまり、それらを評価します。名詞、nounify、動詞、 verbify も参照してください。
カテゴリー: 評価フラグ · 名詞と動詞 ·
特別なシンボル: pred
ev (expr) への呼び出しの引数として、pred は predicate (true または false を評価する式) を評価します。ev を参照。
例:
(%i1) 1<2;
(%o1) 1 < 2
(%i2) 1<2,pred;
(%o2) true
カテゴリー: 評価フラグ ·
Next: Elementary Functions, Previous: Evaluation [Contents][Index]