|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
如下为NAG library里面e04wc的程序,是别人文章里给的,用来求某函数最小值的,但是我运行时会说错误使用e04wc,输出参数太多,球球大佬怎么搞?
! C1 E9 C' y% A# j/ Z- O: b
1 W3 X( N1 ^0 H! s0 F! r! d2 n1 O! a: x9 V+ y/ o$ E
function e04wc_example
+ n/ I! m! t6 q! y/ x' \
8 H4 h. P- P. |4 _. ^fprintf('e04wc example results\n\n');
. R. G# h8 Z9 Qa = [1, 1, 1, 1];/ ^+ l: w/ l8 s3 m4 W
bl = [1, 1, 1, 1, -1e25, -1e25, 25];5 { X4 e* t8 B( L! v
bu = [5, 5, 5, 5, 20, 40, 1e25];
) B6 g: n1 J2 H9 D) K1 D2 [istate = zeros(7, 1, 'int64');
! f+ ]7 A" [* m0 V h* E0 lccon = zeros(2,1);
2 n; I& j' ]6 e* qcjac = zeros(2,4);
; H% n7 g9 n& N2 ~6 wclamda = zeros(7,1);8 J* e' B3 O; a: J' ^5 W
hess = zeros(4,4);* N6 y0 k! W, X) H
x = [1; 5; 5; 1];
8 r; i% V0 t1 ]7 J[iw,rw,ifail]=e04wc;
1 [. M- w+ H6 @2 j[majits, istate, ccon, cjac, clamda, objf, grad, hess, x, ...
2 i. l; V$ R) [; b iw, rw, user, ifail] = ...% p4 I* C' {0 h( T; }6 r* O
e04wd(...3 d4 y; {' S. y$ f; Y! I
a, bl, bu, @confun, @objfun, istate, ccon, cjac, clamda, ...
/ G! H, p& o9 G' p4 B* e, ]) P/ @ hess, x, iw, rw);
) L. ]" K, L& q* R4 b7 n4 L4 Q2 ^fprintf('Final objective value : %8.1f\n',objf);
/ h0 M. W) C. m' E( T' w& }fprintf('Optimal values for x : ');
1 S( |* F) W$ A2 y; g6 _; r4 cfprintf(' %9.2f',x);" x# T" | J/ G1 Q. y% e' T
fprintf('\nGradients at x : ');
1 Q" ?: L; ~/ N8 Jfprintf(' %9.2f',grad);
1 _$ \: {2 x+ T4 f. {' P- afprintf('\nConstraint functions at x: ');% C( _7 Z; A5 F% K2 ~* r
fprintf(' %9.2f',ccon);* _. ]# Q, y: j
fprintf('\nNumber of major iterations = %5d\n',majits);
% i& P. o( J% V3 I6 m1 H" t: @( g
3 ~6 O& i" p% i4 i1 g C/ j' ?% Dfunction [mode, ccon, cjac, user] = ...
0 R4 C' J1 v" X& H confun(mode, ncnln, n, ldcj, needc, x, cjac, nstate, user)9 y8 }+ R% I4 T$ Q
ccon = zeros(ncnln, 1);
7 Y) w& |$ `/ {/ \' `0 }- \ if (nstate == 1)& u, E5 i0 v3 Y9 n9 Y" A0 C8 ?% s
% first call to confun. set all jacobian elements to zero.
: q# M" c0 c* {4 n1 k3 B2 g" O% note that this will only work when 'derivative level = 3'
, K/ B) F5 D/ D0 u4 J" c% (the default; see section 11.2).
" u) Q- v. N9 |9 w" T" j7 h cjac = zeros(ncnln, n);, o$ Q$ H2 I( Z0 k) \
end: C3 V$ m: d9 j" o7 T4 w
if (needc(1) > 0)7 X) p; Z# |! A+ q: u7 X# a; B; `
if (mode == 0 || mode == 2). i- Z4 u0 I" [& b/ j! ?
ccon(1) = x(1)^2 + x(2)^2 + x(3)^2 + x(4)^2;
7 Z+ k1 H3 `6 u% {( a1 X end
" l R# a0 ~- @- y. G" h if (mode == 1 || mode == 2); |4 C/ E3 M( Q5 ?$ G' c+ F
cjac(1,1) = 2*x(1);
6 y7 f" o& e( z- ] cjac(1,2) = 2*x(2);
' O' p; ^# W1 h5 I( \6 M6 H w cjac(1,3) = 2*x(3);
5 D* H w$ a5 d* s% ]( x cjac(1,4) = 2*x(4);
& x6 L3 @; C1 ^8 M" G: k" }2 W3 y end+ }0 X: {8 G6 f" d: n, E/ Q% Y2 V
end
: P3 |& t& Y- l if (needc(2) > 0)' x. U, F( ]9 y' J
if (mode == 0 || mode == 2)' a% I: U9 x( J Y! L2 J G
ccon(2) = x(1)*x(2)*x(3)*x(4);7 S7 ]1 Y- w6 X
end
m" F x% \ U- z/ m5 F1 W if (mode == 1 || mode == 2)
6 }, }; ]$ U( Z cjac(2,1) = x(2)*x(3)*x(4);) o3 \# S: j8 A) z
cjac(2,2) = x(1)*x(3)*x(4);
2 b6 C9 u) _0 ] cjac(2,3) = x(1)*x(2)*x(4);
" Z7 R% w: C0 ]+ _, h! s cjac(2,4) = x(1)*x(2)*x(3);% q' _5 f6 F$ A/ {+ Q6 R+ ^8 k% O, w
end
3 r/ A1 a1 _# t% w5 W end
/ y4 G8 ]. X1 c9 U5 N1 u8 W5 t5 ^ c! _8 V
function [mode, objf, grad, user] = objfun(mode, n, x, grad, nstate, user)
& P* q2 n2 i+ D9 {/ O if (mode == 0 || mode == 2)
0 M, i+ O7 e v objf = x(1)*x(4)*(x(1)+x(2)+x(3)) + x(3);" j' u+ [, ?1 v; e
end9 B% O! D( J& y" E7 M4 Y) m
if (mode == 1 || mode == 2)
* D* G$ r1 E! H9 ^7 O grad(1) = x(4)*(2*x(1)+x(2)+x(3));' h/ a. }! z8 n5 `4 S
grad(2) = x(1)*x(4);
# N- Y9 K8 H. `1 z( A S grad(3) = x(1)*x(4) + 1;1 v6 ~9 U* U! B3 G9 J
grad(4) = x(1)*(x(1)+x(2)+x(3)); o0 {8 c) T5 U N
end
# m# z' c' v, H, K! S6 b |
|