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