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

📄 gauss.c

📁 void Gauss() /*高斯消去法是解线性方程组的一个方法
💻 C
字号:
#include"stdio.h"
#include"string.h"
#include"math.h"

#define NBUS 4   /*节点数*/

void Gauss();  /*高斯消去法是解线性方程组的一个方法,这里用列主元消去法*/

main()
{
 float AA[4][4]={{1,2,1,1},{2,1,0,0},{1,0,1,0},{1,0,0,1}};
 float BB[4]={5,3,2,2};
 int NN=4;
 Gauss(AA,BB,NN);
}
void Gauss(float a[NBUS][NBUS], float b[NBUS], int n)    /*定义高斯法  */
{
  int JS[NBUS];
  int i,j,k;
  float d,t,x[NBUS];
  FILE *fp;
  int L=1;
  for(i=0;i<NBUS;i++) JS[i]=0;
  for(k=0;k<n;k++){
    d=0.0;
  for(j=k;j<n;j++)
	   if(fabs(a[k][j])>d){         /*在一行中找到一个最大值赋值d,并用JS[K]记住这个最大值所在的列号*/
      d=fabs(a[k][j]);
      JS[k]=j;
    }
    if(fabs(d)<0.000001)           /*如果d的数值太小,做为被除数将带来很大的误差 */
      L=0;
    else {
      if(JS[k]!=k)
	for(i=0;i<n;i++)
	{
        t=a[i][k];
        a[i][k]=a[i][JS[k]];             /*进行列交换,让最大值始终在对角元上*/
        a[i][JS[k]]=t;
	}
    }
    if(L==0)break;                       
    for(j=k+1;j<n;j++)a[k][j]=a[k][j]/a[k][k];   /*对角元上的元素消为1*/
    b[k]=b[k]/a[k][k];                                     
    for(i=k+1;i<n;i++){
      for(j=k+1;j<n;j++)a[i][j]=a[i][j]-a[i][k]*a[k][j];   /*使下三角阵的元素为0*/
      b[i]=b[i]-a[i][k]*b[k];
    }
  }
  if(fabs(a[n-1][n-1])>0.00001){                        /*用追赶法,解方程组,求未知数x*/                        
   x[n-1]=b[n-1];
  for(i=n-2;i>=0;i--){
    t=0.0;
    for(j=i+1;j<n;j++)t=t+a[i][j]*x[j];
    x[i]=(b[i]-t);
    }
     }
  if((fp=fopen("d:\\lx\\gauss.txt","w"))==NULL)                /*将结果写到TXT文件中*/
  {printf("err");exit(0);}
  for(i=0;i<n;i++){
  fprintf(fp,"%f",x[i]);
  fprintf(fp,"\n");}
  fclose(fp);
}

⌨️ 快捷键说明

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