LU分解(用C#实现)

    技术2022-08-11  99

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LU分解 { class LU_resolve { private int n; private double[,] a; private double[] x; public int N { get => n; set => n = value; } public double[,] A { get => a; set => a = value; } public double[] X { get => x; set => x = value; } //输入参数 public void InPut() { Console.Write("请输入方程的阶数:"); //Parese函数:将数字型的string字符转化为int型(类型转化) n = int.Parse(Console.ReadLine()); //开辟内存,指定下标 a = new double[n, n + 1]; Console.WriteLine("请输入方程的系数:"); for (int i = 0; i < n; i++) { string r = Console.ReadLine(); //Split函数:将字符串r拆分 string[] rs = r.Split(' '); for (int j = 0; j < n + 1; j++) { a[i, j] = double.Parse(rs[j]); } } } //计算第k行和第k列元素 public void CalculateCowCol() { for (int k = 0; k <= n - 1; k++) { //计算各行的元素值 for (int j = k; j <= n; j++) { double sum = 0; for (int r = 0; r <= k - 1; r++) { sum += a[k, r] * a[r, j]; } a[k, j] = a[k, j] - sum; } //计算各列的元素值 for (int i = k + 1; i <= n - 1; i++) { double sum = 0; for (int r = 0; r <= k - 1; r++) { sum += a[i, r] * a[r, k]; } a[i, k] = (a[i, k] - sum) / a[k, k]; } } } //回代 public void backsubstitution() { x = new double[n]; for (int i = n - 1; i >= 0; i--) { double sum = 0; for (int j = i + 1; j <= n - 1; j++) { sum = sum + a[i, j] * x[j]; } x[i] = (a[i, n] - sum) / a[i, i]; } } //方程系数输出 public void OutPut() { for (int i = 0; i < n; i++) { for (int j = 0; j < n + 1; j++) { Console.Write("{0,8:F2}", a[i, j]); } //控制换行 Console.WriteLine(); } } //结果输出 public void OutPut1() { for (int i = 0; i < x.Length; i++) Console.WriteLine("{0,8:F2}", x[i]); } public void LU() { //输入数据 InPut(); Console.WriteLine("——————————方程系数如下——————————"); OutPut(); //分解 CalculateCowCol(); Console.WriteLine("——————————分解后方程系数如下——————————"); backsubstitution(); OutPut(); Console.WriteLine("——————————方程的解如下——————————"); OutPut1(); Console.Read(); } } }
    Processed: 0.014, SQL: 9