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();
}
}
}
转载请注明原文地址:https://ipadbbs.8miu.com/read-32919.html