|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
如下为NAG library里面e04wc的程序,是别人文章里给的,用来求某函数最小值的,但是我运行时会说错误使用e04wc,输出参数太多,球球大佬怎么搞?+ U& ~5 V( ]9 z8 ?
! `5 g% y' V. N( X! `+ f/ N) |- g. p
8 @; v3 _- a" Gfunction e04wc_example
* Z9 S% j+ _1 d s( e: ^5 @5 }- W5 a, i( z% ?) M7 k" {
fprintf('e04wc example results\n\n');
! B, k7 }) L A8 }1 i. `& ^a = [1, 1, 1, 1];
: S' C' U, a+ M/ vbl = [1, 1, 1, 1, -1e25, -1e25, 25];7 n- p/ Y# @8 E1 P5 @/ e f
bu = [5, 5, 5, 5, 20, 40, 1e25];
$ |' t _! T5 m3 eistate = zeros(7, 1, 'int64');
2 Y# I- d& `2 W% Pccon = zeros(2,1);
& _' N% I. v8 c3 ~3 zcjac = zeros(2,4);1 ^' |5 W7 a6 M1 w: \7 ^" }
clamda = zeros(7,1);: U4 a% Q$ G/ R. i! g! n# Q) z* ]
hess = zeros(4,4);, l. u9 G' h; k& l. [$ o- j/ f% t
x = [1; 5; 5; 1];
& Y0 X* N$ L' x/ K; V: b% Q[iw,rw,ifail]=e04wc;
}6 [, T6 ~5 v+ l) @1 {% @[majits, istate, ccon, cjac, clamda, objf, grad, hess, x, ...- k m7 K/ d5 y6 _
iw, rw, user, ifail] = ...; H/ b O& M3 U$ X# Y
e04wd(.... @ n) [) {* g
a, bl, bu, @confun, @objfun, istate, ccon, cjac, clamda, ...
# R: `0 r: d" V: U hess, x, iw, rw); o0 _$ ], U7 [; }7 K2 o
fprintf('Final objective value : %8.1f\n',objf);, j0 d* ?$ i$ q. z
fprintf('Optimal values for x : ');1 F ^9 o! }( J' `. N( B
fprintf(' %9.2f',x);: p( C X/ J& M" \
fprintf('\nGradients at x : ');, E, G6 e0 v9 L% L. \
fprintf(' %9.2f',grad);
G4 |' d# O w5 W* {2 T3 O6 [fprintf('\nConstraint functions at x: ');
. r8 J4 L' h4 z9 {! g" A3 G! N( pfprintf(' %9.2f',ccon);
3 X+ f1 t9 L, W2 i; p! g$ Lfprintf('\nNumber of major iterations = %5d\n',majits);1 V) Q8 q/ @# P$ T
) G! n, t5 k6 {6 v
function [mode, ccon, cjac, user] = .../ i) |% Y9 g' @, u+ y" T
confun(mode, ncnln, n, ldcj, needc, x, cjac, nstate, user)1 |+ ~% [* H% B* G0 [7 y, x
ccon = zeros(ncnln, 1);
& V! M7 V$ T3 E8 V if (nstate == 1)
" ~& ^$ N [2 T% H% first call to confun. set all jacobian elements to zero.
. S, ~$ w6 T0 q$ _( p% note that this will only work when 'derivative level = 3'& ]" u4 m2 g9 z* E! l2 _5 v6 c
% (the default; see section 11.2).
7 k$ `+ O: U; t/ ? cjac = zeros(ncnln, n);
6 b. H2 U& [) K. D( R end( e" c2 A6 u+ G) `
if (needc(1) > 0)5 g: x- a2 X+ c4 D& C
if (mode == 0 || mode == 2), G/ `! ?$ r; Y2 Q5 P
ccon(1) = x(1)^2 + x(2)^2 + x(3)^2 + x(4)^2;
/ h: q, W9 p: s w" E+ @ end h' ~& S" z" ?2 P; ^. U1 P+ t3 r+ N
if (mode == 1 || mode == 2)
- g7 z4 b$ _5 z: ] cjac(1,1) = 2*x(1);0 c; @- g( J8 W/ N, O9 k/ B
cjac(1,2) = 2*x(2);
. H' G0 B3 H9 l, U4 V$ I- p% F cjac(1,3) = 2*x(3);, D4 C' G1 }; a8 m1 }& ^) v
cjac(1,4) = 2*x(4);
* N" w6 h( U E) R% U5 K! [ end0 Y& ?1 A- R2 q6 Z) C
end+ }& C+ q6 p# |& l: `8 A
if (needc(2) > 0)3 I( _8 h* J* M$ q2 @
if (mode == 0 || mode == 2)/ D' n2 ]) i- R1 ~/ M
ccon(2) = x(1)*x(2)*x(3)*x(4);9 {$ _- ^. F* G& b' m4 z$ M+ U
end5 o1 W6 W( J- v- N4 f4 S
if (mode == 1 || mode == 2)
# P1 z2 g6 c4 ^ cjac(2,1) = x(2)*x(3)*x(4);
% z, K/ h5 c; G; \+ F( X* K" g cjac(2,2) = x(1)*x(3)*x(4);. D! r& X- N, }3 }; W4 M4 j8 S
cjac(2,3) = x(1)*x(2)*x(4);
+ D8 k( a. i; ]* O$ I1 d# S4 F cjac(2,4) = x(1)*x(2)*x(3);4 C. O. h# {2 ?6 \: Z1 h4 P
end
' n5 A i9 X0 y- d, [) W end
a% K- [6 C9 b& n; [) l- ^
! P% H9 P2 m- T0 U& m7 [2 }; Nfunction [mode, objf, grad, user] = objfun(mode, n, x, grad, nstate, user)1 P7 J. ]* f: X) h
if (mode == 0 || mode == 2)
6 A8 w: ?) l# D o0 p; v# H objf = x(1)*x(4)*(x(1)+x(2)+x(3)) + x(3);
: \0 s# z g' y end
$ u* n: c, P% N. s' p7 }5 a if (mode == 1 || mode == 2)7 k+ F, m) \5 ^" M8 {8 a/ N0 T
grad(1) = x(4)*(2*x(1)+x(2)+x(3));7 N( U: @- U- O" ]# ^; a) C
grad(2) = x(1)*x(4); A# D+ u4 T4 X# m; ~8 D
grad(3) = x(1)*x(4) + 1;
. f4 [. h6 _% J- F7 d grad(4) = x(1)*(x(1)+x(2)+x(3));
8 \& u) B" Q! X5 x& c end+ A }1 b5 q1 k
|
|