CSharp 高斯消元法源代码
时间: 2023-10-05 15:04:36 浏览: 42
以下是C#中的高斯消元法源代码:
```csharp
using System;
class GaussElimination
{
static int N = 3; // 矩阵大小
static double[,] A = new double[N, N + 1]; // 增广矩阵
static void Main(string[] args)
{
// 初始化增广矩阵
A[0, 0] = 2; A[0, 1] = 1; A[0, 2] = 1; A[0, 3] = 6;
A[1, 0] = 4; A[1, 1] = -6; A[1, 2] = 0; A[1, 3] = 5;
A[2, 0] = -2; A[2, 1] = 7; A[2, 2] = 2; A[2, 3] = 4;
GaussianElimination(); // 调用高斯消元函数
Console.ReadKey(); // 等待用户按任意键结束程序
}
static void GaussianElimination()
{
// 高斯消元
for (int p = 0; p < N; p++)
{
// 找到主元素
int max = p;
for (int i = p + 1; i < N; i++)
{
if (Math.Abs(A[i, p]) > Math.Abs(A[max, p]))
{
max = i;
}
}
// 交换行
SwapRows(p, max);
// 消元
for (int i = p + 1; i < N; i++)
{
double alpha = A[i, p] / A[p, p];
for (int j = p; j <= N; j++)
{
A[i, j] -= alpha * A[p, j];
}
}
}
// 回代求解
double[] x = new double[N];
for (int i = N - 1; i >= 0; i--)
{
double sum = 0.0;
for (int j = i + 1; j < N; j++)
{
sum += A[i, j] * x[j];
}
x[i] = (A[i, N] - sum) / A[i, i];
}
// 输出解
Console.WriteLine("Solution:");
for (int i = 0; i < N; i++)
{
Console.WriteLine("x[{0}] = {1}", i, x[i]);
}
}
static void SwapRows(int i, int j)
{
if (i != j)
{
for (int k = 0; k <= N; k++)
{
double temp = A[i, k];
A[i, k] = A[j, k];
A[j, k] = temp;
}
}
}
}
```
该程序实现了一个3x3的增广矩阵的高斯消元法求解方程组的过程,并输出了解。程序中的高斯消元函数 `GaussianElimination()` 对应了算法的步骤,包括找到主元素、交换行、消元和回代求解。其中,回代求解部分使用了一个一维数组 `x` 存储解。该程序可以根据实际需要进行修改,例如可以通过输入 `N` 和 `A` 数组的方式动态设置矩阵大小和矩阵元素。