├── OCFElagrange.m ├── OCFEode4.m ├── cfunocfe.m ├── funocfe.m ├── input_check.m ├── subroutine_check.m ├── test_with_multicontrol.m ├── test_with_pathway_constraint.m ├── test_without_pathway_constraint.m ├── ultimate.m └── 程序输入参数和函数的说明.docx /OCFElagrange.m: -------------------------------------------------------------------------------- 1 | function [dLa,La1,La,root]=OCFElagrange(tao); 2 | %La(i,j)=[Lai(0),Lai(sj)] 3 | %dLa(i,j)=[dLai(0),dLai(sj)] 4 | %La1(1,:)=La:(1); 5 | if length(tao)==1&tao>0; 6 | ps=legendre(tao); 7 | root=roots(ps); 8 | root=root';lis=[]; 9 | for k=1:tao; 10 | s=0; 11 | for i=1:tao; 12 | if root(k)>root(i);s=s+1;end; 13 | end; 14 | lis(s+1)=root(k); 15 | end; 16 | root=lis; 17 | T=[-1,root]; 18 | %T=[-1,root,1]; 19 | %li=2/(tao+1);T=-1:li:1-li; 20 | La1=[];La=[];dLa=[];Las=[];ep=1e-7; 21 | for k=1:length(T); 22 | Tk=T;Tk(k)=[];pk=poly(Tk);qk=polyval(pk,T(k)); 23 | La1=[La1,polyval(pk/qk,1)]; 24 | La=[La;polyval(pk/qk,T)]; 25 | Las=[Las;polyval(pk/qk,T+ep)]; 26 | dlagli=polyder(pk/qk); 27 | dLa=[dLa;polyval(dlagli,T)]; 28 | end; 29 | elseif size(tao,2)>=2&size(tao,1)==1; 30 | root=tao(2:end); 31 | T=tao; 32 | %T=[-1,root,1]; 33 | %li=2/(tao+1);T=-1:li:1-li; 34 | La1=[];La=[];dLa=[];Las=[];ep=1e-7; 35 | for k=1:length(T); 36 | Tk=T;Tk(k)=[];pk=poly(Tk);qk=polyval(pk,T(k)); 37 | La1=[La1,polyval(pk/qk,1)]; 38 | La=[La;polyval(pk/qk,T)]; 39 | Las=[Las;polyval(pk/qk,T+ep)]; 40 | dlagli=polyder(pk/qk); 41 | dLa=[dLa;polyval(dlagli,T)]; 42 | end; 43 | %[(Las-La)/ep,dLa] 44 | end; 45 | -------------------------------------------------------------------------------- /OCFEode4.m: -------------------------------------------------------------------------------- 1 | function [a,b,odex0,odeu]=OCFEode4(X,x0,h,m,fi,fix,fiu,lu); 2 | 3 | global Lt; 4 | if nargout==1;%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5 | X=reshape(X,length(x0),m); 6 | X=X'; 7 | odex=[]; 8 | lx=length(x0); 9 | for k=1:m; 10 | x=X(k,:); 11 | xt=2/h*Lt(:,k+1)'*[x0;X]; 12 | ode(k,:)=xt-fi(x); 13 | end; 14 | a=ode;a=a'; 15 | a=reshape(a,numel(a),1); 16 | elseif nargout==2;%%%%%%%%%%%%%%%%%%%%%%%%% 17 | X=reshape(X,length(x0),m); 18 | X=X'; 19 | odex=[]; 20 | lx=length(x0); 21 | for k=1:m; 22 | x=X(k,:); 23 | xt=2/h*Lt(:,k+1)'*[x0;X]; 24 | ode(k,:)=xt-fi(x); 25 | liodex=[]; 26 | for i=1:m; 27 | if i==k;odexi=Lt(i+1,k+1)*eye(lx)*2/h-fix(x);else odexi=Lt(i+1,k+1)*eye(lx)*2/h;end; 28 | liodex=[liodex,odexi]; 29 | end; 30 | odex=[odex;liodex]; 31 | end; 32 | a=ode;b=odex; 33 | a=a'; 34 | a=reshape(a,numel(a),1); 35 | elseif nargout==4; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 36 | X=reshape(X,length(x0),m); 37 | X=X'; 38 | odex=[]; 39 | lx=length(x0); 40 | for k=1:m; 41 | x=X(k,:); 42 | xt=2/h*Lt(:,k+1)'*[x0;X]; 43 | ode(k,:)=xt-fi(x); 44 | liodex=[]; 45 | for i=1:m; 46 | if i==k;odexi=Lt(i+1,k+1)*eye(lx)*2/h-fix(x);else odexi=Lt(i+1,k+1)*eye(lx)*2/h;end; 47 | liodex=[liodex,odexi]; 48 | end; 49 | odex=[odex;liodex]; 50 | li1=(k-1)*lx;odex0(li1+1:li1+lx,1:lx)=2/h*Lt(1,k+1)*eye(lx); 51 | odeu(li1+1:li1+lx,1:lu)=-fiu(x); 52 | end; 53 | a=ode;b=odex; 54 | a=a'; 55 | a=reshape(a,numel(a),1); 56 | end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 57 | -------------------------------------------------------------------------------- /cfunocfe.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liangyiting/dynamic-optimization/611d5edc9eb69cc9c9781a3b5e3be69f41b8851d/cfunocfe.m -------------------------------------------------------------------------------- /funocfe.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liangyiting/dynamic-optimization/611d5edc9eb69cc9c9781a3b5e3be69f41b8851d/funocfe.m -------------------------------------------------------------------------------- /input_check.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liangyiting/dynamic-optimization/611d5edc9eb69cc9c9781a3b5e3be69f41b8851d/input_check.m -------------------------------------------------------------------------------- /subroutine_check.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liangyiting/dynamic-optimization/611d5edc9eb69cc9c9781a3b5e3be69f41b8851d/subroutine_check.m -------------------------------------------------------------------------------- /test_with_multicontrol.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liangyiting/dynamic-optimization/611d5edc9eb69cc9c9781a3b5e3be69f41b8851d/test_with_multicontrol.m -------------------------------------------------------------------------------- /test_with_pathway_constraint.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liangyiting/dynamic-optimization/611d5edc9eb69cc9c9781a3b5e3be69f41b8851d/test_with_pathway_constraint.m -------------------------------------------------------------------------------- /test_without_pathway_constraint.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liangyiting/dynamic-optimization/611d5edc9eb69cc9c9781a3b5e3be69f41b8851d/test_without_pathway_constraint.m -------------------------------------------------------------------------------- /ultimate.m: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liangyiting/dynamic-optimization/611d5edc9eb69cc9c9781a3b5e3be69f41b8851d/ultimate.m -------------------------------------------------------------------------------- /程序输入参数和函数的说明.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liangyiting/dynamic-optimization/611d5edc9eb69cc9c9781a3b5e3be69f41b8851d/程序输入参数和函数的说明.docx --------------------------------------------------------------------------------