使用 SAS proc IML,我有一个功能:CVF(m,p,h,pi,e);
我想猜测 h 哪个最小化了这个函数。是否有一些内置的子程序来最小化它?或者我怎样才能为它构建一个迭代过程?定义了所有其他变量。
使用 SAS proc IML,我有一个功能:CVF(m,p,h,pi,e);
我想猜测 h 哪个最小化了这个函数。是否有一些内置的子程序来最小化它?或者我怎样才能为它构建一个迭代过程?定义了所有其他变量。
使用call nlpqn();
. 您传递的函数只需有 1 个参数,即您要优化的向量。所以在这里我定义了一个二次函数,其中 a、b 和 c 参数也可以定义。使用 GLOBAL 语句并在调用之前定义非移动变量。
或者,您可以将所有内容放入输入向量中,然后添加约束以防止这些值移动。
proc iml;
start myfun(x) global(a, b, c);
out = a*x**2 + b*x + c;
return (out);
finish myfun;
a = 1;
b = 2;
c = 4;
optn = {0, /* option 1: 0 -> MIN, 1 -> MAX*/
0 /* Print options 0-5 0 least, 5 most*/
};
init = 0;
call nlpqn(rc, res, "myfun", init);
/*rc > 0 means success*/
print rc res;
quit;
回报:
The SAS System 08:59 Friday, June 27, 2014 3
rc res
3 -1
当然,您可以使用 IML 语言构建自己的优化例程,但您也有内置的优化例程,请参阅IML 用户指南的第 11 章,非线性优化示例。