⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 robota.c

📁 sqp程序包。用sqp算法实现非线性约束的优化求解
💻 C
📖 第 1 页 / 共 2 页
字号:
/*              compute the gradient of the i-th inequality constraint          *//*          not necessary for bounds, but constant gradients must be set        *//*                      here e.g. using dcopy from a data-field                 *//* **************************************************************************** */void egradg(INTEGER i,DOUBLE x[],DOUBLE gradx[]) {    #define  X extern    #include "o8fuco.h"    #undef   X    static INTEGER ip,k,j;    static DOUBLE  sum,sum1,sum2;        if ( gunit[1][i+nh] != 1 ) cgres[i+nh] = cgres[i+nh]+1;        ip   = (i-1)/18+1;    k    = i-18*(ip-1);    sum  = 0.e0;    sum1 = 0.e0;    sum2 = 0.e0;    for (j = 1 ; j <= n ; j++) {        sum  = sum +vi [ip][j]*x[j];        sum1 = sum1+vi1[ip][j]*x[j];        sum2 = sum2+vi2[ip][j]*x[j];    }    switch (k) {    case 1:    case 2:        for (j = 1 ; j <= n ; j++) {            gradx[j] = c11*vi[ip][j];        }        return;    case 3:        for (j = 1 ; j <= n ; j++) {            gradx[j] = 3.e0*c12*pow(sum,2)*vi[ip][j]-(v12[ip]*vi[ip][j]                      -v11[ip]*vi1[ip][j]);        }        return;    case 4:        for (j = 1 ; j <= n ; j++) {            gradx[j] = 3.e0*c12*pow(sum,2)*vi[ip][j]+(v12[ip]*vi[ip][j]                      -v11[ip]*vi1[ip][j]);        }        return;    case 5:        for (j = 1 ; j <= n ; j++) {            gradx[j] = 5.e0*c13*pow(sum,4)*vi[ip][j]-(2.e0*v13[ip]*sum*                      vi[ip][j]-3.e0*v12[ip]*(sum1*vi[ip][j]+sum*vi1[ip][j])                      +6.e0*v11[ip]*sum1*vi1[ip][j]+v11[ip]*                      (sum2*vi[ip][j]+sum*vi2[ip][j]));        }        return;    case 6:        for (j = 1 ; j <= n ; j++) {            gradx[j] = 5.e0*c13*pow(sum,4)*vi[ip][j]+(2.e0*v13[ip]*sum*                      vi[ip][j]-3.e0*v12[ip]*(sum1*vi[ip][j]+sum*vi1[ip][j])                      +6.e0*v11[ip]*sum1*vi1[ip][j]+v11[ip]*                      (sum2*vi[ip][j]+sum*vi2[ip][j]));        }        return;    case 7:    case 8:        for (j = 1 ; j <= n ; j++) {            gradx[j] = c21*vi[ip][j];        }        return;    case 9:        for (j = 1 ; j <= n ; j++) {            gradx[j] = 3.e0*c22*pow(sum,2)*vi[ip][j]-(v22[ip]*vi[ip][j]                      -v21[ip]*vi1[ip][j]);        }        return;    case 10:        for (j = 1 ; j <= n ; j++) {            gradx[j] = 3.e0*c22*pow(sum,2)*vi[ip][j]+(v22[ip]*vi[ip][j]                      -v21[ip]*vi1[ip][j]);        }        return;    case 11:        for (j = 1 ; j <= n ; j++) {            gradx[j] = 5.e0*c23*pow(sum,4)*vi[ip][j]-(2.e0*v23[ip]*sum*                      vi[ip][j]-3.e0*v22[ip]*(sum1*vi[ip][j]+sum*vi1[ip][j])                      +6.e0*v21[ip]*sum1*vi1[ip][j]+v21[ip]*                      (sum2*vi[ip][j]+sum*vi2[ip][j]));        }        return;    case 12:        for (j = 1 ; j <= n ; j++) {            gradx[j] = 5.e0*c23*pow(sum,4)*vi[ip][j]+(2.e0*v23[ip]*sum*                      vi[ip][j]-3.e0*v22[ip]*(sum1*vi[ip][j]+sum*vi1[ip][j])                      +6.e0*v21[ip]*sum1*vi1[ip][j]+v21[ip]*                      (sum2*vi[ip][j]+sum*vi2[ip][j]));        }        return;    case 13:    case 14:        for (j = 1 ; j <= n ; j++) {            gradx[j] = c31*vi[ip][j];        }        return;    case 15:        for (j = 1 ; j <= n ; j++) {            gradx[j] = 3.e0*c32*pow(sum,2)*vi[ip][j]-(v32[ip]*vi[ip][j]                      -v31[ip]*vi1[ip][j]);        }        return;    case 16:        for (j = 1 ; j <= n ; j++) {            gradx[j] = 3.e0*c32*pow(sum,2)*vi[ip][j]+(v32[ip]*vi[ip][j]                      -v31[ip]*vi1[ip][j]);        }        return;    case 17:        for (j = 1 ; j <= n ; j++) {            gradx[j] = 5.e0*c33*pow(sum,4)*vi[ip][j]-(2.e0*v33[ip]*sum*                      vi[ip][j]-3.e0*v32[ip]*(sum1*vi[ip][j]+sum*vi1[ip][j])                      +6.e0*v31[ip]*sum1*vi1[ip][j]+v31[ip]*                      (sum2*vi[ip][j]+sum*vi2[ip][j]));        }        return;    case 18:        for (j = 1 ; j <= n ; j++) {            gradx[j] = 5.e0*c33*pow(sum,4)*vi[ip][j]+(2.e0*v33[ip]*sum*                      vi[ip][j]-3.e0*v32[ip]*(sum1*vi[ip][j]+sum*vi1[ip][j])                      +6.e0*v31[ip]*sum1*vi1[ip][j]+v31[ip]*                      (sum2*vi[ip][j]+sum*vi2[ip][j]));        }        return;    }}DOUBLE f(DOUBLE t) {    return pow(t,3)*((6.e0*t-15.e0)*t+10.e0);}DOUBLE f1(DOUBLE t) {    return 30.e0*t*t*((t-2.e0)*t+1.e0);}DOUBLE f2(DOUBLE t) {    return 60.e0*t*((2.e0*t-3.e0)*t+1.e0);}DOUBLE f3(DOUBLE t) {    return (360.e0*t-360.e0)*t+60.e0;}DOUBLE th11(DOUBLE t) {    DOUBLE f1(DOUBLE t);        return 1.5e0*f1(t);}DOUBLE th12(DOUBLE t) {    DOUBLE f2(DOUBLE t);        return 1.5e0*f2(t);}DOUBLE th13(DOUBLE t) {    DOUBLE f3(DOUBLE t);        return 1.5e0*f3(t);}DOUBLE th21(DOUBLE t) {    DOUBLE f(DOUBLE t);    DOUBLE f1(DOUBLE t);        return -.5e0*(cos(4.7e0*f(t))*4.7e0*f1(t));}DOUBLE th22(DOUBLE t) {    DOUBLE f(DOUBLE t);    DOUBLE f1(DOUBLE t);    DOUBLE f2(DOUBLE t);    return -.5e0*(-sin(4.7e0*f(t))*pow(4.7e0*f1(t),2)+cos(4.7e0*f(t))*    4.7e0*f2(t));}DOUBLE th23(DOUBLE t) {    DOUBLE f(DOUBLE t);    DOUBLE f1(DOUBLE t);    DOUBLE f2(DOUBLE t);    DOUBLE f3(DOUBLE t);    return -.5e0*(-cos(4.7e0*f(t))*pow(4.7e0*f1(t),3)-sin(4.7e0*f(t))*    3.e0*pow(4.7e0,2)*f1(t)*f2(t)+cos(4.7e0*f(t))*f3(t)*4.7e0);}DOUBLE th31(DOUBLE t) {    DOUBLE f1(DOUBLE t);    return -1.3e0*f1(t);}DOUBLE th32(DOUBLE t) {    DOUBLE f2(DOUBLE t);    return -1.3e0*f2(t);}DOUBLE th33(DOUBLE t) {    DOUBLE f3(DOUBLE t);    return -1.3e0*f3(t);}DOUBLE phil(INTEGER i, DOUBLE t) {    #define  X extern    #include "o8fuco.h"    #undef   X        static DOUBLE  h;    static INTEGER k;        h = 1.e0/(DOUBLE)(n-1);    k = t/h+1.e-6+1;    if ( i <= k-2 || i >= k+3 ) {        return 0.e0;    } else {        switch (k-i+3) {        case 1:             return pow(t-(DOUBLE)(k-1)*h,3)/6.e0/pow(h,3);        case 2:            return 1.e0/6.e0+(t-(DOUBLE)(k-1)*h)*.5e0/h                    +pow(t-(DOUBLE)(k-1)*h,2)*.5e0/pow(h,2)                    -pow(t-(DOUBLE)(k-1)*h,3)*.5e0/pow(h,3);        case 3:            return 1.e0/6.e0+((DOUBLE)(k)*h-t)*.5e0/h                    +pow((DOUBLE)(k)*h-t,2)*.5e0/pow(h,2)                    -pow((DOUBLE)(k)*h-t,3)*.5e0/pow(h,3);        case 4:            return pow((DOUBLE)(k)*h-t,3)/6.e0/pow(h,3);        }    }    return 0.;}DOUBLE phil1(INTEGER i, DOUBLE t) {    #define  X extern    #include "o8fuco.h"    #undef   X        static INTEGER k;    static DOUBLE  h;        h = 1.e0/(DOUBLE)(n-1);    k = t/h+1.e-6+1;    if ( i <= k-2 || i >= k+3 ) {        return 0.e0;    } else {        switch (k-i+3) {        case 1:            return pow(t-(DOUBLE)(k-1)*h,2)/2.e0/pow(h,3);        case 2:            return .5e0/h+(t-(DOUBLE)(k-1)*h)/pow(h,2)                    -pow(t-(DOUBLE)(k-1)*h,2)*1.5e0/pow(h,3);        case 3:            return -.5e0/h-((DOUBLE)(k)*h-t)/pow(h,2)                    +pow((DOUBLE)(k)*h-t,2)*1.5e0/pow(h,3);        case 4:            return -pow((DOUBLE)(k)*h-t,2)/2.e0/pow(h,3);        }    }    return 0.;}DOUBLE phil2(INTEGER i, DOUBLE t) {    #define  X extern    #include "o8fuco.h"    #undef   X        static INTEGER k;    static DOUBLE  h;        h = 1.e0/(DOUBLE)(n-1);    k = t/h+1.e-6+1;    if ( i <= k-2 || i >= k+3 ) {        return 0.e0;    } else {        switch (k-i+3) {        case 1:            return (t-(DOUBLE)(k-1)*h)/pow(h,3);        case 2:            return 1.e0/pow(h,2)-(t-(DOUBLE)(k-1)*h)*3.e0/pow(h,3);        case 3:            return 1.e0/pow(h,2)-((DOUBLE)(k)*h-t)*3.e0/pow(h,3);        case 4:            return ((DOUBLE)(k)*h-t)/pow(h,3);        }    }    return 0.;}/* **************************************************************************** *//*                        user functions (if bloc == TRUE)                      *//* **************************************************************************** */void eval_extern(INTEGER mode) {    #define  X extern    #include "o8comm.h"    #include "o8fint.h"    #undef   X    #include "o8cons.h"    return;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -