這裡我解的是10階方程,可在代碼處修改方程階數;将要帶入的資料寫到文本檔案裡,并在代碼處修改對應的路徑
#include <iostream>
#include <fstream>
using namespace std;
#define MAX_NUM 1000
double A[MAX_NUM][MAX_NUM];
double b[MAX_NUM];
double x[MAX_NUM] = { 0 };
// 請順序高斯消去法
// A:系數矩陣, 是一個nxn的矩陣
// x: 要求的解,是一個n維的向量
// b: 右端項,是一個n維的向量
// n: 向量的次元
void gauss(double A[][MAX_NUM], double *x, double *b, int n)
{
/*這裡是你的程式*/
int i,j,k;
double mik;//消元過程所用變量
double S;//回代過程所用變量
//消元
for(k=0; k<n-1; k++)
{
if(!A[k][k])
return;
for(i=k+1; i<n; i++)
{
mik=A[i][k]/A[k][k];
for(j=k; j<n; j++)
{
A[i][j]=A[i][j]-mik*A[k][j];
}
b[i]=b[i]-mik*b[k];
}
printf("######### k = %d \n",k);
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
cout << A[i][j] << " ";
}
cout << endl;
}
}
//回代
x[n-1]=b[n-1]/A[n-1][n-1];
for(k=n-2; k>=0; k--)
{
S=b[k];
for(j=k+1; j<n; j++)
{
S=S-A[k][j]*x[j];
}
x[k]=S/A[k][k];
}
return;
}
int main()
{
int n = 10; //這裡的n與Data.txt中的行數是一緻的。
ifstream fin;
int i, j;
fin.open("D:\\Data.txt"); // 資料存放在D:\\Data.txt中
//從檔案中讀取資料
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
fin >> A[i][j];
}
fin >> b[i];
}
fin.close();
//列印系數矩陣A和右端項b
cout << "A = " << endl;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
cout << A[i][j] << " ";
}
cout << endl;
}
cout << "\nb = " << endl;
for (i = 0; i < n; i++) {
cout << b[i] << " ";
}
cout << endl;
// 調用順序高斯消去法來求解線性方程組Ax=b
gauss(A, x, b, n);
// 列印線性方程組的解x
cout << "\nx = " << endl;
for (i = 0; i < n; i++) {
printf("%.10f ",x[i]);
}
cout << endl;
return 0;
}