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

📄 alculate.cpp

📁 一个最小二乘法的拟合数据的小程序
💻 CPP
字号:
// alculate.cpp: implementation of the Calculate class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Zerchfa.h"
#include "alculate.h"
#include "ZerchfaDlg.h"
#include "LEquations.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

Calculate::Calculate()
{
	errosquare=0.0;
	cdegree=1;
	cnodenum=5;

}

Calculate::~Calculate()
{

}

void Calculate::SetDegree(int i)
{
	cdegree = i;
}
void Calculate::SetNodenum(int i)
{
	cnodenum = i;
}
double Calculate::basefunction(double x,int power)
{
	switch(power) {
	case 0:
		return 1;
		break;
	case 1:
		return x;
		break;
	case 2:
		return x*x;
		break;
	case 3:
		return x*x*x;
		break;
	case 4:
		return x*x*x*x;
		break;
	default:
		return 0;
		break;
	}

	
}
void Calculate::SetXY(int i)//设定x,y的行列数
{
	Y=CMatrix(i,1);

	X=CMatrix(i,1);
}
void Calculate::computing()
{

	//给系数矩阵赋值
	ASSERT(cdegree>=1&&cdegree<=4);

	A=CMatrix(cnodenum,cdegree+1);
	
	a=CMatrix(cdegree+1,1);

	for(int j=0;j<cdegree+1;j++)
	{
		for(int i=0;i<cnodenum;i++)
		{
         A.SetElement(i,j, basefunction(X.GetElement(i,0) , j) );
		}
    
	}
	for(  j=0;j<A.GetNumColums();j++)
	{
		for( int i=0;i<A.GetNumRows();i++)
			TRACE("\nA:%f\n",A.GetElement(i,j));
	}
	//运算
	CMatrix AA(cdegree+1);
	AA=A.Transpose()*A;
	for( int i=0;i<AA.GetNumRows();i++)
	{
		for( int j=0;j<AA.GetNumColums();j++)
           TRACE("\nAA:%f\n",AA.GetElement(i,j));
	}
	
	CMatrix AY(cdegree+1,1);
	AY=A.Transpose()*Y;
	for(  j=0;j<AY.GetNumRows();j++)
		TRACE("\nAy:%f\n",AY.GetElement(j,0));


    //解方程组(AA)*a=(AY)得出解a以及计算误差平方和errosquare

	AA.InvertGaussJordan();
	a=AA*AY;
	
	// CLEquations leqs(AA,AY);
	// leqs.GetRootsetGauss(a);
	
	errosquare=(Y.Transpose()*(Y-A*a)).GetElement(0,0);
}

⌨️ 快捷键说明

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