model_6dof_12_opt_sqp_vert_up_cu_ruliu_x16()
 Iter  Func-count            Fval   Feasibility   Step Length       Norm of   First-order  
                                                                       step    optimality
    0          19    1.000000e+06     0.000e+00     1.000e+00     0.000e+00     0.000e+00  
Optimization completed: The final point is the initial point.
The first-order optimality measure, 0.000000e+00, is less than options.OptimalityTolerance =
1.000000e-06, and the maximum constraint violation, 0.000000e+00, is less than
options.ConstraintTolerance = 1.000000e-06.
=== Optimized Gains ===
k4 = 0.0000
 k5 = 0.0000
 k7 = 0.0000
 k8 = 0.0000
 k9 = 0.0000
 k1 = 0.0000
 k2 = 0.0000
 k6 = 0.0000
 k3 = 0.0000
function model_6dof_12_opt_sqp_vert_up_cu_ruliu_x16()
    x0 = [0, 0, 0, 0, 0, 0, 0, 0, 0];
    lb = [0, 0, 0, 0, 0, 0, 0, 0, 0];
    ub = [4, 4, 4, 4, 4, 4, 4, 4, 4];
    options = optimoptions('fmincon', ...
        'Display', 'iter-detailed', ...
        'MaxFunctionEvaluations', 1e5, ...
        'MaxIterations', 1000, ...
        'OptimalityTolerance', 1e-6, ...
        'StepTolerance', 1e-10, ...
        'FunctionTolerance', 1e-6, ...
        'UseParallel', false, ...
        'FiniteDifferenceType', 'central', ...
        'FiniteDifferenceStepSize', 1e-6);       
    [opt_gains, ~] = fmincon(@cost_function, x0, [], [], [], [], lb, ub, [], options);
    fprintf('\n=== Optimized Gains ===\n');
    fprintf('k4 = %.4f\n k5 = %.4f\n k7 = %.4f\n k8 = %.4f\n k9 = %.4f\n k1 = %.4f\n k2 = %.4f\n k6 = %.4f\n k3 = %.4f\n', opt_gains);
    global k4 k5 k7 k8 k9 k1 k2 k6 k3
    k4 = opt_gains(1); k5 = opt_gains(2);
    k7 = opt_gains(3); k8 = opt_gains(4); k9 = opt_gains(5);
    k1 = opt_gains(6); k2 = opt_gains(7);
    k6 = opt_gains(8); k3 = opt_gains(9);    
    global x1d x2d x3d x6d x9d x10d x12d x4d x5d x7d x8d
    [t, X] = simulate_rocket();
function J = cost_function(gains)
    global k4 k5 k7 k8 k9 k1 k2 k6 k3 x1d x2d x3d x6d x9d x10d x12d x4d x5d x7d x8d
    k4 = gains(1); k5 = gains(2); k7 = gains(3); k8 = gains(4); k9 = gains(5);
    k1 = gains(6); k2 = gains(7);
    k6 = gains(8); k3 = gains(9);
        [~, X] = simulate_rocket();
function [t, X] = simulate_rocket()
    global md xcmd ic jxd jyd jzd df
    global k4 k5 k7 k8 k9 k1 k2 k6 k3 x1d x2d x3d x6d x9d x10d x12d x4d x5d x7d x8d yI
        [t, X] = ode45(@(t,X) model6dof(X,t), tspan, X0); 
function [dx]=model6dof(X,t)
    global k4 k5 k7 k8 k9 k1 k2 k6 k3 x1d x2d x3d x6d x9d x10d x12d x4d x5d x7d x8d    
    A(2,1) = -CFI*STE+SFI*SPS*CTE;
    A(2,2) =  CFI*CTE+SFI*SPS*STE;
    A(3,1) =  SFI*STE+CFI*SPS*CTE;
    A(3,2) = -SFI*CTE+CFI*SPS*STE;
    AI=[A(1,1) A(1,2) A(1,3);...
    Va=sqrt(x1b^2+x2b^2+x3b^2);     
    p=0.699*exp(-0.00009*x11);      
    rho=p/(0.1921*(T+273.1));       
    uv = k7*desc*(x1*AI(1,1)+x2*AI(1,2)+x3*AI(1,3)); 
    ux = k8*desc*hx+k9*desc*Vxt; 
    uy = k8*desc*hy+k9*desc*Vyt; 
    uz = k8*desc*hz+k9*desc*Vzt; 
    u3 = 1.*ut0-1*uv-ux*AI(1,1)-uy*AI(1,2)-uz*AI(1,3);                   
    upi = un0-ux*AI(2,1)-uy*AI(2,2)-uz*AI(2,3)-1*k4*(x9-x9d)-k3*(x6-x6d); 
    u4 = -1.*k2*(x7-x7d)-k1*(x4-x4d);                                    
    [yI,d1,d2,d3,d4]= bloc2(x1e,x1f,xxa,xxb);
    dlt=(del(2)+del(4)-del(1)-del(3))/2;
    uya = -1.*k6*(x8-x8d)-k5*(x5-x5d)+ux*AI(3,1)+uy*AI(3,2)+uz*AI(3,3);
    C1=[cos(x17) 0 -sin(x17); 
    x4to6dot=[pdot;qdot;rdot];
    x7dd=p+q*sin(fi)*tan(ps)+r*cos(fi)*tan(ps);   
    x8dd=q*cos(fi)-r*sin(fi);                     
    x9dd=q*sin(fi)*sec(ps)+r*cos(fi)*sec(ps);     
    x7to9dot=[x7dd;x8dd;x9dd];         
function CD = dragcoefvar(Re)
    f1=(24.*Re^(-1))^(10)+(21.*Re^(-0.67))^(10)+(4.*Re^(-0.33))^(10)+0.4^(10);
    f2=1./((0.148*Re^(0.11))^(-10)+0.5^(-10));
    f3= (1.57d8*Re^(-1.625))^(10);
    f4=1./((6.d-17*Re^(2.63))^(-10)+0.2^(-10));
    CD=(1./((f1+f2)^(-1)+f3^(-1))+f4)^(0.1);
function [xcm,jx,jy,jz] = meca(m)
    global md xcmd jxd jyd jzd
    xcm=interp1(mid,xcmd,ami,'pchip'); 
    jx= interp1(mid,jxd,ami,'pchip');  
    jy= interp1(mid,jyd,ami,'pchip');  
    jz= interp1(mid,jzd,ami,'pchip');  
function [y,d1,d2,d3,d4] = bloc2(x,xd,xa,xb)
function y = ymod(x, xd, a, b, ymax)