|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
如下为NAG library里面e04wc的程序,是别人文章里给的,用来求某函数最小值的,但是我运行时会说错误使用e04wc,输出参数太多,球球大佬怎么搞?
( h5 v' s% \9 l Y8 O3 T3 s5 E' N2 z5 l3 g) }) B
6 \0 U" z5 V9 `7 U8 t, W: |$ v9 z
function e04wc_example3 P$ m1 P5 ~/ k! T; b) G
, {, q) p1 x- T1 z
fprintf('e04wc example results\n\n');+ V$ V3 _4 o" @; y& @; M1 H
a = [1, 1, 1, 1];: q; e$ k: ?; H3 Y
bl = [1, 1, 1, 1, -1e25, -1e25, 25];1 w. r/ x$ T6 d& ~4 R! a
bu = [5, 5, 5, 5, 20, 40, 1e25];4 }$ r1 \, d0 c3 C
istate = zeros(7, 1, 'int64');1 R! K: A9 b8 Z( l1 W
ccon = zeros(2,1);
5 i( ?, Z! l! U5 K$ v1 t# A4 ycjac = zeros(2,4);
9 y7 \; I7 n/ q* k8 C; @! N; X+ Oclamda = zeros(7,1);5 }' Y Q4 Y3 E/ R- [
hess = zeros(4,4);
! w8 ~) g9 \+ h; f, j7 i0 rx = [1; 5; 5; 1];# i# z0 O% U: I* [& m- v
[iw,rw,ifail]=e04wc;, p/ `, z) w! a* ?4 }" m
[majits, istate, ccon, cjac, clamda, objf, grad, hess, x, ...
# q, I( C6 _4 y. R: Q) \ iw, rw, user, ifail] = ..." i& H: [& Z) M1 q4 P
e04wd(...% D4 x; c$ e1 r9 \5 a8 Y& s# `
a, bl, bu, @confun, @objfun, istate, ccon, cjac, clamda, .../ e/ Y; u% t m- U
hess, x, iw, rw);
* h* e* v! C1 L1 }- i( Ufprintf('Final objective value : %8.1f\n',objf);
2 q2 u U; t* Ofprintf('Optimal values for x : ');
9 F: g j3 i# ]' A! u" u/ R: X9 lfprintf(' %9.2f',x);
. \( n2 b8 |% a. J$ l a/ _1 Tfprintf('\nGradients at x : ');
: g9 n8 A% D9 A1 p( g0 R8 y! {fprintf(' %9.2f',grad);
; O' A/ @4 z ^+ ]- Qfprintf('\nConstraint functions at x: ');" ~' R) I; u9 }+ [4 n4 D
fprintf(' %9.2f',ccon);$ v# ?0 r; v- Z; o
fprintf('\nNumber of major iterations = %5d\n',majits);; L( `* T- g& T E
4 I9 z( ?: }5 Y; ~9 Q% Y6 B
function [mode, ccon, cjac, user] = .... i7 E2 X6 L, p9 f
confun(mode, ncnln, n, ldcj, needc, x, cjac, nstate, user)" v: I3 S6 z( U. E* C/ Q p
ccon = zeros(ncnln, 1);
& Q8 P3 M \2 p if (nstate == 1)! N+ a# [* z% z
% first call to confun. set all jacobian elements to zero. \2 L% m+ b0 X) v% T6 F9 `
% note that this will only work when 'derivative level = 3'
2 m! X; r! m/ m9 D3 {: @5 b' S8 e! c% (the default; see section 11.2).
5 n' I# S3 m& I% T5 ^% E cjac = zeros(ncnln, n);
& e; d( @* u9 j: C! W) P: J end9 `: v% f/ s, ~; E z
if (needc(1) > 0). m: \# M d) E
if (mode == 0 || mode == 2)- K6 {2 ?/ i: F" g3 m# L
ccon(1) = x(1)^2 + x(2)^2 + x(3)^2 + x(4)^2;
/ \2 F* S9 L! A, B; Q end, j$ N8 v9 W8 v3 u. n1 @ @
if (mode == 1 || mode == 2)
. a4 `5 C) B2 c" t: S cjac(1,1) = 2*x(1);+ f( d' J" W z. I* w( g+ T& j3 |! X
cjac(1,2) = 2*x(2);
2 t7 ?. c, J3 |* O$ r cjac(1,3) = 2*x(3);! i# v2 H6 ]" a$ E* n
cjac(1,4) = 2*x(4);& w7 ^6 P6 Z: |& k+ t Y2 D' V
end I' P* u8 [5 o" a1 p
end
# ^1 u) H3 e( ]' x+ y if (needc(2) > 0)& w0 v$ N4 q/ L. V
if (mode == 0 || mode == 2) L/ E# V" E, h4 C+ n
ccon(2) = x(1)*x(2)*x(3)*x(4);
* ?" o3 e8 J* w; r. q# t end4 \! L9 P7 B9 n. U! F! M
if (mode == 1 || mode == 2)2 M# K! S7 o" e' O
cjac(2,1) = x(2)*x(3)*x(4);
5 }5 f# }4 |& Z, v cjac(2,2) = x(1)*x(3)*x(4);% G9 k' x, C3 w$ W4 F! Y
cjac(2,3) = x(1)*x(2)*x(4);/ x, \# `5 e9 \. }9 j1 ^* U$ S0 K
cjac(2,4) = x(1)*x(2)*x(3);
( M# s0 B7 q5 q9 a( R" M" h# R end9 r' [% J* q+ D, X
end
8 f& o ]8 [- X+ D; w. \/ @4 e0 U
5 f( c0 z0 e0 r3 t8 A8 @function [mode, objf, grad, user] = objfun(mode, n, x, grad, nstate, user)
5 A) A% L7 Z8 U if (mode == 0 || mode == 2)- k$ ^/ L b: W1 Z2 S, f' m
objf = x(1)*x(4)*(x(1)+x(2)+x(3)) + x(3);$ m! d& P# ~- t5 A* l
end: z- Z" g! s) g* c( R5 u7 V/ N
if (mode == 1 || mode == 2)* X C' D3 q) ^$ [5 L
grad(1) = x(4)*(2*x(1)+x(2)+x(3));% ^* c( S* Q" V% @7 ]
grad(2) = x(1)*x(4);. h W6 `% g- n
grad(3) = x(1)*x(4) + 1;# R5 _- w h- L
grad(4) = x(1)*(x(1)+x(2)+x(3));
1 A. m* H! c; f9 g1 m& A end" d; l9 x* h- ]5 U, u6 p) r
|
|