📄 共轭.cpp[1]
字号:
#include <iostream.h>
#include <math.h>
float a1,a2,a3,a4,a5; //表达式参数
float T=0.000001;
void main()
{
float x[2]; //变量x1,x2
float a[2][2]; //A矩阵
float buchang; //a
float b; //a
float m; //保存每次迭代后表达式的值
float p[1][2];
float g[1][2];
float pt[2][1]; //p的转置
float gt[2][1]; //g的转置
float f(float x[]); //计算表达式的值
float dx(float (*g)[2],float *x ); //求导,计算g
float t(float (*pt)[1] ,float (*p)[2]); //计算转置矩阵
float multiply(float g[1][2],float gt[2][1],float p[1][2],float pt[2][1],float a[2][2]);
cout<<"Put in numbers:"<<endl;
cin>>a1>>a2>>a3>>a4>>a5;
cout<<"Put in start point: "<<endl;
cin>>x[0]>>x[1];
a[0][1]=2*a1;
a[0][1]=a3;
a[0][1]=a3;
a[2][2]=2*a2;
dx(g,x);
p[0][0]=-g[0][0];
p[0][1]=-g[0][1];
t(pt,p);
buchang=multiply(g,gt,p,pt,a);
x[0]=x[0]+buchang*p[0][0];
x[1]=x[1]+buchang*p[0][1];
while(1)
{
dx(g,x);
b=multiply(g,gt,p,pt,a);
p[0][0]=-g[0][0]+b*p[0][0];
p[0][1]=-g[0][1]+b*p[0][1];
buchang=multiply(g,gt,p,pt,a);
x[0]=x[0]+buchang*p[0][0];
x[1]=x[1]+buchang*p[0][1];
if(fabs(f(x)-m)<T) break;
m=f(x);
cout<<"x1,x2 is: ("<<x[0]<<","<<x[1]<<")"<<endl;
cout<<f(x)<<endl;
}
cout<<"The min point is: ("<<x[0]<<" , "<<x[1]<<")"<<endl;
cout<<"The min value is: "<<f(x)<<endl;
}//
float f(float x[])
{
return a1*x[0]*x[0]+a2*x[1]*x[1]+a3*x[0]*x[1]+a4*x[0]+a5*x[1];
}//
float dx(float (*g)[2],float *x )
{
g[0][0]=2*a1*x[0]+a3*x[1]+a4;
g[0][1]=2*a2*x[1]+a3*x[0]+a5;
return 0;
}//
float t(float (*pt)[1] ,float (*p)[2])
{
int i,j,plen,pdim;
pdim=1;
plen=2;
for(i=0;i<pdim;i++)
for(j=0;j<plen;j++)
{
pt[j][i]=p[i][j];
}
return 0;
}//
float multiply(float g[1][2],float gt[2][1],float p[1][2],float pt[2][1],float a[2][2])
{
float i,j;
i=gt[0][0]*g[0][0]+gt[1][0]*g[0][1];
j=(pt[0][0]*a[0][0]+pt[1][0]*a[0][1])*p[0][0]+(pt[0][0]*a[1][0]+pt[1][0]*a[1][1])*p[0][1];
return i/j;
}//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -