[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

11. 評価

通常,Octaveのプロンプトにおいて単に式を入力することにより,それを評価しま す。あるいは,ファイルに保存しておいたコマンドが解釈できるかをOctaveに問い 合わせることによって評価することもできます。

ときどき,計算されて文字列に格納された文字列を評価すること,あるいは呼び 出すべき関数名を文字列として使用する必要があると思うかもしれません。 evalおよびfeval関数は,それを行えるようにします。または, 実行時には知られていないコマンドを評価するため,あるいはユーザ提供関数 を呼び出す必要のある関数を書くために必要です。

Built-in Function: eval (try, catch)

文字列tryを解釈し,それがOctaveのコマンドであるかのように評価す る。もしそれが失敗するならば,文字列catchを評価する。文字列 tryは現在の状態で評価され,結果はevalが戻った後に入手で きるようになったままである。

Built-in Function: feval (name, …)

nameという名前をもつ関数を評価します。1番め以降の引数は,いずれも その名前の関数に渡されます。たとえば,

 
feval ("acos", -1)
     ⇒ 3.1416

この式は,引数`-1'をつけて関数acosを呼び出す。

関数fevalは,ユーザ提供関数を呼び出すような関数を書くことができる ようにするために必要である。なぜならば,Octaveは(C言語のような)関数へ のポインタを宣言したり,(FortranのEXTERNALのような)関数名を保持 するために使用される特殊な変数を宣言するための方法をもたないからである。 かわりに,名前によって関数を参照し,それを呼び出すためにfevalを使 用しなければならない。

fevalを使用し,ニュートン法を用いてある変数のユーザ提供関数の根を 見いだす単純な関数を示します。

 
function result = newtroot (fname, x)

# 使用法: newtroot (fname, x)
#
#   fname : 関数 f(x) の名前を含む文字列
#   x     : 初期値

  delta = tol = sqrt (eps);
  maxit = 200;
  fx = feval (fname, x);
  for i = 1:maxit
    if (abs (fx) < tol)
      result = x;
      return;
    else
      fx_new = feval (fname, x + delta);
      deriv = (fx_new - fx) / delta;
      x = x - fx / deriv;
      fx = fx_new;
    endif
  endfor

  result = x;

endfunction

この例は,単にユーザ提供関数を呼び出す一例という意味でしかなく,ニュートン 法を真剣に理解しろということではないことに気を付けてください。本格的なコー ドを書くならば,より頑健なアルゴリズムを使用することに加えて,数値とすべて の引数の型,および,与えられる関数が本当に関数なのかなどをチェックすること になります。たとえば,数値オブジェクトの判定関数のリストは 数値オブジェクトの判定を,exist関数の説明については, 変数の状態を参照してください。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]

This document was generated on July, 20 2006 using texi2html 1.76.