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

📄 solveequation.cpp

📁 本人自编的另一个有限元软件
💻 CPP
字号:
// SloveEquation.cpp: implementation of the CSloveEquation class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "FiniteElec.h"
#include "SolveEquation.h"
#include "math.h"

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

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

CSolveEquation::CSolveEquation()
{

}

CSolveEquation::~CSolveEquation()
{

}
//高斯列主元素消去法
void CSolveEquation::Gauss(double **matrix, double *vector, int size)
{
	int i,j,k;
	double temp_d;
	double error=1.0e-5;
	int temp_i;
	//对各列扫描,从0列消到size-2列,消i列
	for(i=0;i<size-1;i++)
	{
		temp_d=0.0f;//列最大值
		temp_d=0;//最大值的列号
		//选取主元并交换两行
		for(j=i;j<size;j++)
		{
			if(temp_d<matrix[i][j])
			{
				temp_d=matrix[i][j];
				temp_i=j;
			}
		}
		if(fabs(temp_d)<1.0e-5)return;//奇异跳出
		/*       
		ik=ik+k-1;
		if(ik~=k)
        for j=k:n
			temp=a(k,j);a(k,j)=a(ik,j);a(ik,j)=temp;
        end
			temp=b(k);b(k)=b(ik);b(ik)=temp;
		end*/
		//消元过程,消第j行
		for(j=i+1;j<size;j++)
		{	//matrix[j][i]为消元系数
			matrix[j][i]=matrix[j][i]/matrix[i][i];
			//消第k列
			for(k=i+1;k<size;k++)
			{
				matrix[j][k]=matrix[j][k]-matrix[j][i]*matrix[i][k];
			}
			vector[j]=vector[j]-vector[i]*matrix[j][i];
		}
	}
	//回代过程,求出方程组的解
	if(fabs(matrix[size-1][size-1])<error)return;
	vector[size-1]=vector[size-1]/matrix[size-1][size-1];
	//从后往前回代//仔细啊,在些又浪费了太多时间
	for(i=size-2;i>=0;i--)
	{
		temp_d=0.0f;
		for(j=i+1;j<size;j++)
		{
			temp_d=temp_d+matrix[i][j]*vector[j];
		}
		vector[i]=(vector[i]-temp_d)/matrix[i][i];
	}
}

⌨️ 快捷键说明

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