Guass消元法和Guass列主元素消元法解线性方程组

原创 2007年09月17日 18:28:00
#include<stdio.h>
#include<math.h>
#include<conio.h>
#define N 3
void Guass(double a[][N+1],double x[])
{
 double l[N];
 int i,j,k;
 l[0]=1.0;
 for(i=0;i<N-1;i++)
 {
  if(fabs(a[i][i])<0.000001)
  {
   printf("不能求解!/n");
   return;
  }
  for(j=i+1;j<N;j++)
   l[j]=a[j][i]/a[i][i];
  for(j=i+1;j<N;j++)
    for(k=i+1;k<N+1;k++)
     a[j][k]=a[j][k]-l[j]*a[i][k];
 }
 for(i=N-1;i>=0;i--)
 {
  x[i]=a[i][N];
  for(j=i+1;j<N;j++)x[i]=x[i]-a[i][j]*x[j];
  x[i]=x[i]/a[i][i];
 }
}
void main()
{
int i,j;
double x[N];
double s[N][N+1]={{ 0.101, 2.304, 3.555, 1.183},
                  {-1.347, 3.712, 4.623, 2.137},
                  {-2.835, 1.072, 5.643, 3.035}              
   };
for(i=0;i<N;i++)
 {
 for(j=0;j<=N;j++)printf("%5.3f  ",s[i][j]);
 printf("/n");
 }
Guass(s,x);
for(i=0;i<N;i++)printf("x[%d]=%5.6f/n",i+1,x[i]);
getch();
}
//////////////////////////////////////////////////////////
#include<stdio.h>
#include<math.h>
#include<conio.h>
#define N 3
//Guass列主元素消元法
int Guassl(double **a,double *x,int n)
{
 int i,j,k,numl,*h,t;
    double *l,max;
 l=new double[n];
 h=new int[n];
 for(i=0;i<n;i++) h[i]=i;//行标
 for(i=1;i<n;i++)
 {
  max=fabs(a[h[i-1]][i-1]);
  numl=i-1;
  //列元的最大值
  for(j=i;j<n;j++)
  {
   if(fabs(a[h[j]][i-1])>max)
   {
    numl=h[j];
    max=fabs(a[h[j]][i-1]);
   }
  }
  if(max<0.00000000001) return 0;
  //交换行号
  if(numl>i-1)
  {
   t=h[i];
   h[i]=h[numl];
   h[numl]=t;
  }
  for(j=i;j<n;j++) l[j]=a[h[j]][i-1]/a[h[i-1]][i-1];
  for(j=i;j<n;j++)
            for(k=i;k<n+1;k++) a[h[j]][k]=a[h[j]][k]-l[j]*a[h[i-1]][k];
 }
 for(i=n-1;i>=0;i--)
 {
        x[h[i]]=a[h[i]][n];
        for(j=i+1;j<n;j++) x[h[i]]=x[h[i]]-a[h[i]][j]*x[h[j]];
        x[h[i]]=x[h[i]]/a[h[i]][i];
 }
 //还原x[i]的值
 for(i=0;i<n;i++) l[i]=x[h[i]];
 for(i=0;i<n;i++) x[i]=l[i];
 //删除临时数组变量
 delete []l;
 delete []h;
 return 1;
}
void main()
{
    int i,j;
    double x[N];
    double s[N][N+1]={{2, 8, 2, 14},
                   {1, 6, -1,13},
                   {2, -1, 2, 5}
                  };
 double **u;
 u=new double *[N];
 for(i=0;i<N;i++) u[i]=s[i];
    for(i=0;i<N;i++)
 {
        for(j=0;j<=N;j++)printf("%5.3f  ",s[i][j]);
        printf("/n");
 }
 Guassl(u,x,N);
 for(i=0;i<N;i++) printf("x[%d]=%5.6f/n",i+1,x[i]);
 delete []u;
 getch();

【计算方法笔记】列高斯消元法解线性方程组

针对齐次方程组解线性方程组AX=b

高斯列主元消元法求解线性方程组

一、高斯消去法的基本思想     例1. 解方程组:                   解 方程组矩阵形式为:AX=b,其中:                第一步,消元过程:对增广矩阵进行消元...

选主元的高斯-约当(Gauss-Jordan)消元法解线性方程组和求逆矩阵

选主元的高斯-约当(Gauss-Jordan)消元法在很多地方都会用到,例如求一个矩阵的逆矩阵、解线性方程组(插一句:LM算法求解的一个步骤),等等。它的速度不是最快的,但是它非常稳定(来自网上的定义...

采用GAUSS列主消元法求解线性方程组(MATLAB)

程序清单: %%求解任意线性方程组的解 clc; clear all; format long e disp('线性方程组求解,请输入参数'); n=input('维数n='); A=i...

高斯消元法解线性方程组

  • 2016年04月26日 14:10
  • 874B
  • 下载

高斯消元法解线性方程组程序

  • 2009年11月23日 19:52
  • 598B
  • 下载

Python计算——高斯消元法解线性方程组

#!/usr/bin/env python# coding=gb2312# 以上的信息随自己的需要改动吧def print_matrix( info, m ): # 输出矩阵 i = 0; j = 0...
  • nokiapc
  • nokiapc
  • 2014年03月13日 19:49
  • 5280

亚当高斯消元法解线性方程组

PROGRAM hwIMPLICIT NONEINTEGER,PARAMETER::DBL=SELECTED_REAL_KIND(p=13)REAL(KIND=DBL),ALLOCATABLE,DIM...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Guass消元法和Guass列主元素消元法解线性方程组
举报原因:
原因补充:

(最多只允许输入30个字)