一.复合形法 1 .程序 //机械优化设计.约束优化.复合形法 //输入值选择 n=2,k=4,x1=(9,9),a=(5,6),b(10,20) #include #include #include #include #define E0 1e-5 //复合形法收敛控制精度 double **TwoArrayAlloc(int,int); //申请矩阵空间 double f(double *); //目标函数 double *g(double *); //约束函数 bool judge_feasibility(double *); //可行点的判断 int main() { int n,k; int i,j,k1; int l; int cnt=0; //迭代次数 double temp; double delta; //收敛条件 double alpha; //反射系数 srand((unsigned)time(NULL)); printf("请输入目标函数的维数 n:"); //输入已知数据 scanf("%d",&n); printf("请输入复合形的顶点数 k:"); scanf("%d",&k); double **x=TwoArrayAlloc(k,n); //存放复合形顶点 double *y=(double *)calloc(k,sizeof(double)); //存放目标函数值 double *p=(double *)calloc(3,sizeof(double)); //存放约束函数值 double *a=(double *)calloc(n,sizeof(double)); //存放设计变量的下限 double *b=(double *)calloc(n,sizeof(double)); //存放设计变量的上限 double *x_c=(double *)calloc(n,sizeof(double)); //存放可行点中心 double *x_r=(double *)calloc(n,sizeof(double)); //存放最坏点的反射点 printf("请输入选定的第一个可行点 x1(包含%d 个数):",n); for(i=0;i