|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
如下为NAG library里面e04wc的程序,是别人文章里给的,用来求某函数最小值的,但是我运行时会说错误使用e04wc,输出参数太多,球球大佬怎么搞?" z6 @4 v1 e# c
9 U/ A8 M! R$ R1 b
6 ?8 h$ ^' z, S0 \; {: \function e04wc_example2 ]7 B/ N( f2 J9 [! [
1 s9 C" z1 r P3 ]fprintf('e04wc example results\n\n');
0 K' t( {! Z1 c2 Q- ya = [1, 1, 1, 1];
9 w: R: n+ m* S' Z z3 N* lbl = [1, 1, 1, 1, -1e25, -1e25, 25];4 a y& G7 o, {3 e3 m- F
bu = [5, 5, 5, 5, 20, 40, 1e25];2 t( O& T/ R$ ?1 D$ O5 T {* A* O
istate = zeros(7, 1, 'int64');
9 ] g0 G. |6 ?8 C4 w5 Z* C/ sccon = zeros(2,1);
. o; g+ _$ }- n/ i4 i2 }; r: X' Jcjac = zeros(2,4);
% s2 ~) c, A0 A% L0 bclamda = zeros(7,1);
: m# { n' _, Phess = zeros(4,4);; v' o8 g) N% U2 C4 c
x = [1; 5; 5; 1];
0 u; ~5 l; B& o5 a% o; ]1 r& Z[iw,rw,ifail]=e04wc;
4 ]9 h V) F4 w' O[majits, istate, ccon, cjac, clamda, objf, grad, hess, x, ...
/ M: ^- ]4 a4 Q2 u iw, rw, user, ifail] = ...4 }* }3 T3 [2 N' D; J! {
e04wd(...
# p+ z1 K/ `5 Q, P/ P8 } a, bl, bu, @confun, @objfun, istate, ccon, cjac, clamda, ...
& ]( L- L* u. Z+ H4 k hess, x, iw, rw);4 ]8 ?2 \. E0 O) K) S$ T8 N
fprintf('Final objective value : %8.1f\n',objf);. |9 `! T" }5 s/ l3 y
fprintf('Optimal values for x : ');
) P, a$ d. r/ P: B$ y. ^# zfprintf(' %9.2f',x);
7 ]" t1 e8 v( nfprintf('\nGradients at x : ');4 H) H% G" r4 B( F
fprintf(' %9.2f',grad);
/ j" n7 K) _+ n) [fprintf('\nConstraint functions at x: ');
( ^- ^& |, k3 ?/ `3 \) Wfprintf(' %9.2f',ccon);% l5 P% x9 J: f; ~$ d+ D
fprintf('\nNumber of major iterations = %5d\n',majits);
5 P- Q% U1 _$ \" K% {/ `) K* E5 [8 k$ q0 W" r( U; ^2 ?! J5 @- h
function [mode, ccon, cjac, user] = ...+ f4 j. r5 Z/ C1 D
confun(mode, ncnln, n, ldcj, needc, x, cjac, nstate, user)$ a8 V A o8 ?8 h/ g6 M
ccon = zeros(ncnln, 1);' R) i2 i# t9 V; O/ n$ P9 Q. l2 G
if (nstate == 1)
6 o7 V3 s: n$ \% h2 }4 x% first call to confun. set all jacobian elements to zero.
J) {: k) w% V% note that this will only work when 'derivative level = 3'
' B: U l$ p- a% (the default; see section 11.2).
5 t) v6 W( X9 r# Q$ F2 {" P cjac = zeros(ncnln, n);# L7 Z& U1 e ]1 m7 L
end* `/ Q1 D4 y+ w/ k& Y- t* y/ {
if (needc(1) > 0)
# U; b4 Y. e' l: g& T7 Z& K" ?2 P8 i if (mode == 0 || mode == 2)
0 c* O0 I# k/ T. h ccon(1) = x(1)^2 + x(2)^2 + x(3)^2 + x(4)^2;
5 _1 Q+ A7 U& O! `0 v% n* ]+ n end
9 Q. h. n+ K7 n" h- Y E if (mode == 1 || mode == 2)
1 |% C/ C8 A, _8 f; `& X cjac(1,1) = 2*x(1);
+ z4 {; b+ y2 M( D3 n5 ]3 L4 V cjac(1,2) = 2*x(2); F: B# N0 r1 k9 L. Q8 M, a7 f
cjac(1,3) = 2*x(3);
& o% z* i- x- B/ }, J# v! W, P cjac(1,4) = 2*x(4);; P( Y4 |) c/ r4 p' S- ]
end
! Q0 z" R, R8 W7 _ end7 o' w# A& C1 O
if (needc(2) > 0)& \4 s" j5 Z0 I. F
if (mode == 0 || mode == 2)0 L. r; n8 W5 J0 w; S1 U* q
ccon(2) = x(1)*x(2)*x(3)*x(4);
- W. a3 x% X! `# ~9 ?0 |+ L1 k end* K% i$ x& N) T
if (mode == 1 || mode == 2)& o3 r. }+ @4 u: _4 i4 X, {
cjac(2,1) = x(2)*x(3)*x(4);4 i+ I/ m- V8 x% w; s
cjac(2,2) = x(1)*x(3)*x(4);
: d" m8 X9 E0 J) l- |& @ cjac(2,3) = x(1)*x(2)*x(4);
! A7 O' Y3 P9 I7 n7 S7 @) T) d+ Q6 c cjac(2,4) = x(1)*x(2)*x(3);
+ I# a& b% x0 |: P1 \1 Q; z* t end2 ?+ ^) ?, R( c% `" y" ~5 ]) S( L
end
2 {8 A+ f. t5 I; e* a! K$ s1 {0 ]+ w3 u
function [mode, objf, grad, user] = objfun(mode, n, x, grad, nstate, user)+ H3 J2 T: N7 x
if (mode == 0 || mode == 2)9 w ?0 m! m' ^) G7 Z1 h9 s
objf = x(1)*x(4)*(x(1)+x(2)+x(3)) + x(3);* _' q. N" t; R+ f D5 H9 \
end1 j1 n- D- K5 |4 R/ R* N
if (mode == 1 || mode == 2)- k9 ^3 |$ m: w0 j5 a
grad(1) = x(4)*(2*x(1)+x(2)+x(3)); g3 Z! H+ s; }% Y) A; e/ a2 r5 w8 e
grad(2) = x(1)*x(4);! c" `* M' A4 l. y
grad(3) = x(1)*x(4) + 1;
, i; Q& q* H% o; f. g- `+ I grad(4) = x(1)*(x(1)+x(2)+x(3));
d- b6 i2 Y( S end! d: Z O, I& y8 ^6 T& ^. ~
|
|