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

📄 hh.cpp

📁 解决无约束非线性规划问题的直接法
💻 CPP
字号:
#include<iostream.h>
#include<math.h>
#define n 2
#define m 6
double p[n+1][m]={{5,-10,1,5,1,-2},{4,2,2,0,0,1},{0,1,0,2,0,0}};

double funvalue(double x[n])//计算函数值
{
 double f=0,temp;
 int i,j,k;
 for(i=0;i<m;i++)
 {
   temp=p[0][i];
   for(k=1;k<=n;k++)
     for(j=1;j<=p[k][i];j++)
		 temp=temp*x[k-1];
   f=f+temp;
 }
 return f;
}
/*void main()
{double a;
double x[2]={1,0};
a=funvalue(x);cout<<a;}*/

void fun(double t,double e1,double d,double s)
{
	double y[n],a[n],b[n],x[n]={2,0},e[n][n]={{1,0},{0,1}},c[2],p,q,g1,g2;
 int i,j,k;
 cout<<"  "<<"请输入初始迭代点x[]的值:"<<endl<<"  ";
 for(i=0;i<n;i++)
	 cin>>x[i];
 for(i=0;i<n;i++)
	 y[i]=x[i];
 cout<<"  "<<"请输入坐标方向向量矩阵e[n][n]:"<<endl<<"  ";
 for(j=0;j<n;j++)
  for(i=0;i<n;i++)
	cin>>e[j][i];
 k=1;
 while(t>=e1)
 {
  for(j=0;j<n;j++)
  {
   for(i=0;i<n;i++)
   {
	a[i]=y[i]+t*e[j][i];
	b[i]=y[i]-t*e[j][i];
   }
   p=funvalue(a);q=funvalue(b);
   g1=funvalue(x);g2=funvalue(y);
   if(p<g2)
    for(i=0;i<n;i++)
	  y[i]=a[i];
   if(q<g2)
     for(i=0;i<n;i++)
	   y[i]=b[i];
  }
 if(g2<g1)
 {
  for(i=0;i<n;i++)
  {
   c[i]=x[i];
   x[i]=y[i];
   y[i]=x[i]+d*(x[i]-c[i]);
  }
 }
 else
 {
  t=s*t;
  for(i=0;i<n;i++)
  {
	y[i]=x[i];x[i]=x[i];
  }
 }
 k++;
 //for(i=0;i<n;i++)
 //{cout<<x[i];
 //cout<<endl;}
}
cout<<"  "<<"迭代次数为:"<<k<<endl;
cout<<"  "<<"请输出最优解x的值:"<<endl;
for(i=0;i<n;i++)
  cout<<"  "<<x[i]<<endl;
}

void main()
{
 double theta=0.5;//初始步长t,
 double s=0.1,double arf=1;//m加速因子,e1允许误差
 double beta=0.5;//缩减率
 int i;
 cout<<"  "<<"请输入允许误差 s:"<<endl;
 cout<<"  ";
 cin>>s;
 fun(theta,s,arf,beta);
}

⌨️ 快捷键说明

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