|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
如下为NAG library里面e04wc的程序,是别人文章里给的,用来求某函数最小值的,但是我运行时会说错误使用e04wc,输出参数太多,球球大佬怎么搞?% U( M/ m2 r3 ^2 s! s4 J0 W! [
6 i* ^( r z Z3 t- l# A# ]( R
/ t& Z) [ H* I0 D, zfunction e04wc_example
+ _+ O7 p0 A" g, {; Y | V5 s: U+ e- k: v" j% X
fprintf('e04wc example results\n\n');
7 j0 L. {8 a7 O9 i$ k! m6 Ga = [1, 1, 1, 1];
- g0 X6 e4 ^2 v3 l0 ibl = [1, 1, 1, 1, -1e25, -1e25, 25];
/ {# X: B7 |! Dbu = [5, 5, 5, 5, 20, 40, 1e25];1 S7 Y) j; a4 B" |0 D, l: m% R( P
istate = zeros(7, 1, 'int64');+ C7 a0 |8 t; \9 D% h; i2 U6 U
ccon = zeros(2,1);
: n+ Y; N9 k& o" Q' kcjac = zeros(2,4);: B, B% [- t% C9 E
clamda = zeros(7,1);# ?, Q: d8 ?. q) @
hess = zeros(4,4);- Y+ o7 J5 p6 l0 z8 l5 i6 F
x = [1; 5; 5; 1];
' I' a: W& C7 L9 D' R1 \* ~[iw,rw,ifail]=e04wc;
. F" ~; ?) A- A6 b& r5 V; C' Q2 K- S[majits, istate, ccon, cjac, clamda, objf, grad, hess, x, ...5 o: _: B* U( Z$ E1 t4 a! H) L
iw, rw, user, ifail] = ...2 c- q8 _" \: r, `5 {( n
e04wd(...1 o9 p( w( G' ^) Z/ Z" T2 u" h
a, bl, bu, @confun, @objfun, istate, ccon, cjac, clamda, ...
& A6 Q& _/ d$ I0 o2 u! a hess, x, iw, rw);
4 y# H1 H9 G3 T' m7 dfprintf('Final objective value : %8.1f\n',objf);) h% b a. t6 ]; o, v
fprintf('Optimal values for x : ');
/ Q1 J& w: ^+ B$ h6 |fprintf(' %9.2f',x);' G2 Y+ X) J% o4 m- D% r9 u5 ^
fprintf('\nGradients at x : ');
" N9 u6 B0 y- B+ C1 @* _% b5 `fprintf(' %9.2f',grad);
$ U: ?8 Z! M( e' A! m$ v' H0 L$ vfprintf('\nConstraint functions at x: ');3 }1 _) a# u" V+ z) Z7 a) U9 P9 ^" t
fprintf(' %9.2f',ccon);
7 Z4 ^. b1 n) q h2 W1 sfprintf('\nNumber of major iterations = %5d\n',majits);0 | v! I! P' ~1 }6 Z
4 m) D3 t* i3 {( n. C1 k9 d- y
function [mode, ccon, cjac, user] = ...# ~3 `. u. _7 o2 U
confun(mode, ncnln, n, ldcj, needc, x, cjac, nstate, user)
: i) N7 {8 @& N2 g5 { ccon = zeros(ncnln, 1);8 `7 u, i i, a/ }% m
if (nstate == 1)
4 M" @ L/ P& O0 O; F" }% first call to confun. set all jacobian elements to zero.
2 x5 ?, h% O2 w0 b% V% note that this will only work when 'derivative level = 3'
0 `$ K% J( ^8 Q8 Q2 \: s H% (the default; see section 11.2).
. |" Y3 y9 D) p( \ cjac = zeros(ncnln, n);! T$ X3 Y) K0 y: W0 Q' c
end
1 n# s/ V4 \0 x, f( b6 k) V if (needc(1) > 0)0 k6 [) ~& X* n2 E4 b F
if (mode == 0 || mode == 2)
& H) O4 p: V" [+ b1 \# X ccon(1) = x(1)^2 + x(2)^2 + x(3)^2 + x(4)^2;
' t5 q* e" e1 B l) J end- Z2 |" c* n7 A: c
if (mode == 1 || mode == 2)
: C% t/ I/ {5 V cjac(1,1) = 2*x(1);: z$ d5 Z. R' e/ F
cjac(1,2) = 2*x(2);
3 n6 k+ F) F I1 @' {# I$ d* B cjac(1,3) = 2*x(3);& h# W) n- g' M1 _/ [
cjac(1,4) = 2*x(4);) Q+ p0 @) u, ^4 W. f0 g0 ^) M3 Z( T
end
9 [; M: q2 R G1 n end3 \3 Z5 @3 c( d, O
if (needc(2) > 0)1 B/ z) [, }% z. N. E) J
if (mode == 0 || mode == 2)+ G8 ~3 v4 y: S6 _
ccon(2) = x(1)*x(2)*x(3)*x(4);
: l G( W ?% g5 n end
2 h8 v3 D* {4 f+ s' \ if (mode == 1 || mode == 2)
9 _6 @7 w- g+ ^ H, w; ]; ^ cjac(2,1) = x(2)*x(3)*x(4);
K. q/ D: B! ^ cjac(2,2) = x(1)*x(3)*x(4);
* V0 D2 v8 A" Z" d cjac(2,3) = x(1)*x(2)*x(4);
( ^0 [2 B9 g6 q cjac(2,4) = x(1)*x(2)*x(3);0 Q9 e) D' s+ a# n& b z9 s5 B# X
end" B/ N6 {' D4 Z. f- H+ z0 B( a
end' D( W! |8 p* R6 T
5 i% Z$ f3 l1 z5 [+ @% a
function [mode, objf, grad, user] = objfun(mode, n, x, grad, nstate, user)* _( b: r6 N9 U. r
if (mode == 0 || mode == 2)) @& w" w2 P4 E* O
objf = x(1)*x(4)*(x(1)+x(2)+x(3)) + x(3);
! d' `6 S9 Y7 T1 `& {% _ end9 Z, f8 z% [# K9 m
if (mode == 1 || mode == 2)
4 M/ [( c6 S5 T- M5 L: W2 ^8 C. e1 n grad(1) = x(4)*(2*x(1)+x(2)+x(3));
% \/ c0 ]+ v. F, s2 d) T, }% g grad(2) = x(1)*x(4);
: N; R. ?. p; }) T grad(3) = x(1)*x(4) + 1;. t4 N. C) q: b* d! a' W0 A5 z" k
grad(4) = x(1)*(x(1)+x(2)+x(3));9 v# l; M& m% @) y
end
% S0 t: g5 l0 `. W' V5 E6 O; U$ m |
|