📄 hh.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 + -