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

📄 tidofa.c

📁 运筹学中的解非线性规划问题的一种方法,zoutendijk可行方向法
💻 C
字号:
#include <stdio.h>

double f(double g, double h)
{
return (2.0*g*g +2.0*h*h -2.0*g*h -4.0*g -6.0*h);
}


double fx(double g, double h)
{
return (2.0*g - 2.0*h - 4);
}

double fy(double g, double h)
{
	return (-2.0*g + 2.0*h - 6);
}

//double fz(double g, double h,double i)


/*

*/ 
double lineSearch(double XK[2],double dk[2],double max)
{
double x[100];
//double y[100];
//double z[100];

int i=0;

double p;//=0.01;//步长
if(max<0.0)
	p = 0.01;
else if (max >1.0)
    p = 0.01;
else
    p = max * 0.001;


//初始值
x[0] = 0;
//y[0] = 0;
//z[0] = z0;

for(i=0;i<99;i++)//迭代100次
{
	//x[i + 1] = x[i] - p * fx(x[i], y[i]);
	//y[i + 1] = y[i] - p * fy(x[i], y[i]);
	//z[i + 1] = z[i] - p * fz(x[i], y[i],z[i]);
	x[i+1] = x[i] - p * ( fx(XK[0]+x[i]*dk[0],XK[1]+x[i]*dk[1])*dk[0]+ fy(XK[0]+x[i]*dk[0],XK[1]+x[i]*dk[1])*dk[1]);
	
	
	if(max >0.0)
	{
		if(x[i+1] > max)
		{
			if(f(XK[0]+x[i]*dk[0],XK[1]+x[i]*dk[1]) < f(XK[0]+max*dk[0],XK[1]+max*dk[1]))
				x[99] = x[i];
			else
				x[99] = max;
			break;
		}
	}
	
}


//printf("%f,%f,%f",x[99],y[99],f(x[99],y[99]));
printf("lamata:%f,min(f(XK+lamata*dk)):%f",x[99],f(XK[0]+x[99]*dk[0],XK[1]+x[99]*dk[1]));
return f(XK[0]+x[99]*dk[0],XK[1]+x[99]*dk[1]);
}

/*
void main()
{
	double XK[2]={1.0,-1.0};double dk[2]={1.0,1.0};double max =5.0;
    lineSearch(XK, dk, max);
	return;
}
*/

⌨️ 快捷键说明

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