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

📄 gauss_se.cpp

📁 从出版社求得的经典数值算法
💻 CPP
字号:
/////////////////////////////////////////////////////////////
//有关注释请参看程序Gauss_no.cpp

/////////////////////////////////////////////////////////////
//	程序7.2  Gauss 消元法 — 列选主元

#include	<stdio.h>
#include    <stdlib.h>
#include	<conio.h>
#include	<math.h>

#define	MAX_n	100
#define PRECISION	0.0000001

void MatrixInput(float A[][MAX_n],int m,int n)
{
	int i,j;float ftmp;
	printf("\n===Begin input Matrix elements===\n");

	for(i=1;i<=m;++i)
	{
		printf("Input_Line %d : ",i);
		for(j=1;j<=n;++j)
			{scanf("%f",&ftmp);A[i][j]=ftmp;}
	}
}

void MatrixOneColumnOutput(float A[][MAX_n],int n,int k)
{
	int i;

	for(i=1;i<=n;++i)
		printf("\nx[%d]=%f",i,A[i][k]);
}

int UpTriangle(float U[][MAX_n],int n)
{
	int i,j;
	for(i=n;i>0;--i)
	{
		if(fabs(U[i][i])<PRECISION)return 1;
		for(j=i+1;j<=n;++j)
			U[i][n+1]-=U[i][j]*U[j][n+1];
		U[i][n+1]/=U[i][i];
	}
	return 0;
}

//a,b二个变量中的值交换
void Swap(float *a,float *b)
{
	float ftmp;
	ftmp=*a;
	*a=*b;
	*b=ftmp;
}


int GaussElimination_column_select(float A[][MAX_n],int n)
{
	int i,j,k;
	float fTmp;
	for(i=1;i<n;++i)
	{
		//-------------------------------------------
		//找主元所在行
		for(k=i,j=i+1;j<=n;++j)
			if(fabs(A[j][i])>fabs(A[k][i]))	k=j;
		
			//二行交换
		for(j=i;j<=n+1;++j)
			Swap(&A[i][j],&A[k][j]);
		//-------------------------------------------
		//消元
		if(fabs(A[i][i])<PRECISION)return 1;
		for(j=i+1;j<=n;++j)
			for(k=i+1;k<=n+1;++k)
				A[j][k]-=A[i][k]*A[j][i]/A[i][i];
	}
	//解上三角方程组
	UpTriangle(A,n);
	return 0;
}

void main()
{
	int n;
	float A[MAX_n][MAX_n];

	printf("\nInput n=");
	scanf("%d",&n);
	if(n>=MAX_n-1)
	{
		printf("\n\007n must <%d!",MAX_n);
		exit(0);
	}

	MatrixInput(A,n,n+1);

	if(GaussElimination_column_select(A,n))
		printf("\nGauss Failed!");
	else
	{
		printf("\nOutput Solution:");
		MatrixOneColumnOutput(A,n,n+1);
	}
	printf("\n\n\007Press any key to quit!\n");
	getch();
}

/*
	运行实例:(注意,输入为方程组的增广矩阵)

Input n=4

===Begin input Matrix elements===
Input_Line 1 : 0.4096 0.1234 0.3678 0.2943 0.4043
Input_Line 2 : 0.2246 0.3872 0.4015 0.1129 0.155
Input_Line 3 : 0.3645 0.192 0.3781 0.0643 0.424
Input_Line 4 : 0.1784 0.4002 0.2786 0.3927 -0.2557

Output Sulution:
x[1]=-0.181918
x[2]=-1.663031
x[3]=2.217229
x[4]=-0.446704

Press any key to quit!
*/

⌨️ 快捷键说明

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