C#,码海拾贝(40)——求解“线性最小二乘问题”的“豪斯荷尔德Householder变换法”之C#源代码

news/2025/1/11 5:44:27/

 

using System;

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

        /// <summary>
        /// 求解线性最小二乘问题的豪斯荷尔德变换法
        /// </summary>
        /// <param name="mtxLECoef">指定的系数矩阵</param>
        /// <param name="mtxLEConst">指定的常数矩阵</param>
        /// <param name="mtxResult">Matrix对象,返回方程组解矩阵</param>
        /// <param name="mtxQ">Matrix对象,返回豪斯荷尔德变换的Q矩阵</param>
        /// <param name="mtxR">Matrix对象,返回豪斯荷尔德变换的R矩阵</param>
        /// <return>bool 型,方程组求解是否成功</return>
        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 <= n - 1; i++)
            {
                double d = 0.0;
                for (int j = 0; j <= m - 1; j++)
                {
                    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 <= n - 1; j++)
                {
                    d = d + pDataCoef[i * n + j] * pDataConst[j];
                }
                pDataConst[i] = (c[i] - d) / pDataCoef[i * n + i];
            }

            return true;
        }
}

}


http://www.ppmy.cn/news/307268.html

相关文章

pytorch 40 分享从0开始构建一个独立的深度学习项目

都2023年了,估计没有几个人会自己独立从0开始构建深度学习项目的了,全是依赖现有的开源库进行项目研制开发。这里回顾几年的工作经验,对构建深度学习项目进行初步梳理。 通常深度学习任务都被描述为:假设函数、损失函数和迭代函数。假设函数一般是我们的模型,损失函数(lo…

计算机上电自检的作用,计算机上电自检的过程是什么

主板在接通电源后&#xff0c;系统首先由(Power On Self Test,上电自检)程序来对内部各个设备进行检查。在我们按下起动键(电源开关)时&#xff0c;系统的控制权就交由BIOS来完成&#xff0c;由于此时电压还不稳定&#xff0c;主板控制芯片组会向CPU发出并保持一个RESET(重置)信…

苹果手机服务器暂时不可用,服务暂时不可用【操作途径】

很多小伙伴都遇到过服务暂时不可用的困惑吧&#xff0c;一些朋友看过网上零散的服务暂时不可用的处理方法&#xff0c;并没有完完全全明白服务暂时不可用是如何解决的&#xff0c;今天小编准备了简单的解决办法&#xff0c;只需要按照1&#xff1a;在Windows10系统桌面&#xf…

王者荣耀换了手机登录找不到以前的服务器,王者荣耀:换了手机找不到以前的大区要如何?要这样!...

原标题&#xff1a;王者荣耀&#xff1a;换了手机找不到以前的大区要如何&#xff1f;要这样&#xff01; 王者荣耀里面有很多的大区&#xff0c;每个大区都有一个好听的名字。每个大区里有无数个召唤师&#xff0c;不同大区的召唤师&#xff0c;可以互赠金币可以一起游戏。如果…

新希望美好辣子蜀黍小火锅招商

对于上班族来说&#xff0c;吃饭是一个问题&#xff0c;怎样吃最方便&#xff0c;最快呢&#xff0c;还想吃点自己喜欢的&#xff0c;这几项要求加在一起着实有点困难&#xff0c;不过再难也会有商家解决的&#xff0c;方便面已经慢慢退出这些人的视线&#xff0c;方便小火锅出…

怎么把iphoneX手机备忘录同步到OPPOFindX手机中

随着经济的快速发展&#xff0c;大家的生活水平日益提高&#xff0c;买两个手机换着用的人也愈发的多了起来。 朋友阿吴就是一个拥有两部手机的土豪大大&#xff0c;iPhoneX、OPPOFindX各一个换着用&#xff0c;日常爱好换手机&#xff08;羡慕的眼神&#xff09;。 这天大家一…

【BLE】TLSR8258开发记录之12--手机扫描蓝牙显示中文

1、说明 项目需求中需要实现蓝牙设备可进行名称修改&#xff0c;且支持中文https://blog.csdn.net/jacklondonjia/article/details/78552928 URL编码转码网址http://tool.chinaz.com/tools/urlencode.aspx 2、操作 蓝牙扫描中文显示采用的编码格式为URL编码&#xff0c;举例…

uni-app手机模拟器安装教程

手机模拟器有很多种&#xff0c;我这里推荐两个&#xff0c;夜神模拟器与雷电模拟器。 一.雷电模拟器 下载地址&#xff1a;https://www.ldmnq.com/ 无需安装任何插件和配置 1.安装->打开模拟器->点击设置->开发者选项->开启 2.运行。 工具->运行到手机或模拟…