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

📄 newton.cpp

📁 用C++编的一些最优化作业中的程序,有Newton法,DFP法,共轭梯度法,单纯形法,内点法,外点法,内外点法,都能使用,我已经全部调试过了
💻 CPP
字号:
#include<iostream.h>
#include"matrix.h"//矩阵的有关运算
int const n1=2;
double f(double *x);//目标函数;
void g(double *x,double *y);//目标函数的梯度;
void main()
{
	int i;
	double x0[n1],x1[n1],g0[n1],g1[n1],H[n1][n1],h[n1][n1],p[n1],f0,f1,temp,e;
	x0[0]=0;x0[1]=0;e=0.01;H[0][0]=2;H[0][1]=-1;H[1][0]=-1;H[1][1]=2;
	f0=f(x0);
	g(x0,g0);
	matrix_inv(H,h);
	matrix_mul(h,g0,p);
	//matrix_minus(x0,p,x1);
	for(i=0;i<n1;i++)
		x1[i]=x0[i]-p[i];
	g(x1,g1);
	f1=f(x1);
	temp=g1[0]*g1[0]+g1[1]*g1[1];
	while(temp>e)
	{
		for(i=0;i<n1;i++)
		{
			x0[i]=x1[i];
			g0[i]=g1[i];
		}
	f0=f1;
    //matrix_inv(H,h);
	matrix_mul(h,g0,p);
	//matrix_minus(x0,p,x1);
	for(i=0;i<n1;i++)
		x1[i]=x0[i]-p[i];
	g(x1,g1);
	f1=f(x1);
	temp=g1[0]*g1[0]+g1[1]*g1[1];
	}
	cout<<"当X取X("<<x1[0]<<","<<x1[1]<<")时,Min(f(X)="<<f(x1)<<endl;
}
double f(double *x)
{
	return 60-10*x[0]-4*x[1]+x[0]*x[0]+x[1]*x[1]-x[0]*x[1];
}
void g(double *x,double *y)
{
	y[0]=2*x[0]-x[1]-10;
	y[1]=2*x[1]-x[0]-4;
}








⌨️ 快捷键说明

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