|  | 
 
| 
关于matlab优化求解的问题请教大家;程序报错截图如下,我分析报错的原因是迭代点(s,d1)改变时,(expect1,expect2)未改变,具体问题描述如下:
x
EDA365欢迎您登录!您需要 登录 才可以下载或查看,没有帐号?注册  ( S& F  f- I  x1.expect1,expect2是s,d1的函数,当fsolve函数按照优化算法找到新的点(s',d1')时,我的问题里时需要expect1,expect2也变化,这样fsolve的目标函数就也变化了;5 f) w! j! B! n% A7 L
 2.根据上述1的描述,这个优化问题是否应该将(expect1,expect2)也纳入优化求解目标中去?这样该如何实现?
 1 \" O- b7 S3 Y/ {) M1 ~关于这样的编程问题思考了很久也没有编程思路,请求大家给予指导,我在代码中相应部分也对问题进行了表述,如果我的问题没有表述清楚,十分欢迎追问,先谢过大家。
 6 V, z* e. `! h' c! @clc;5 y/ f% @% q6 \( j  H% K
 clear all;' @$ t9 u/ V! [6 I
 %%%  赋值外生给定的参数  %%%
 7 b: ]% s/ |8 c! E2 ~  @wn=0.3;; a% b: P% |) |/ [  ?0 T2 P
 wt=1-wn;
 5 Q. o: q* W) P" ^/ K! U! Ir=0.05;! c" C* n7 Z, F& `6 S. h9 S
 beta=1/(1+r);$ M0 }! E7 U1 W0 F
 epislon=0.05;* O: H6 ]" l0 L( O) x
 phi=0.3;
 ; }; Z; {. r2 L! D" Ey1=1;3 t; ]" i" S* m  ]! w$ U% l/ P
 yn2=1;
 6 F1 `. F) s8 X% _! \" Ly2mean=1;
 ' r& j" Z& f$ V4 H& T+ Uy3=1;
 / O$ _" {, J! l. R/ V. r. Stheta=0.9;
 / p9 b5 q' z9 K0 k3 y8 t4 i; ?7 B0 ?( u7 d( [9 a9 X
 % 赋值(y2,s,d1) # D* [$ t- [' K9 U5 Q' x
 y2=0.95:0.01:1.05;% I) z3 S/ x' x2 `2 F* X# E
 s=0.1; %给s,d1的任意初值' J2 q( c/ \  f/ h1 j3 o; {+ H4 E
 d1=0.1;
 / ]1 J2 R8 X+ z9 S; j3 O8 c( ox0 =[s,d1];
 ! B- l1 B/ j6 B2 z7 j- f/ M4 H$ s2 n, {. |8 t: L" \
 %在这个for循环里得到均值expect1,expect2,改变(s,d1),均值expect1,expect2也改变! S+ J0 b4 \7 u# Q! H# W
 % Z" u, j* q" H; E0 l
 for i=1:1:length(y2);) P) l0 w4 o$ g& T
 s=0.01;4 D7 P3 [- R. h% G
 d1=0.1;
 4 M3 d/ g/ a' M6 T$ z
 y1 [. W& d0 \& p. w$ \* o%%% 判断是否紧约束 %%%
 h6 S8 _- m$ {) ~' Q9 }standard(i)=y2(i)*((beta/(1+beta)+phi/wt/(1-phi*wn/wt))-y3/((1+beta)*(1+r)))/(beta/(1+beta)+phi*wn/wt/(1-phi*wn/wt));0 g. k9 b! B" r2 |
 check(i)=d1/(1-s);* M; O% a: E% l$ M6 Q# R, Z
 if check(i)>standard(i); k9 i( J* D, Q9 [4 a% F5 j( w
 ct2(i)=((1-s)*y2(i)-d1+phi*(1-s)*y2(i))/(1-phi*wn/wt);6 t( D6 U& V8 z  G9 q
 d2(i)=phi*(1+r)*(wn/wt*ct2(i)+(1-s)*y2(i));; U' u* r8 F% m4 H& {# [5 f# G' G
 ct3(i)=(1-s)*y3-d2(i);
 ! \& K/ h& y% E' n; d    mu(i)=wt/((1-s)*y2(i)-d1+d2(i)/(1+r))-beta*wt*(1+r)/((1-s)*y3-d2(i));
 5 ^) c9 S0 D5 x6 O3 D1 M* l1 X( r$ P
 else
 % l3 x' e0 }1 J4 J9 A    ct2(i)=((1-s)*y2(i)-d1+(1-s)*y3/(1+r))/(1+beta);$ G, i0 _2 ]; P/ e. M- D3 Y" f
 d2(i)=((1-s)*y3-beta*(1+r)*(1-s)*y2(i)+beta*(1+r)*d1)/(1+beta);
 0 R" O7 [% F6 m, U3 l; N0 u    ct3(i)=(1-s)*y3-d2(i);! b& o. W$ o8 K* n% y9 `. W
 ; @. P8 @! K& c2 `; s# t+ j' U+ Q, O
 mu(i)=0;
 : z5 h, D# E' ^+ F& Tend
 # a: q7 N" I. l" W( fe1(i)=wt/ct2(i);%每给定一个y2(i),计算得到一个e1(i),e2(i)% e* W5 Y4 Y7 |- d  Q
 e2(i)=wt/ct2(i)*y2(i)+mu(i)*phi*y2(i)+beta*wt/ct3(i)*y3;
 8 f& E( c" Q2 V( Y
 0 G& M& C. @" k+ U7 r4 X%%%求均值%%%
 ( W2 @4 H6 D! q# r" J6 u* ?expect1=mean(e1(1,
  ); 2 K3 K! q+ K* @" W# j  }% }expect2=mean(e2(1,
  ); : ]% y4 ?7 l$ g) H: m' l1 lend- W1 r# E5 f7 F- x: }: N$ Y
 
 & ^' q; @0 F' v+ [%我的问题中,expect1,expect2实质上是s,d1的函数, l' `; n& i2 O5 G" g
 %在用fsolve优化求解的时候,每迭代一个新的(s,d1),都应该运行一次上述for这个循环,得到新的expect1、expect2再进行优化求解,
 ! ^0 ~: t( j$ v; {. [, `6 t  X%也即(s,d1)变化时,expect1、expect2也要变化,如此fsolve的目标函数也变化
 % i; ^; l5 O: P& r; Y) Q' b%这样一个问题没有编程思路,请求大家给予指导,如果我的问题没有表述清楚,十分欢迎追问,谢谢。  L9 n6 A8 E6 H0 s6 I8 Z( l
 # M" S5 R% l. h3 B" A: ?
 [x,fval,exitflag,output,]=fsolve(@(x)foc(x,expect1,expect2),x0);) n7 ~2 P6 {5 s
 
 " y/ m7 |8 q/ m3 U# f* Vfunction f=foc(x,expect1,expect2)% P; f) \" F8 |7 }
 wn=0.3;) l) @7 L: O) ?$ U. z0 o
 wt=1-wn;
 ! D, m/ D$ y0 O% n( Jr=0.05;# d' |' d: z5 h/ w6 S$ U! W
 beta=1/(1+r);: h, o, Q! U  B/ b- N7 j5 _# h$ E7 `
 epislon=0.05;0 `: T3 p% \1 _8 ~+ e8 Y
 phi=0.3;
 & q2 Y8 @% B8 _; u' G2 {y1=1;! P# {* S, ?6 |, m; V/ i
 yn2=1;3 O/ g) _2 u2 p0 P
 y2mean=1;
 # r- R$ S  t3 ]: i- G/ B2 ky3=1;
 0 b$ ^+ G& K" l) y" `. Ctheta=0.9;
 5 e8 `8 l( Z% W1 ms=0.01;( G4 Y" b9 C. c/ H" S8 L, O8 t/ E' [
 d1=0.1;
 * B1 D% v% `0 M; |ct1=s*(1-theta)*y1+d1/(1+r);% ct1也与s,d1相关;
 % L$ S& }! f. t" C  W, P2 {1 O8 T3 U, t4 Y
 f(1)=wt/ct1-beta*(1+r)*expect1;: {4 W# u) _% d5 j/ E+ }5 c$ X
 f(2)=wt/ct1*y1*(1-theta)-beta*expect2;+ y* i5 R& D6 b( g; J/ G
 end/ ]. ~/ U5 E4 C2 x9 O& s
 
    * c- o4 J4 d% G$ B # k' n/ x, r5 f7 v' ^
 
 | 
 |