C#,码海拾贝(40) |
您所在的位置:网站首页 › 线性变换的计算 › C#,码海拾贝(40) |
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 |