代码实现
//
// main.cpp
// 列选主元素消元法
//
// Created by 刘国栋 on 2018/10/16.
// Copyright © 2018年 LGD. All rights reserved.
//
#include <iostream>
#include <math.h>
#include<iomanip>
using namespace std;
const int n = 3;
void gaussin(double A[n][n], double B[n])
{
int i = 0, j = 0, k = 0;
int r = 0; //存储交换的行变量
for(k = 0; k < n - 1; k++) //第k次消元
{
for( i = k + 1; i < n; i++) //寻找最大行
{
r = k;
if(fabs(A[i][k]) > fabs(A[r][k]))
r = i;
}
if(r != k && A[r][k] != 0) //交换行数据
{
double temp;
for(i = 0; i < n; i++)
{
temp = A[k][i];
A[k][i] = A[r][i];
A[r][i] = temp;
}
temp = B[k]; B[k] = B[r]; B[r] = temp;
}
for(i = k + 1; i < n; i++) //消元过程
{
A[i][k] = A[i][k] / A[k][k];
}
for(i = k + 1; i < n; i++)
for(j = k + 1; j < n; j++)
A[i][j] = A[i][j] - A[i][k] * A[k][j];
for(i = k + 1; i < n; i++)
B[i] = B[i] - A[i][k] * B[k];
}
//解的存储数组
double x[n];
//先计算出最后一个未知数;
x[n - 1] = B[n - 1] / A[n - 1][n - 1];
//求出每个未知数的值
for (i = n - 2; i >= 0; i--)
{
double sum = 0;
for (j = i + 1; j < n; j++)
{
sum += A[i][j] * x[j];
}
x[i] = (B[i] - sum) / A[i][i];
}
cout << " the solution of the equations is:" << endl;
cout << endl;
for (i = 0; i < n; i++)
{
cout<< fixed << setprecision(15);
cout <<"x"<<i+1<<"="<< x[i] << endl;
}
}
int main(int argc, const char * argv[])
{
double A[3][3] = { {4, -2, 4}, {-2, 17, 10}, {-4, 10, 9} };
double B[3] = { 10, 3, 7};
gaussin(A, B);
return 0;
}