Maple Professional
Maple Academic
Maple Student Edition
Maple Personal Edition
Maple Player
Maple Player for iPad
MapleSim Professional
MapleSim Academic
Maple T.A. - Testing & Assessment
Maple T.A. MAA Placement Test Suite
Möbius - Online Courseware
Machine Design / Industrial Automation
Aerospace
Vehicle Engineering
Robotics
Power Industries
System Simulation and Analysis
Model development for HIL
Plant Modeling for Control Design
Robotics/Motion Control/Mechatronics
Other Application Areas
Mathematics Education
Engineering Education
High Schools & Two-Year Colleges
Testing & Assessment
Students
Financial Modeling
Operations Research
High Performance Computing
Physics
Live Webinars
Recorded Webinars
Upcoming Events
MaplePrimes
Maplesoft Blog
Maplesoft Membership
Maple Ambassador Program
MapleCloud
Technical Whitepapers
E-Mail Newsletters
Maple Books
Math Matters
Application Center
MapleSim Model Gallery
User Case Studies
Exploring Engineering Fundamentals
Teaching Concepts with Maple
Maplesoft Welcome Center
Teacher Resource Center
Student Help Center
eval - 評価
使い方
eval(e, x=a)
eval(e, eqns)
eval(e)
eval(x, n)
パラメータ
e
-
式
x
普通は名前だが一般の式のこともある
a
eqns
等式のリストまたは集合
n
正の整数
説明
eval 関数のもっともよくある使い方は、式 e を与えられた点 x=a で評価することです。たとえば、eval(x^2+3*x+2,x=1); は多項式 x^2+3*x+2 を点 で評価して 6 を得ます。
eval コマンドは、1-D または 2-D の使い方を用いて入力できます。たとえば、eval(x^3 + 3*x + 2, x=1) は、次に相当します。.
2 番目の使い方では、eqns は等式の集合またはリストですが、式 e は与えられたすべての点 (または式) において同時に評価されます。
通常、等式の左辺は評価される変数名です。しかし、等式の左辺 x が単純な名前ではないときは、subs と同じ制限を持つ文法規則上の置き換えが試みられます。
eval は各点で評価を行うので、eval を特異点で評価するために用いることはできません。代わりに limit を使います。
eval コマンドは導関数、積分、区分的に定義された関数などを正しく評価する方法を認識します。一方、これに対して、subs コマンドは数学的には意味をなさない置き換えをします。評価しなければいけない点と式の間に「安全でない」と考えられる記号的な相互依存があると、eval は unevaluated (未評価)を返します。この情報は Maple ライブラリにおいて Maple プロシージャ `eval/diff`、`eval/int`、`eval/piecewise` などにコードされます。ユーザはどのように評価するかを次のように Maple に指示することができます。関数 foo(y) が与えられたとします。この場合、ユーザが `eval/foo` を Maple プロシージャとして定義していると、コール eval(foo(y),x=a) によって、`eval/foo`(foo(y),x=a); が呼び出されるようになります。
eval 関数の残りの 2 つの使い方は変数または式の明示的な評価に用いられます。これらの場合の評価の意味は、先の使い方とは違っています。Maple のデフォルトの評価規則はグローバル変数に対する完全評価で、ローカル変数とパラメータに対しては深さ1の評価です。ときにユーザは完全評価や深さ1の評価を明示的に行う必要があります。たとえば、Maple セッションにおいて かつ であるとき の値は何でしょう。x や y がグローバル変数である対話的なセッションでは x は 1 に評価され、x は「完全評価された」と言います。深さ1の評価では、コマンド eval(x, 1) を用います。この場合 y が得られます。しかし、Maple プロシージャの内部で、x がローカル変数またはパラメータであるとき、x は y と評価され、x は「深さ1で評価された」と言います。パラメータについては、変数をグローバル変数でないパラメータとして渡す場合にのみ、このことが関係します。というのは、変数はプロシージャに渡される前に完全評価されるからです。ローカル変数やパラメータに対する完全評価は eval(x) により得られ、この例では 1 となります。
コール eval(e) は式 e が 2 つの遅延評価 (uneval 参照) まで完全評価されることを意味します。これは e の中のそれぞれの名前がその値まで評価され、値は再帰的に評価される、そして e の中のそれぞれの関数呼び出しはそのパラメータを評価して実行されるが、遅延評価の 2 つのレベルを越えては評価されないことを意味します。
コール eval(x, 1) は x を深さ 1 で評価することを意味しています。つまり、名前 x に割り当てられた値がそれ以上評価されることなく返されます。より一般に、eval(x, n) は名前の深さ n までの評価を行います。
深さ n (n>1) までの評価は、深さ n-1 まで評価してもまだ単に名前であるような式に対して有用です。コールeval(x, n) は、n-1 から名前をさらに 1 つ深くして評価した結果を返します。
深さ n の評価は名前以外の式に対して直接適用することもできます。結果は式の実際の構造がどのように自動簡単化と相互作用するかにより大きく変わり得ます。
table、rtable および module のような配列型コンテナオブジェクトに を適用することは、各要素に map することではありません。map(eval,M) を使用して、オブジェクトの中の要素 M を評価します。
evalhf 環境で実行されるプロシージャ内部から呼び出された場合、eval は evalhf の外部で評価を行います。eval に対する引数シーケンス内のすべてが、シンボリックモード (つまり、記号、整数、ソフトウェアの浮動小数点値) で評価されます。評価の結果は、ハードウェアの浮動小数点またはその配列に変換されます。変換できない場合は、例外が発生します。
スレッド安全性
eval コマンドは、Maple 15 以後スレッドセーフです。ただし、与えられた式の評価自体がスレッドセーフである場合に限ります。
スレッド安全性に関する詳細は、index/threadsafe を参照してください。
例
eval を用いて「点」における評価を行う例
poly := x^3+3*x+2;
eval(poly, x=1);
poly := x*y+3*z+2;
eval(poly,[x=2,y=3,z=t]);
eval(int(sin(x),x),x=1);
eval が誤った答えの代わりに(正しい)エラーを返す例
expr := sin(x)/x;
eval(expr,x=0);
Error, numeric exception: division by zero
limit(expr,x=0);
eval を用いた不活性な積分、導関数の例
integral := int(f(t,a),t=a..x);
eval(integral,{t=0,a=1});
der := diff(f(x),x) + f(x);
eval(der,x=0);
いくつかの深さにおける変数 a の評価
a := b;
b := c;
c := x+1;
デフォルトの完全な再帰評価
a;
完全な再帰評価の実行
eval(a);
eval(a,1);
eval(a,2);
eval(a,3);
eval(a,4);
eval と subs の比較
eval コマンドは、subs コマンドとは異なります。
expr := sin(x)/cos(x);
subs(x = 0, expr);
eval(expr, x = 0);
eval と subs コマンドは、それぞれ異なる方法で不活性な積分の評価を行います。subs コマンドは、不活性な式の場合では指定した値を式に挿入するのみで、評価を実行することはありません。
上記の使用例
a := 'a':
subs({a = 1, t = 0}, integral);
eval(integral, {t=0, a=1});
subs(x=0, der);
eval(der, x=0);
関連項目
Eval、evala、evalb、evalc、evalf、evalhf、evaln、evalr、Extending Maple、limit、RealDomain、rtable_eval、subs、value
Download Help Document