C#,码海拾贝(22)——线性方程组求解的全选主元高斯-约当消去法之C#源代码,《C#数值计算算法编程》源代码升级改进版
发布人:shili8
发布时间:2023-07-29 08:17
阅读次数:60
以下是使用全选主元高斯-约当消去法求解线性方程组的C#源代码示例:
csharp using System; namespace LinearEquationSolver { class Program { static void Main(string[] args) { // 线性方程组的系数矩阵 double[] coefficients = { { 2 -1 3 } { 4 2 -1 } { 3 5 -2 } }; // 线性方程组的常数向量 double[] constants = { 5 3 1 }; // 求解线性方程组 double[] solution = SolveLinearEquations(coefficients constants); // 输出解向量 Console.WriteLine(Solution:); for (int i = 0; i < solution.Length; i++) { Console.WriteLine(x{0} = {1} i + 1 solution[i]); } } static double[] SolveLinearEquations(double[] coefficients double[] constants) { int n = constants.Length; double[] solution = new double[n]; // 高斯-约当消去法 for (int k = 0; k < n - 1; k++) { // 选取主元 int pivotRow = k; int pivotColumn = k; double maxPivot = Math.Abs(coefficients[k k]); for (int i = k; i < n; i++) { for (int j = k; j < n; j++) { if (Math.Abs(coefficients[i j]) > maxPivot) { maxPivot = Math.Abs(coefficients[i j]); pivotRow = i; pivotColumn = j; } } } // 交换行 if (pivotRow != k) { for (int j = k; j < n; j++) { double temp = coefficients[k j]; coefficients[k j] = coefficients[pivotRow j]; coefficients[pivotRow j] = temp; } double tempConstant = constants[k]; constants[k] = constants[pivotRow]; constants[pivotRow] = tempConstant; } // 交换列 if (pivotColumn != k) { for (int i = 0; i < n; i++) { double temp = coefficients[i k]; coefficients[i k] = coefficients[i pivotColumn]; coefficients[i pivotColumn] = temp; } } // 消元 for (int i = k + 1; i < n; i++) { double factor = coefficients[i k] / coefficients[k k]; for (int j = k; j < n; j++) { coefficients[i j] -= factor * coefficients[k j]; } constants[i] -= factor * constants[k]; } } // 回代求解 for (int i = n - 1; i >= 0; i--) { double sum = 0; for (int j = i + 1; j < n; j++) { sum += coefficients[i j] * solution[j]; } solution[i] = (constants[i] - sum) / coefficients[i i]; } return solution; } } }
这段代码使用了全选主元高斯-约当消去法来求解给定的线性方程组。首先,定义了一个`SolveLinearEquations`方法,该方法接受一个系数矩阵和常数向量作为输入,并返回解向量。在`Main`方法中,定义了一个示例线性方程组的系数矩阵和常数向量,并调用`SolveLinearEquations`方法来求解该线性方程组。最后,输出解向量。
在`SolveLinearEquations`方法中,首先初始化解向量`solution`,然后使用全选主元高斯-约当消去法来求解线性方程组。在每一次迭代中,选取主元(绝对值最大的元素),并进行行交换和列交换,然后进行消元操作。最后,使用回代法求解得到解向量。
这段代码可以用于求解任意大小的线性方程组,只需将系数矩阵和常数向量作为输入传递给`SolveLinearEquations`方法即可。