#define demension 4//修改数组的维数可以在这里改动
void transferM(double array[][demension])
//上三角
{
int row1,row2,col
double m
for(row1=0row1<demensionrow1++)
{
for(row2=row1+1row2<demensionrow2++)
{
m=array[row2][row1]/array[row1][row1]
for(col=row1col<demensioncol++)
{
array[row2][col]-=array[row1][col]*m
}
}
}
}
void main()
{
double a[demension][demension]={
{3.2,2,5,3},
{34,45,64,23},
{23,34,54,5},
{23,34,4,56}
}
transferM(a)
for(int i=0i<4i++)
{
for(int j=0j<4j++)
{
printf("%6.2lf",a[i][j])
}
printf("\n")
}
}
#include<iostream>
#include<cmath>
using namespace std
#define MAX 50
void input(double a[MAX][MAX+1],int n)
{
cout<<"输入原方程组的增广矩阵"<<endl
for(int i=0i<ni++)
for(int j=0j<n+1j++)
cin>>a[i][j]
}
void output(double x[],int n)
{
cout<<"Gauss 消去法得到的原方程组的解为"<<endl
for(int k=0k<nk++)
cout<<x[k]<<" "
}
int main()
{
double a[MAX][MAX+1],x[MAX],sum,max,t
int n,i,j,k,max_i
cout<<"输入原方程组的阶"<<endl cin>>n
input(a,n)
for(k=0k<n-1k++)//选主元素
{ max=a[k][k]
max_i=k
for(i=k+1i<ni++)
if(fabs(a[i][k])>fabs(max))
{
max=a[i][k]
max_i=i
}
if(max==0)
break
if(max_i!=k)//交换两行
for(j=kj<n+1j++)
{
t=a[k][j]
a[k][j]=a[max_i][j]
a[max_i][j]=t
}
for(i=k+1i<ni++)
{
a[i][k]=a[i][k]/-a[k][k]
for(j=k+1j<n+1j++)
a[i][j]=a[i][j]+a[i][k]*a[k][j]
}//消元
}
if(max==0)cout<<"原方程组无解"<<endl
else
{
for(k=n-1k>=0k--)
{
sum=0
for(j=k+1j<nj++)
sum=sum+a[k][j]*x[j]
x[k]=(a[k][n]-sum)/a[k][k]
}//回代
output(x,n)
cout<<endl
}
return 0
}
#include <iostream>#include <iomanip.h>
using namespace std
#define N 20
double a[N][N]
double x[N+1]
double b[N+1]
int n//n方程个数,n未知数个数
int set( )
{
cout<<"请输入方程的个数和未知数个数: "<<endl
cin>>n
int i,j
cout<<"请输入方程组(逐个输入方程 i)"<<endl
for(i = 1i <= ni++)
{
for(j = 1j<=nj++)
{
cin>>a[i][j]//系数
}
cin>>b[i]//结果
}
return 0
}
int find(int k)//寻找第k列主元
{
int i,tag = k
double maxv=0
for(i = ki <= ni++)
{
if(a[i][k] >maxv)
{
maxv = a[i][k]
tag = i
}
}
return tag
}
void exchange(int i1,int i2)//将第 i1 i2行互换
{
int j
for(j = 1j <= nj++)
{
swap(a[i1][j],a[i2][j])
}
swap(b[i1],b[i2])
}
void div(int k)//让第k个方程的首项系数为1
{
double temp = a[k][k]
for(int j = kj <= nj++)
{
a[k][j]/=temp
}
b[k]/=temp
}
void disME(int k)
{
int i,j
for(i =1 i<=ni++)
{
for(j = ij<= nj++)
{
if(a[i][j])
{
if(a[i][j]==1)
{ if(j==n)
cout<<"x"<<j
else
cout<<"x"<<j<<" + "
}
else
{
if(j==n)
cout<<a[i][j]<<"x"<<j
else
cout<<a[i][j]<<"x"<<j<<" + "
}
}
}
cout<<" = "<<b[i]<<endl
}
system("pause")
}
void eliminate(int k)//消元
{
int i,j
double t
for(i = k+1i<= ni++)
{
t = a[i][k]/a[k][k]
for(j = kj <= nj++)
{
a[i][j]-=a[k][j] * t
}
b[i] -= b[k] * t
}
}
void Gauss()//高斯消元法
{
int i,j,k
for(k = 1k <nk++)//共进行n - 1次消元
{
int l = find(k)//寻找第k次消元法的主元方程
if(l!=k)
{
exchange(l,k)
}
//消元
div(k)
eliminate(k)
cout<<"第"<<k<<"次消元结果:"<<endl
disME(k)
}
div(k)
x[k] = b[k]
//disM()
for(i = n - 1i>=1i--)
{
for(j = i+1j <=n j++)
{
b[i] -= a[i][j] * b [j]
}
x[i] = b[i]
}
}
void dis()
{
int i
cout<<"解方程得:"<<endl
for(i = 1i<=ni++)
{
cout<<"x"<<i<<" = "
printf("%.5f\n",x[i])
}
}
int main()
{
set()
Gauss()
dis()
system("pause")
return 0
}