|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
如下为NAG library里面e04wc的程序,是别人文章里给的,用来求某函数最小值的,但是我运行时会说错误使用e04wc,输出参数太多,球球大佬怎么搞?( Z) z" h$ I7 d
' X8 j7 p6 |3 e' w: W9 \6 R6 G i U1 h3 }, F, v5 G
function e04wc_example0 H L, i5 \. M2 c1 \
, ^; d4 k: d3 {. `$ n% a
fprintf('e04wc example results\n\n');
5 B, A* p- Z+ Oa = [1, 1, 1, 1];
" _% b) s3 x* H: c1 ]- vbl = [1, 1, 1, 1, -1e25, -1e25, 25];
: w: Z1 l" E9 l1 nbu = [5, 5, 5, 5, 20, 40, 1e25]; T* l, k% f+ \- {6 g$ B- w# _/ V
istate = zeros(7, 1, 'int64');: ~6 \5 j& b7 [
ccon = zeros(2,1);+ `- t \# X5 _( |3 ^" _
cjac = zeros(2,4);
* \% L7 n/ A4 W: v7 y" oclamda = zeros(7,1);0 U: M" T) _( L5 u; B* W/ G
hess = zeros(4,4);" `: T! k2 d' p
x = [1; 5; 5; 1];
" h0 c: }' B% O. o7 k# I: g8 D[iw,rw,ifail]=e04wc;
; T# ]% d- Q. g4 |4 e[majits, istate, ccon, cjac, clamda, objf, grad, hess, x, ...! {& D _7 Q6 v! Q8 _% I
iw, rw, user, ifail] = ...* j( [5 X1 U9 Q5 X4 u9 L _* ?) M
e04wd(...
9 I, p7 z( F$ G3 {, R a, bl, bu, @confun, @objfun, istate, ccon, cjac, clamda, ...
% e& Z2 u4 O' _* D" A, L hess, x, iw, rw);' f9 `! h- C' s t) e4 t; R: t
fprintf('Final objective value : %8.1f\n',objf);
1 \* p8 _7 H, u' Hfprintf('Optimal values for x : ');
2 Y5 u* |; I3 {4 |/ Dfprintf(' %9.2f',x);% g! G0 f1 f; A, T! Q+ G Z2 e
fprintf('\nGradients at x : ');
5 v9 \5 c2 `% S: w7 m' gfprintf(' %9.2f',grad);) j0 C: b4 j r! K/ Y
fprintf('\nConstraint functions at x: ');7 K- s8 o! U! u% w4 E
fprintf(' %9.2f',ccon);
! `1 G6 x3 t+ [0 L7 i5 dfprintf('\nNumber of major iterations = %5d\n',majits);. i; r. L4 [, e" K0 V4 n
5 f0 l7 p$ p- `. i) W
function [mode, ccon, cjac, user] = ...
3 O: p9 Y; k; T- l& f confun(mode, ncnln, n, ldcj, needc, x, cjac, nstate, user)
: W( x& H7 Y1 h) F# Y' f2 F# o1 m ccon = zeros(ncnln, 1);* E/ `7 _, J4 M( ]2 _7 z6 ^, t
if (nstate == 1)( Q" p: B) ]) I* h4 [) n2 w
% first call to confun. set all jacobian elements to zero.
; y0 d( M$ L: i6 _! ^3 P; L% note that this will only work when 'derivative level = 3'
; W/ @& R! E7 v- z* f% (the default; see section 11.2).1 i6 B: w+ u1 J
cjac = zeros(ncnln, n);( Y3 x5 |; C% d/ I9 d
end1 i6 `3 s7 }7 M9 _
if (needc(1) > 0)" {( |4 I$ N3 g
if (mode == 0 || mode == 2), W: J( M& U) B5 U" V% O' K
ccon(1) = x(1)^2 + x(2)^2 + x(3)^2 + x(4)^2;- X( P9 v% A: B) F
end" a7 X. h# P4 ?& T8 c9 j
if (mode == 1 || mode == 2)
& I: @; m! v+ u0 S: e cjac(1,1) = 2*x(1);+ {2 G$ j7 e9 p# o x" w4 ] z# g0 Y
cjac(1,2) = 2*x(2);
6 K( |4 J* x) c cjac(1,3) = 2*x(3);
' A @) `9 O( r( y' f" d( P cjac(1,4) = 2*x(4);
+ }+ D: ]5 `2 V; s2 i; L end3 o7 W8 |' k( o
end3 n6 ?8 Q. ^% B5 v5 c' O
if (needc(2) > 0) h) P9 k: ?/ H/ E- {
if (mode == 0 || mode == 2)) x0 D! n5 V: _4 O
ccon(2) = x(1)*x(2)*x(3)*x(4);
) p! f$ f7 l r5 T" m! P2 c end$ w1 N% z- p3 o6 c3 \
if (mode == 1 || mode == 2)
. _* q" s$ w- m' j7 ^& j3 a; J cjac(2,1) = x(2)*x(3)*x(4);" Z$ ?4 m J+ e# u5 ?
cjac(2,2) = x(1)*x(3)*x(4);
$ E: F0 k. c& l( m; Z% U cjac(2,3) = x(1)*x(2)*x(4);9 M: M$ p* z, i5 p0 n
cjac(2,4) = x(1)*x(2)*x(3);
: v# E c+ `* `3 d/ y5 Z end
! N: `2 N j. e- c7 y# |2 D end
8 w! B% N8 N8 ?3 m8 i) v, Y* w$ F& I! R6 Y
function [mode, objf, grad, user] = objfun(mode, n, x, grad, nstate, user)
! d: Z* O+ U/ j# Z! K* |9 s5 s& M$ ] if (mode == 0 || mode == 2)
1 _) Z. V" _: H7 x objf = x(1)*x(4)*(x(1)+x(2)+x(3)) + x(3);
- r" }5 y( q' l0 f9 M end5 f" @' {7 k& Y& m
if (mode == 1 || mode == 2)3 {# E, B: T! `/ F6 v
grad(1) = x(4)*(2*x(1)+x(2)+x(3));$ F% W# x, i- s4 Y! F h* a+ [
grad(2) = x(1)*x(4);1 R9 t5 X+ l; e3 c0 @! R K7 k0 o" {3 I# Q
grad(3) = x(1)*x(4) + 1;
$ Z- Y `8 j: W2 w9 L& m9 J9 k" ^$ h grad(4) = x(1)*(x(1)+x(2)+x(3));
/ l, v! @ X" f- H+ d end* g# |( x4 o, l5 _6 S
|
|