C#,码海拾贝(40)

您所在的位置:网站首页 线性变换的计算 C#,码海拾贝(40)

C#,码海拾贝(40)

2023-06-11 21:03| 来源: 网络整理| 查看: 265

 

using System;

namespace Zhou.CSharp.Algorithm {     ///     /// 求解线性方程组的类 LEquations     /// 原作 周长发     /// 改编 深度混淆     ///     public static partial class LEquations     {

        ///         /// 求解线性最小二乘问题的豪斯荷尔德变换法         ///         /// 指定的系数矩阵         /// 指定的常数矩阵         /// Matrix对象,返回方程组解矩阵         /// Matrix对象,返回豪斯荷尔德变换的Q矩阵         /// Matrix对象,返回豪斯荷尔德变换的R矩阵         /// bool 型,方程组求解是否成功         public static bool GetRootsetMqr(Matrix mtxLECoef, Matrix mtxLEConst, Matrix mtxResult, Matrix mtxQ, Matrix mtxR)         {             // 方程组的方程数和未知数个数             int m = mtxLECoef.GetNumRows();             int n = mtxLECoef.GetNumColumns();             // 奇异方程组             if (m < n)             {                 return false;             }

            // 将解向量初始化为常数向量             mtxResult.SetValue(mtxLEConst);             double[] pDataConst = mtxResult.GetData();

            // 构造临时矩阵,用于QR分解             mtxR.SetValue(mtxLECoef);             double[] pDataCoef = mtxR.GetData();

            // QR分解             if (!Matrix.SplitQR(mtxR, mtxQ))             {                 return false;             }

            // 临时缓冲区             double[] c = new double[n];             double[] q = mtxQ.GetData();

            // 求解             for (int i = 0; i                     d = d + q[j * m + i] * pDataConst[j];                 }                 c[i] = d;             }

            pDataConst[n - 1] = c[n - 1] / pDataCoef[n * n - 1];             for (int i = n - 2; i >= 0; i--)             {                 double d = 0.0;                 for (int j = i + 1; j



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3