|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
如下为NAG library里面e04wc的程序,是别人文章里给的,用来求某函数最小值的,但是我运行时会说错误使用e04wc,输出参数太多,球球大佬怎么搞?7 y% _5 W3 {% P+ g# t
' u5 ?% ^6 v2 C8 w' X( n
! A h0 V* S/ O& w7 Kfunction e04wc_example2 t* p6 O% |, B9 q9 _! k
% f# Q1 |7 ~7 L8 t, N: D
fprintf('e04wc example results\n\n');
* `$ F) h* e2 U& d7 f& d( @, v$ I) S; Za = [1, 1, 1, 1];! A' y! g6 Q7 T Q0 C& u
bl = [1, 1, 1, 1, -1e25, -1e25, 25];
0 a3 q3 E7 R2 v9 a5 Q" P: lbu = [5, 5, 5, 5, 20, 40, 1e25];6 _6 x# r1 q# s2 I+ F1 ]
istate = zeros(7, 1, 'int64');
: f7 j3 X+ G* Accon = zeros(2,1);4 s& W. j: Y" W* j! ^
cjac = zeros(2,4);
+ P, N N% B, a+ A+ }clamda = zeros(7,1);
% g1 g# v5 O6 Y! _0 z, Y, Ohess = zeros(4,4);
6 P/ j$ o, v" N! C5 ~- Mx = [1; 5; 5; 1];
J$ n K8 }! ? V[iw,rw,ifail]=e04wc;
; `- \2 R+ c/ }) I9 w( o[majits, istate, ccon, cjac, clamda, objf, grad, hess, x, ...
% d& d6 d1 J" m- P9 X p! J iw, rw, user, ifail] = ...) ^2 }% Y' m# A
e04wd(...
9 i, }! E" o- l) [4 B/ y9 F a, bl, bu, @confun, @objfun, istate, ccon, cjac, clamda, ...! Y2 ~' w7 ?& C `' F2 ~5 g+ G4 m/ E
hess, x, iw, rw);
& N. g, @7 X& \4 R1 efprintf('Final objective value : %8.1f\n',objf);
x+ A% A c+ D2 [7 Jfprintf('Optimal values for x : ');
% C1 X0 I9 s, ~' Y+ p& H. J( Wfprintf(' %9.2f',x);
! b. W9 `( B$ a" ?8 C: nfprintf('\nGradients at x : ');
' h* [$ Q3 X! X" G6 f# ^7 rfprintf(' %9.2f',grad);8 u! L3 P$ U; U. X( m
fprintf('\nConstraint functions at x: ');7 a" i% N! V; D% O8 T0 L
fprintf(' %9.2f',ccon);8 ?2 P; r9 d/ ~7 C$ L/ H6 |" k
fprintf('\nNumber of major iterations = %5d\n',majits);
0 T& k: z( P" J6 w! c
4 y H& g* V1 |/ x9 B0 Rfunction [mode, ccon, cjac, user] = ...
/ e% w& V! O& ^9 j; Q confun(mode, ncnln, n, ldcj, needc, x, cjac, nstate, user)6 @$ @* x0 M7 Q2 c0 R+ f X
ccon = zeros(ncnln, 1);
" S" Q" d) S6 v. q( [7 u if (nstate == 1): T7 ]! [8 k5 x$ `2 f$ d- @
% first call to confun. set all jacobian elements to zero.0 X& p/ a7 Z5 X' E3 I
% note that this will only work when 'derivative level = 3'
/ u3 K. U! Q' r" K% (the default; see section 11.2).2 N5 K$ ~' }8 G
cjac = zeros(ncnln, n);
! N" r( C; [% [& n% \ end
& [' g, f( Q7 P, r' z if (needc(1) > 0)
1 T H2 \' {% V( Q1 ~( Z if (mode == 0 || mode == 2)
) f% C2 c6 n, V* P ccon(1) = x(1)^2 + x(2)^2 + x(3)^2 + x(4)^2;
$ D3 `, ^: N) d4 V0 _% T end1 x& F) e ?: _1 d
if (mode == 1 || mode == 2)4 A' g, ?; [8 e: Q
cjac(1,1) = 2*x(1);
, s- D* R+ c% i$ y cjac(1,2) = 2*x(2);
) K: k1 y8 ^; n1 I: Z cjac(1,3) = 2*x(3);6 P) a. A8 g& I5 {( o9 w3 G) R
cjac(1,4) = 2*x(4);: }* s3 n5 u0 I2 x' I
end, o! D4 g5 O& F
end" X7 B$ [9 R4 l4 U
if (needc(2) > 0)
8 ]7 V. y9 J/ A/ V' C/ v9 K if (mode == 0 || mode == 2)9 J, p/ D1 `; b" @5 O1 t4 }# M$ }
ccon(2) = x(1)*x(2)*x(3)*x(4);
& H# T" a7 Q0 J1 O, `+ y' b. e end, f- A% M, K$ b' x! Y( y
if (mode == 1 || mode == 2)
$ e; U8 U# Y; I1 ^5 j cjac(2,1) = x(2)*x(3)*x(4);
0 A/ | O4 f# r5 x( A3 n2 k( E1 K# H cjac(2,2) = x(1)*x(3)*x(4);/ C0 }4 |* ?( l J4 B$ a5 k& y3 {) C
cjac(2,3) = x(1)*x(2)*x(4);
* K9 e: w8 B/ o/ s0 N cjac(2,4) = x(1)*x(2)*x(3);7 O, r3 s$ F# Z" g/ S# a% N4 B
end1 u& l+ P+ k7 L8 K# a6 o& D
end
+ c, L2 O/ r8 R& Y5 ~4 \6 a; o! Z- ~
" }7 M# v) v% `# k/ x; y! m3 yfunction [mode, objf, grad, user] = objfun(mode, n, x, grad, nstate, user): o! r+ c9 i+ y
if (mode == 0 || mode == 2)
/ E2 w+ V6 [2 |6 I1 y& j objf = x(1)*x(4)*(x(1)+x(2)+x(3)) + x(3);
, z2 N7 U) j4 r' q4 o, P0 F end
! F2 u& T1 V+ q' K/ a if (mode == 1 || mode == 2)
0 R7 ~& N6 g& `! L grad(1) = x(4)*(2*x(1)+x(2)+x(3));2 H7 a' D) Z+ E4 f, ]' N
grad(2) = x(1)*x(4);
: O/ j5 @7 `5 }6 R grad(3) = x(1)*x(4) + 1;& q1 i# }# T& ?6 n) g: w
grad(4) = x(1)*(x(1)+x(2)+x(3));
c. W1 |! P+ s& v& j( [ end7 ^6 }( `4 O1 U9 ]' C. c9 }# x
|
|