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`方法即可。

