机械优化设计 变尺度法 c语言程序

来源:百度知道 编辑:UC知道 时间:2024/05/20 12:09:40
有人会弄吗?帮个忙。

计算 f(x1,x2)=x1^2+2*x2^2-4*x1-2*x1*x2 的无约束极值,初始点x0=[1,1]。

/*
tt ---- 一维搜索初始步长
ff ---- 差分法求梯度时的步长
ac ---- 终止迭代收敛精度
ad ---- 一维搜索收敛精度
n ----- 设计变量的维数
xk[n] -- 迭代初始点
*/

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<conio.h>

#define tt 0.01
#define ff 1.0e-6
#define ac 1.0e-6
#define ad 1.0e-6
#define n 2

double ia;

double fny(double *x)
{
double x1=x[0],x2=x[1];

double f;
f=x1*x1+2*x2*x2-4*x1-2*x1*x2;

return f;
}

double * iterate(double *x,double a,double *s)
{
double *x1;
int i;
x1=(double *)malloc(n*sizeof(double));
for(i=0;i<n;i++)
x1[i]=x[i]+a*s[i];
return x1;
}

double func(double *x,double a,double *s)
{
double *x1;
double f;
x1=iterate(x,a,s);
f=fny(x1);
return f;
}