C#,码海拾贝(30)——求“广义逆”的“奇异值分解法SVD”C#源代码,《C#数值计算算法编程》源代码升级改进版

news/2024/11/28 1:50:06/

 

using System;

namespace Zhou.CSharp.Algorithm
{
    /// <summary>
    /// 矩阵类
    /// 作者:周长发
    /// 改进:深度混淆
    /// https://blog.csdn.net/beijinghorn
    /// </summary>
    public partial class Matrix
    {
        /// <summary>
        /// 求广义逆的奇异值分解法,分解成功后,原矩阵对角线元素就是矩阵的奇异值
        /// </summary>
        /// <param name="src">源矩阵</param>
        /// <param name="mtxAP">原矩阵的广义逆矩阵</param>
        /// <param name="mtxU">分解后的U矩阵</param>
        /// <param name="mtxV">分解后的V矩阵</param>
        /// <param name="eps">计算精度</param>
        /// <returns>求解是否成功</returns>
        public static bool InvertUV(Matrix src, Matrix mtxAP, Matrix mtxU, Matrix mtxV, double eps)
        {
            int i, j, k, u, t, p, q, f;

            // 调用奇异值分解
            if (!SplitUV(src, mtxU, mtxV, eps))
            {
                return false;
            }
            int m = src.Rows;
            int n = src.Columns;

            // 初始化广义逆矩阵
            if (!mtxAP.Init(n, m))
            {
                return false;
            }
            // 计算广义逆矩阵

            j = n;
            if (m < n)
            {
                j = m;
            }
            j = j - 1;
            k = 0;
            while ((k <= j) && Math.Abs(src[k * n + k]) > float.Epsilon)//([k * n + k] != 0.0))
            {
                k = k + 1;
            }
            k = k - 1;
            for (i = 0; i <= n - 1; i++)
            {
                for (j = 0; j <= m - 1; j++)
                {
                    t = i * m + j;
                    mtxAP[t] = 0.0;
                    for (u = 0; u <= k; u++)
                    {
                        f = u * n + i;
                        p = j * m + u;
                        q = u * n + u;
                        mtxAP[t] = mtxAP[t] + mtxV[f] * mtxU[p] / src[q];
                    }
                }
            }

            return true;
        }
    }
}
 


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

相关文章

新型UVC+UVA紫外线口罩消毒器-疫情防护+环境保护

疫情不知不觉已爆发了两年&#xff0c;两年内&#xff0c;疫情反反复复&#xff0c;这两年大家经历了太多太多&#xff0c;有好的有坏的&#xff0c;有泪水也有欢笑&#xff01;面对疫情&#xff0c;我们从一开始的不知所措&#xff0c;到现在的坦然应对。我们在保护自己的同时…

衣物紫外线消毒柜中应用的紫外线传感器

“春雨细绵绵、清明雨纷纷、梅雨下不停、夏季暴雨猛”马上又要迎来新一波降水&#xff0c;衣物又要不见天日——继续慢慢“阴干”。 适逢雨季&#xff0c;洗衣服绝对是最让人发愁的事情&#xff0c;因为衣物没有太阳&#xff0c;难以晾干。 微生物研究表明&#xff0c;一条脏内…

紫外线杀菌器:飞利浦紫外线杀菌灯TUV11W型号

飞利浦紫外线杀菌灯TUV11W是在紫外线UV-C波段内&#xff0c;其中250-270nm范围内杀菌力最强。由于汞的共振谱线为2537A&#xff0c;这种杀菌管能产生253.7nm的紫外线&#xff0c;使细菌和病毒DNA和RNA发生变性&#xff0c;细胞不能繁殖。飞利浦紫外线消毒灯对任何细菌或病毒都有…

医疗器械的清洗消毒与灭菌分析详解

医疗器械是指医学领域内所使用的各种器械&#xff0c;包括用于临床诊断治疗的各种器械、医学试验和临床检验的各种器材。 使用后的器械污染严重&#xff0c;许多器械带有血迹、脓迹、干燥的排泄物和分泌物&#xff0c;若清洗不彻底会给灭菌带来困难甚至造成灭菌失败。国内有调…

基于单片机的消毒柜控制仿真设计(#0030)

功能描述 1、采用51/52单片机(通用)作为主控芯片&#xff1b; 2、采用1602显示实时温度、计时时间&#xff1b; 3、采用18B20传感器测温&#xff1b; 4、具有三个功能键&#xff1a; 消毒(亮红灯)&#xff1a;启动继电器加热到125&#xff0c;计时加热10分钟&#xff0c;停止…

编写新年贺卡

编写程序&#xff0c;输入<人名 1>和<人名 2>&#xff0c;在屏幕上显示如下的新年贺卡 ################################### # 新年贺卡 # python0101.py # 2015 ################################### holiday input(请输入节日&#xff1a;) To_name inp…

python制作贺卡

import turtle as t t.setup(800,600) t.speed(0) t.penup() t.goto(0,0) t.pendown() t.bgcolor("blue")#背景 t.pensize(4)#开始画头# t.begin_fill() t.pencolor("brown") t.circle(170) t.fillcolor("yellow") t.end_fill()#填充头结束# t.p…