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

📄 共轭.cpp[1]

📁 共轭方向法
💻 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 + -