|
楼主 |
发表于 2008-3-22 23:35:46
|
显示全部楼层
########################################
Evaluation:
通常情况下,你在Octave的命令行里面输入命令然后执行,或者让Octave执行一些你放在一个文件里面的命令。
有的时候你可能发现需要执行一个表达式,而这个表达式是被计算出来并且储存在一个字符串里面的,或者是使用一个字符串来作为调用的函数的名字。
— Built-in Function: eval (try, catch)
分析一下字符串try并且执行它如果它是是一个Octave程序。
如果上述过程失败则执行字符串catch。
字符串只是在当前环境下被执行,所以任何返回的结果在eval执行以后仍然可以使用。
— Built-in Function: feval (name, ...)
执行以name命名的函数。
任何在第一个字符后面的参数都被传递给这个函数。
例如:
feval ("acos", -1)将调用acos,并且以-1做为相应的参数,结果返回=> 3.1416。
feval函数对于调用一个用户提供的函数名所对应的函数来说是必须的,因为Octave不能像C语言一样定义函数指针,也不能想Fortran语言一样定义一种变量来保存函数名。
你必须用name来引用函数,然后用feval来调用它。
这里有一个例子,这段程序会用牛顿叠代法找出用户自定义的单变量的函数的根。
function result = newtroot (fname, x)
# usage: newtroot (fname, x)
#
# fname : a string naming a function f(x)
# x : initial guess
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
function result=x2(x)
result=x*x;
endfunction
a=newtroot("x2",1)
这是一个简单的示例性的例子,实际中比这个要复杂一点。
######################################## |
|