这些天有点闲,就花了一点时间把这个问题写出来了。其实知道这个在MATLAB上,一句话就可以解决了。我也是太久的时间写算法啊这些东西了。权当练练手。 //高斯列主元消元法 private void gauss(double[,] aa) { int h = aa.GetLength(0);//行数 int w = aa.GetLength(1);//列数 if (h + 1 != w) { return; } int n = h; int i, j; for (i = 0; i < n; i++) { //从a[i,i]到a[n,i]找出最大元素所在行 int max = i;//max指向最大列主元素所在行 for (j = i + 1; j < h; ++j) { if (Math.Abs(aa[j, i]) > Math.Abs(aa[max, i])) max = j; } this.swap(aa, i, max);//交换行 if (aa[i, i] == 0.0)//det=0,计算停止 { MessageBox.Show("此系数矩阵为非满秩阵"); return; } // 把最大行的元素单位化 for (j = i + 1; j < w; j++) { aa[i, j] = aa[i, j] / aa[i, i]; } aa[i, i] = 1.0; //对其余各行进行初等行变换 for (int k = i + 1; k < h; k++) { double div = aa[k, i] / aa[i, i]; for (int s = i; s < w; s++) { aa[k, s] = aa[k, s] - div * aa[i, s]; } } } } //交换两行。 private void swap(double[,] aa, int a, int b) { int m = aa.GetLength(0); int n = aa.GetLength(1); double[] temp = new double[n]; for (int i = 0; i < n; i++) { temp[i] = aa[a, i]; aa[a, i] = aa[b, i]; aa[b, i] = temp[i]; } } //求解 private void getSolution(double[,] aa) { int m = aa.GetLength(0); double[] x = new double[m]; for (int i = m - 1; i >= 0; i--) { double sum = 0; for (int j = i + 1; j < m; j++) { sum = sum + aa[i, j] * x[j]; } x[i] = aa[i, m] - sum; } StringBuilder sb = new StringBuilder(); for (int h = 0; h < x.GetLength(0); h++) { sb.Append("x" + h + "=" + x[h] + "/n"); } MessageBox.Show(sb.ToString()); }