高斯消元法:
double l;//被减得比例系数
double c;
//输入矩阵
cout<<"这是一个几阶的矩阵:"<<endl;
cin>>n;
cout<<"输入矩阵:"<<endl;
for(int i=0;i<n;i++)
{
for(int j=0;j<n+1;j++)
cin>>A[i][j];
}
//矩阵消元 消第k列的每i行
for(int k=0;k<n-1;k++)
{
if(A[k][k]==0){
return -1;
}
for(int i=k+1;i<n;i++)
{
l=A[i][k]/A[k][k];
//该行的每个元素 减去 第一行的l倍
for(int j=k;j<n+1;j++)
{
A[i][j]=A[i][j]-(l*A[k][j]);
}
}
//打印本次消元之后的结果
cout<<"A="<<endl;
for(int i=0;i<n;i++)
{
for(int j=0;j<n+1;j++)
cout<<A[i][j]<<" ";
cout<<endl;
}
}
//回代
X[n-1]=A[n-1][n]/A[n-1][n-1];
for(int k=n-2;k>=0;k--)
{
c=A[k][n];
for(int j=k+1;j<n;j++)
{
c=c-A[k][j]*X[j];
}
X[k]=c/A[k][k];
}
//此处打印出向量X
printf("x=\n");
for(int i=0;i<n;i++)
printf("\t%f\t\n",X[i]);
return 0;
}
列主元素消元法:
#include<iostream>
#include<math.h>
double A[5][5];
double X[5];
int n;
using namespace std;
//换行函数 ,交换第i行和j行,共有n列
void colsswap(int i,int j,int n){
double a=0;
for(int k=0;k<=n;k++){
a=A[i][k];
A[i][k]=A[j][k];
A[j][k]=a;
}
}
//判断该列最大元素 所在行
int maxrow(int y,int n){
int b=y;//初始值置为第0行
for(int k=y;k<n;k++){
if(A[k][y]>A[b][y]){
b=k;
}
}
cout<<"b="<<b<<endl;
cout<<endl;
return b;
}
//列主元素消元法
int main(){
double l;//被减得比例系数
double c;
//输入矩阵
cout<<"这是一个几阶的矩阵:"<<endl;
cin>>n;
cout<<"输入矩阵:"<<endl;
for(int i=0;i<n;i++)
{
for(int j=0;j<n+1;j++)
cin>>A[i][j];
}
//矩阵消元 消第k列的每i行
for(int k=0;k<n-1;k++)
{
//最大主元素列
int c=maxrow(k,n);
colsswap(k,c,n);
cout<<"A(交换)="<<endl;
for(int i=0;i<n;i++)
{
for(int j=0;j<n+1;j++)
cout<<A[i][j]<<" ";
cout<<endl;
}
cout<<endl;
if(A[k][k]==0){
return -1;
}
for(int i=k+1;i<n;i++)
{
l=A[i][k]/A[k][k];
//该行的每个元素 减去 第一行的l倍
for(int j=k;j<n+1;j++)
{
A[i][j]=A[i][j]-(l*A[k][j]);
}
}
//打印本次消元之后的结果
cout<<"A="<<endl;
for(int i=0;i<n;i++)
{
for(int j=0;j<n+1;j++)
cout<<A[i][j]<<" ";
cout<<endl;
}
}
//回代
X[n-1]=A[n-1][n]/A[n-1][n-1];
for(int k=n-2;k>=0;k--)
{
c=A[k][n];
for(int j=k+1;j<n;j++)
{
c=c-A[k][j]*X[j];
}
X[k]=c/A[k][k];
}
//此处打印出向量X
printf("x=\n");
for(int i=0;i<n;i++)
printf("\t%f\t\n",X[i]);
return 0;
}