|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
如下为NAG library里面e04wc的程序,是别人文章里给的,用来求某函数最小值的,但是我运行时会说错误使用e04wc,输出参数太多,球球大佬怎么搞?9 F) d0 U3 j$ _- _# ]: _
1 t$ H# N' i/ f8 S( I" f0 v% {$ J9 }6 _* T+ o$ I7 Y3 Q
function e04wc_example
" V7 \: n( f7 L) A# {
; z$ P' ^" X4 u* L4 X/ k+ w/ Nfprintf('e04wc example results\n\n');
" p5 Q( t1 O% E9 R9 e3 }% o; W, aa = [1, 1, 1, 1];) M/ L1 C }; n j4 L/ {! q
bl = [1, 1, 1, 1, -1e25, -1e25, 25];* M6 {8 x* `" W% z
bu = [5, 5, 5, 5, 20, 40, 1e25];
5 S4 K+ |- o) U& V1 |0 c, E, Qistate = zeros(7, 1, 'int64');
& X9 l4 h. g( `" J% `' _+ C; b: \ccon = zeros(2,1);
0 a& p1 ?8 t* [) Tcjac = zeros(2,4);) K; a- |+ d8 a
clamda = zeros(7,1);
8 s! V# g) J2 S* I I4 whess = zeros(4,4);" C( u7 T$ A" L3 @8 e- S3 T( ~/ @
x = [1; 5; 5; 1];1 ~: Q: |; A0 G! U1 ~! q
[iw,rw,ifail]=e04wc;
+ ]2 {. A4 j1 z[majits, istate, ccon, cjac, clamda, objf, grad, hess, x, ...
/ c: Q7 j9 Z6 c8 T* o iw, rw, user, ifail] = ... D4 i$ o$ Z) j8 D9 z! }' _
e04wd(...9 V7 u7 z) j" X" E
a, bl, bu, @confun, @objfun, istate, ccon, cjac, clamda, ...
/ j; k5 S( y% o' ^# v- g" e$ q hess, x, iw, rw);8 K8 Y) q9 U: q, q9 N N
fprintf('Final objective value : %8.1f\n',objf);% ?9 v# i. B! a4 u( [
fprintf('Optimal values for x : ');% W/ N6 O l9 s3 K# x' h: v* Y
fprintf(' %9.2f',x);
& Z9 l Q; t' Z% ^1 a4 G, x rfprintf('\nGradients at x : ');
2 P" V% W$ \- }; ifprintf(' %9.2f',grad);
* e6 B& y6 t% h$ s" x r8 a. y2 efprintf('\nConstraint functions at x: ');
9 O9 E% d( h( N# b k8 {fprintf(' %9.2f',ccon);7 \0 Q/ X' v5 }8 u0 o6 s, w
fprintf('\nNumber of major iterations = %5d\n',majits);- e3 j2 i0 p: Y1 k
8 @/ z9 g2 C+ M' L, G& Yfunction [mode, ccon, cjac, user] = ...) y' N9 H3 q" ^6 ?% R! _
confun(mode, ncnln, n, ldcj, needc, x, cjac, nstate, user)
( Y7 g# V* A* @% o ccon = zeros(ncnln, 1);% A) [; F2 y f, G
if (nstate == 1)1 T. X& u' Z6 M2 s
% first call to confun. set all jacobian elements to zero.; c3 ]" a" V3 x1 h6 Z
% note that this will only work when 'derivative level = 3'
6 Y& `" t x/ W) p3 C' ?: _% (the default; see section 11.2).
1 b- u0 ^) g8 l5 @+ s6 T- x cjac = zeros(ncnln, n);
" a, w( s5 h) v1 }/ ] end# S9 M# [1 S3 n0 S7 j9 r' d( I
if (needc(1) > 0)' q+ n, c1 I# ], j$ a1 y9 I
if (mode == 0 || mode == 2)
6 C+ ?: G. o" K: H4 e9 l; `- \ ccon(1) = x(1)^2 + x(2)^2 + x(3)^2 + x(4)^2;
' _8 V; z9 t6 h" Q1 V end
3 l) g3 \, E/ ]& o- V if (mode == 1 || mode == 2)
8 @" p& t, q# s4 B1 U cjac(1,1) = 2*x(1);3 i. p) R: }+ h
cjac(1,2) = 2*x(2);) {0 b; `7 g, w' L
cjac(1,3) = 2*x(3);
& l& k8 K+ ]* n' L3 a9 G2 @ cjac(1,4) = 2*x(4);
* H6 z, _7 A: l0 D% ^5 l6 Q) r( J end
* a6 R2 @7 }0 t5 z/ l+ e$ z end1 L8 z7 V$ K O0 F
if (needc(2) > 0)% E3 z! `+ P! `0 `3 L6 {
if (mode == 0 || mode == 2). o# d# _$ H* n
ccon(2) = x(1)*x(2)*x(3)*x(4);2 `% ^+ @# ], t# X1 `
end
1 f- b; C" B- R% }, H" }/ M+ N if (mode == 1 || mode == 2)
5 b9 l3 v4 k( k: d. t9 B cjac(2,1) = x(2)*x(3)*x(4);; u$ H f0 ~' N# B* x6 M
cjac(2,2) = x(1)*x(3)*x(4);' m3 o' @8 a0 e4 V$ p( W) ? T
cjac(2,3) = x(1)*x(2)*x(4);6 @/ q8 j' v) G
cjac(2,4) = x(1)*x(2)*x(3);/ Z- Z4 g# {& y* M: I D+ h
end3 Z& N. D9 [# f
end* _* M& p/ t2 K5 Q
7 e" B9 {5 v) D' V0 e: d) U+ Pfunction [mode, objf, grad, user] = objfun(mode, n, x, grad, nstate, user)5 V+ M' D0 \! Z- b
if (mode == 0 || mode == 2)
8 g" M$ A0 F8 n" B objf = x(1)*x(4)*(x(1)+x(2)+x(3)) + x(3);' F0 @; W9 D! A; j* V% z0 V9 z- Y
end/ ]4 O0 f; f# o* ?0 p
if (mode == 1 || mode == 2)2 G! C6 @ d0 L# H4 I1 d- A* u( G: B
grad(1) = x(4)*(2*x(1)+x(2)+x(3));1 k" j1 z1 Y/ b: Z0 i3 V$ v
grad(2) = x(1)*x(4); R+ P. k: W, J* S
grad(3) = x(1)*x(4) + 1;8 Z' k( M% R- O& O: J
grad(4) = x(1)*(x(1)+x(2)+x(3));
2 g) B, \7 }1 Y end2 {( Z6 J' e& b- O# E! ?0 A$ {/ \
|
|