|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
如下为NAG library里面e04wc的程序,是别人文章里给的,用来求某函数最小值的,但是我运行时会说错误使用e04wc,输出参数太多,球球大佬怎么搞?
& Z2 E( s4 e! z; ^& y C
, v; e% j& S, u( V6 m3 c. S( o2 \
function e04wc_example. t9 `6 v* ~) i, ~5 z* F
: T* r8 N7 A$ c5 F ^4 `- Rfprintf('e04wc example results\n\n');! I5 @4 U+ S; n* ]
a = [1, 1, 1, 1];
0 y4 T$ e* h2 p3 l9 ~, Tbl = [1, 1, 1, 1, -1e25, -1e25, 25];/ i3 g* X8 G& Z3 G
bu = [5, 5, 5, 5, 20, 40, 1e25];
4 P" F' R/ N% R! O* tistate = zeros(7, 1, 'int64');! t5 e5 S0 E7 J. D/ \
ccon = zeros(2,1);6 Q B- }7 L% S% t6 j0 @2 t' k3 w
cjac = zeros(2,4);
' a2 [% @- S! Rclamda = zeros(7,1);% y3 A2 q7 c- \& B5 D
hess = zeros(4,4);4 L& `* m/ N' f }. V( Q2 ^# T
x = [1; 5; 5; 1];
' H. w- U+ M8 K2 _9 N& [+ G t[iw,rw,ifail]=e04wc;' z" d% O9 H# B: W7 \- o# c* P
[majits, istate, ccon, cjac, clamda, objf, grad, hess, x, ...
$ X6 M% D$ x" ^ iw, rw, user, ifail] = ...
/ H" X1 b/ T8 D3 C9 K m e04wd(...
6 I6 l& x! Z/ P0 d4 _ a, bl, bu, @confun, @objfun, istate, ccon, cjac, clamda, .... B1 J+ [) J9 g. }4 t
hess, x, iw, rw);) o* A- r8 W5 k9 g
fprintf('Final objective value : %8.1f\n',objf);0 N) R [* d% s8 H
fprintf('Optimal values for x : ');
: ^. z# {, u% ]$ a1 Rfprintf(' %9.2f',x);8 y" z& E- `1 P
fprintf('\nGradients at x : ');8 t0 r+ n! M5 _0 l% n1 i- H5 G! n
fprintf(' %9.2f',grad);
F! u2 z0 I# R* Yfprintf('\nConstraint functions at x: ');
; N0 y6 [# d8 C, Dfprintf(' %9.2f',ccon);4 g/ V$ i& o3 P
fprintf('\nNumber of major iterations = %5d\n',majits);
3 f* m# C' O" m: e* b: v% C! s
function [mode, ccon, cjac, user] = ...6 `2 a+ a+ ^; l: t
confun(mode, ncnln, n, ldcj, needc, x, cjac, nstate, user)4 j, L5 {( f8 c h
ccon = zeros(ncnln, 1);, v' m* G1 A" B% X9 E! |
if (nstate == 1)* a9 m/ `- x( W' o
% first call to confun. set all jacobian elements to zero.
8 k9 ?6 v% F/ n% note that this will only work when 'derivative level = 3'
0 {7 x* P& @9 R1 b% (the default; see section 11.2).
& Z/ c! q/ y6 ?1 O. Z& ^' R cjac = zeros(ncnln, n);
0 X* s: d8 L) N) {# d, R end$ ] Z3 U B: F3 \* w; i* `4 h, G
if (needc(1) > 0)% X/ N' k' d9 [
if (mode == 0 || mode == 2)
% A- n( U0 t) A ccon(1) = x(1)^2 + x(2)^2 + x(3)^2 + x(4)^2;
7 T4 G3 H+ T7 i: n end, d. Y5 K5 W4 V/ b5 i, u
if (mode == 1 || mode == 2)
" X7 [; w. U8 R cjac(1,1) = 2*x(1);2 T: @# o$ y0 C8 k
cjac(1,2) = 2*x(2);+ N( _4 I- M* _5 x) n) L: y7 I
cjac(1,3) = 2*x(3);1 y! c2 U' C% r- Z( w+ u% S6 g
cjac(1,4) = 2*x(4);
9 e0 d, \! W8 S( H end
% @. [. R* S- E5 M8 k end
$ m! o- Z; N; W9 y# z* j& t z4 e if (needc(2) > 0)% s! m1 ?+ h" y( P- d! N
if (mode == 0 || mode == 2)
( ]# I1 g- P: M0 G0 I ccon(2) = x(1)*x(2)*x(3)*x(4);, v3 r+ \/ J- C% }3 E6 F
end6 @0 h# C2 l' `9 [
if (mode == 1 || mode == 2)
/ s* `' \- b7 |' \$ y- U9 f cjac(2,1) = x(2)*x(3)*x(4);1 ^+ P* z p6 [% Y7 p% N/ h
cjac(2,2) = x(1)*x(3)*x(4);
' l- y- T! @8 v- t" x) @4 ?0 S1 C cjac(2,3) = x(1)*x(2)*x(4);
! L7 y3 O% n7 U( ?$ k: m cjac(2,4) = x(1)*x(2)*x(3);4 k- v# {# ^! ?; Q m, ^
end! D# g* B4 t6 v& Y
end7 c, q, {! S" Z- ^
1 D* N; W9 P4 _3 k
function [mode, objf, grad, user] = objfun(mode, n, x, grad, nstate, user)
$ u9 b! f2 ~& r if (mode == 0 || mode == 2)1 ?3 I: ^- U4 [: T" h
objf = x(1)*x(4)*(x(1)+x(2)+x(3)) + x(3);
9 N; z0 f5 J* ^4 J0 _+ V$ k# N end
9 p4 W1 U' ^" a& @; I7 [ if (mode == 1 || mode == 2)
2 k1 ^9 O9 q* C/ b grad(1) = x(4)*(2*x(1)+x(2)+x(3));2 \5 o3 y' ]2 [9 q/ E9 a5 U' T9 g
grad(2) = x(1)*x(4);; p8 Y/ e2 J5 T9 @2 @* |$ B
grad(3) = x(1)*x(4) + 1;3 ^7 T3 j) `' M" J0 c& e
grad(4) = x(1)*(x(1)+x(2)+x(3));+ m/ G( }* n% I
end
! ?* R" Q2 ^% s, _8 {3 [ |
|