高斯消元法

#include <iostream.h>
#include <math.h>
const int n=4;

/*下面是求列中最大值函数,考察范围是:a[k][k]、a[k+1][k]、……、a[n-1][k],返回结果是主元的行号,为选择主元作准备。*/
int Max(double a[n][n+1],int k)
{
 int t=k;
 double max=fabs(a[k][k]);
 for(int i=k+1;i<=n-1;i++)
 {
  if(fabs(a[i][k])>max)
  {
   t=i;
   max=fabs(a[i][k]);
  }
 }
 return t;
}

/*下面是一个交换第k行和第t行方程的函数,选主元的后续工作*/
void change(double a[n][n+1],int k,int t)
{
 double x;
 for(int j=k;j<=n;j++)
 {
  x=a[k][j];
  a[k][j]=a[t][j];
  a[t][j]=x;
 }
}

/*下面是高斯消去法的核心函数,其中调用求主元、交换方程函数*/
void gauss(double a[n][n+1])
{
 for(int k=0;k<n-1;k++)
 {
  int t=Max(a,k);
  if(t!=k)
   change(a,k,t);
  for(int i=k+1;i<n;i++)
  {
   a[i][k]=a[i][k]/a[k][k];
   for(int j=k+1;j<=n;j++)
   {
    a[i][j]=a[i][j]-a[i][k]*a[k][j];
   }
  }
 }
}

/*下面是解上三角方程组函数*/
void LYB(double a[n][n+1])
{
  for(int i=n-1;i>=0;i--)
  {
    for(int j=i+1;j<=n-1;j++)
      a[i][n]-=a[i][j]*a[j][n];
    a[i][n]/=a[i][i];
  }
}

/*主函数*/
void main()
{
 double A[n][n+1]={{1,-1,1,-4,2},{5,-4,3,12,4},
{2,1,1,11,3},{2,-1,7,-1,0}};
 gauss(A);
 LYB(A);
 for(int i=0;i<n;i++)
  cout<<"x["<<i<<"]="<<A[i][n]<<endl;
 cout<<endl;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值