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

📄 高斯消去法求线性方程组的解.txt

📁 用高斯消去法求线性方程组的解.
💻 TXT
字号:
#include<conio.h>
#include<math.h>
#include <stdio.h>
#include <assert.h>
#define A(j,k)     (*(A+(n+1)*j+k))
#define B(j,k)     (*(B+n*j+k))
/*GS:高斯消去法求线性方程组的解
其中A是增广矩阵(拉成一维数组)的首地址,
如 x+2y=3
    4x-5y=6 
    则 A={ 1,2,3, 4,-5,6};
result 存放结果,result[0]存放X0,等等
n是未知量的个数(=方程的个数) 

返回值 1: 有唯一确定解,结果存于result;
0: 无解或者无穷多个解
*/

int GS(double  *A, double *result , int n)
{ double  t;
  int i,j,k,tj;
    for(k=0;k<n-1;k++)
  {t=A(k,k);
   tj=k;
   for(j=k+1;j<n;j++) //A(j,k)=*(*(A+j)+k)
     if(fabs(A(j,k))>fabs(t)){t=A(j,k);tj=j;}
       //找出第k列的(绝对值)最大元素t和t的行标tj。
   if(tj!=k)
   { for(i=0;i<=n;i++)
      { t=A(tj,i);A(tj,i)=A(k,i);A(k,i)=t;}
      //交换tj与k行的所有对应元素
      
   }
   //保证A(k,k)为第k列的最大元素.
   for(i=k+1;i<n;i++)
    { if(A(k,k)==0) return 0;
      t=A(i,k)/A(k,k);//t=i/k比
      for(j=k;j<n;j++) A(i,j)-=t*A(k,j);//第i行减去k行对应元素的i/k比倍
      A(i,n)-=t*A(k,n);
     }
   }
   
  for(i=n-1;i>=0;i--)
  { t=A(i,n);
    for(j=n-1;j>i;j--)    t-=A(i,j)*A(j,n);//X[j]=A(j,n);
    if(A(i,i)==0) return 0;
    A(i,n)=t/A(i,i);// X[i]=A(i,n);
   }
  for(i=0;i<n;i++)
  result[i]=A(i,n);

  return 1;
}


main()
{   double *A,*result;
    int i,k,n,r;
    double rd;
    printf("Input N: ");
    scanf("%d",&n);
    A=new double[n*(n+1)];
    result=new double[n];
    assert(A&&result);
    printf("Input Matrix[%d][%d] In Row Order\n",n,n+1);
    for(k=0;k<n*(n+1);k++)
    scanf("%lf",A+k);
    r=GS(A, result, n);
  if(r==0)  printf("无解或者无穷多解\n"); 
  else for(i=0;i<n;i++) printf("X%d=%.15g\n",i,result[i]);
   delete[] A;
  delete[] result;
  getch();
}  
  

⌨️ 快捷键说明

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