|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
如下为NAG library里面e04wc的程序,是别人文章里给的,用来求某函数最小值的,但是我运行时会说错误使用e04wc,输出参数太多,球球大佬怎么搞?6 g! B4 U4 Z8 o2 w' b8 Y/ b
- ^! f3 o8 Q4 |4 ]3 J# H+ _1 Y! O! ]2 s7 x% e( O0 y+ J
function e04wc_example
{+ w0 H: V7 `
5 O+ c% Q; }' l' f' Y6 Cfprintf('e04wc example results\n\n');
$ |0 J& u! t& ~- i. Oa = [1, 1, 1, 1];
0 j/ z( w4 O) F9 {2 q6 Hbl = [1, 1, 1, 1, -1e25, -1e25, 25];* F0 }! K E* h, O# H! U: M
bu = [5, 5, 5, 5, 20, 40, 1e25];8 t' M p( v6 E. z; Q/ k
istate = zeros(7, 1, 'int64');
% Q: }2 ^! G' ?: J% t" jccon = zeros(2,1);, E% d( v* f! H7 t
cjac = zeros(2,4);% o2 U) o9 Z. q* X
clamda = zeros(7,1);: P8 o& c* E1 r3 N; Q+ H
hess = zeros(4,4);
, U7 P& q1 K1 ?x = [1; 5; 5; 1];
5 @; e7 [( D3 o h0 C9 {[iw,rw,ifail]=e04wc;; @3 {+ t9 g, n" F" q A, U! d
[majits, istate, ccon, cjac, clamda, objf, grad, hess, x, ...9 x3 a" H3 D" j- t8 T
iw, rw, user, ifail] = ...
8 J/ j% G! e1 f; B$ x e04wd(...
5 {( ^2 S( y ~* z a, bl, bu, @confun, @objfun, istate, ccon, cjac, clamda, ...4 G" l- e! d1 [, T) u1 x( Y& b+ j
hess, x, iw, rw);' Q& D q, L6 ^& O8 a$ h. p
fprintf('Final objective value : %8.1f\n',objf);
* A2 K4 a) r4 ]" dfprintf('Optimal values for x : ');2 f# M+ V6 V/ R6 h: L
fprintf(' %9.2f',x);
' L- c3 M4 w5 P) dfprintf('\nGradients at x : ');3 e) W; c! C Q2 m( g; i
fprintf(' %9.2f',grad);; u1 x6 @9 k( {/ l: p
fprintf('\nConstraint functions at x: ');
! b( L3 o8 O2 Z% b$ Dfprintf(' %9.2f',ccon);
: O) e( V+ g! k6 x/ Cfprintf('\nNumber of major iterations = %5d\n',majits);; S V0 k! J7 D
Z1 N: x' `& ?2 t: p5 Zfunction [mode, ccon, cjac, user] = ...5 Z0 u( [! ]4 n6 E! R
confun(mode, ncnln, n, ldcj, needc, x, cjac, nstate, user)
! z6 R) H$ q1 ]! l4 s" A ccon = zeros(ncnln, 1);. z9 h3 E2 |6 I- r1 z
if (nstate == 1)' B: Y2 i) E' \! X
% first call to confun. set all jacobian elements to zero.: o3 X4 B" \$ Q/ T
% note that this will only work when 'derivative level = 3', ?9 v& j; S- p7 e, N4 Y( P7 D
% (the default; see section 11.2).7 p6 `+ B% J' o
cjac = zeros(ncnln, n);2 \ Z L8 Y9 }7 P
end: G# {; ]# z5 Q0 ?9 E
if (needc(1) > 0)
- P' e* z& X5 C4 L7 C# g z: ? if (mode == 0 || mode == 2)$ M* _$ X+ r+ o4 w( r
ccon(1) = x(1)^2 + x(2)^2 + x(3)^2 + x(4)^2;
& c q+ \' y$ t& T9 [ end
5 T$ T: b% Z, v5 J \9 {4 h if (mode == 1 || mode == 2)
& b% h# n/ J0 K cjac(1,1) = 2*x(1);# J+ S7 I) L1 v% G; M( D9 X' U
cjac(1,2) = 2*x(2);3 b8 B2 H4 R( R( C
cjac(1,3) = 2*x(3);! P+ g* a" x5 c$ s5 y
cjac(1,4) = 2*x(4);
2 k( n7 _8 m' T2 _( w6 z" D& C end
" U+ g- S# i& ^/ r v- a0 ~ end
5 r8 X% ]7 G1 H* J5 N. @ R if (needc(2) > 0)
# R" _# W; M/ c3 |' V2 \: Z; g5 E if (mode == 0 || mode == 2)
+ f; F+ ^# l5 c5 z1 x: Q ccon(2) = x(1)*x(2)*x(3)*x(4);) d y% M i" ?, l
end
b P( Z' Y2 `) d2 G! v( s if (mode == 1 || mode == 2)
, I- g; j9 V& K5 I cjac(2,1) = x(2)*x(3)*x(4);; M" \6 `. d! z, t( V
cjac(2,2) = x(1)*x(3)*x(4);) h- o1 }- j, W" q" b$ |; I
cjac(2,3) = x(1)*x(2)*x(4);
. Y3 `1 |+ Z. ?$ w+ a7 G cjac(2,4) = x(1)*x(2)*x(3);; F3 Y$ S6 u2 j1 Y
end
4 B) e- y+ D0 W" `; ]) |/ Q& F& p end6 K. ]; ]5 f0 [1 h; a
0 v& J5 [ [! `( M4 ~, Vfunction [mode, objf, grad, user] = objfun(mode, n, x, grad, nstate, user)# z! T4 f# P/ g, b& q
if (mode == 0 || mode == 2), \& _$ F' S! S& ^. g7 h
objf = x(1)*x(4)*(x(1)+x(2)+x(3)) + x(3);
8 U% ^, H; ?/ C) a7 m5 ` end' F# H1 x7 W9 ^( P) d
if (mode == 1 || mode == 2) w- W$ h8 b2 [4 B: W6 I( ]
grad(1) = x(4)*(2*x(1)+x(2)+x(3));
, {/ O( i5 I" Z: J grad(2) = x(1)*x(4);
. t( {& r% V0 a L- I- a! X } grad(3) = x(1)*x(4) + 1;
& R+ c5 A% {9 B7 j! T2 @# D9 r grad(4) = x(1)*(x(1)+x(2)+x(3));" p# Q h4 V" `, y7 W& B4 l
end
' W" d' }( ^5 ~2 |' x' Q/ C+ n |
|