C#,码海拾贝(33)——约化“一般实矩阵”为“赫申伯格矩阵”的“初等相似变换法”之C#源代码,《C#数值计算算法编程》源代码升级改进版

news/2024/2/29 3:18:43

 

using System;

namespace Zhou.CSharp.Algorithm
{
    /// <summary>
    /// 矩阵类
    /// 作者:周长发
    /// 改进:深度混淆
    /// https://blog.csdn.net/beijinghorn
    /// </summary>
    public partial class Matrix
    {

        /// <summary>
        /// 约化一般实矩阵为赫申伯格矩阵的初等相似变换法
        /// </summary>
        /// <param name="src">源矩阵</param>
        public static void MakeHberg(Matrix src)
        {
            int i = 0, j, k, u, v;
            double d, t;

            for (k = 1; k <= src.Columns - 2; k++)
            {
                d = 0.0;
                for (j = k; j <= src.Columns - 1; j++)
                {
                    u = j * src.Columns + k - 1;
                    t = src[u];
                    if (Math.Abs(t) > Math.Abs(d))
                    {
                        d = t;
                        i = j;
                    }
                }

                if (Math.Abs(d) > float.Epsilon) //d != 0.0)
                {
                    if (i != k)
                    {
                        for (j = k - 1; j <= src.Columns - 1; j++)
                        {
                            u = i * src.Columns + j;
                            v = k * src.Columns + j;
                            t = src[u];
                            src[u] = src[v];
                            src[v] = t;
                        }

                        for (j = 0; j <= src.Columns - 1; j++)
                        {
                            u = j * src.Columns + i;
                            v = j * src.Columns + k;
                            t = src[u];
                            src[u] = src[v];
                            src[v] = t;
                        }
                    }

                    for (i = k + 1; i <= src.Columns - 1; i++)
                    {
                        u = i * src.Columns + k - 1;
                        t = src[u] / d;
                        src[u] = 0.0;
                        for (j = k; j <= src.Columns - 1; j++)
                        {
                            v = i * src.Columns + j;
                            src[v] = src[v] - t * src[k * src.Columns + j];
                        }

                        for (j = 0; j <= src.Columns - 1; j++)
                        {
                            v = j * src.Columns + k;
                            src[v] = src[v] + t * src[j * src.Columns + i];
                        }
                    }
                }
            }
        }
     }

}


https://www.jiucaihua.cn/news/show-4628063.html

相关文章

【owt】WebrtcNode, subscribe流程

subscribe流程 1. AmqpClient - New message received 2023-04-26T21:54:18.415 - DEBUG: AmqpClient - RpcServer New message received {method: subscribe,args: [b149e44bb10d4e91bd162a8c6806ae7b,webrtc,{transportId: b149e44bb10d4e91bd162a8c6806ae7b,tracks: [Arr…

前端045_单点登录SSO_实现流程

单点登录SSO_实现流程 1、背景2、基于同域下 Cookie 实现 SSO1、背景 在企业发展初期,企业使用的系统很少,通常一个或者两个,每个系统都有自己的登录模块,运营人员每天用自己的账号登录,很方便。 但随着企业的发展,用到的系统随之增多,运营人员在操作不同的系统时,需要…

【ARMv8 SIMD和浮点指令编程】NEON 减法指令——减法也好几种

向量减法包括常见的普通加指令&#xff0c;还包括长减、宽减、半减、饱和减、按对减、按对加并累加、选择高半部分结果加、全部元素加等。 1 SUB 减法&#xff08;向量&#xff09;&#xff0c;该指令从第一个源 SIMD&FP 寄存器中的相应向量元素中减去第二个源 SIMD&…

Java 实现在顺序表指定位置插入一个元素

一、思路 1.定义一个pos变量来记录要插入的位置. 2.定义一个usedSize变量来记录元素个数. 3.定义一个data变量来记录要插入的元素值. 4.要保证pos位置合法&#xff0c;也就是不是负数&#xff0c;因为是要保证pos位置前是要有元素&#xff0c;因此也不能大于元素个数. 5.也需要…

PyTorch深度学习实战(2)——PyTorch基础

PyTorch深度学习实战&#xff08;2&#xff09;——PyTorch基础 0. 前言1. 搭建 PyTorch 环境2. PyTorch 张量2.1 张量初始化2.2 张量运算2.3 张量对象的自动梯度计算 3. PyTorch 张量相对于 NumPy 数组的优势小结系列链接 0. 前言 PyTorch 是广泛应用于机器学习领域中的强大开…

Rust每日一练(Leetday0020) 最后单词的长度、螺旋矩阵II、排列序列

目录 58. 最后一个单词的长度 Length of Last Word &#x1f31f; 59. 螺旋矩阵 II Spiral Matrix II &#x1f31f;&#x1f31f; 60. 排列序列 Permutation Sequence &#x1f31f;&#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Rust每日…

Linux之理解文件系统——文件的管理

文章目录 前言一、磁盘1.磁盘的物理结构2.磁盘的存储结构3.磁盘的逻辑结构 二、文件系统与inode1.文件在磁盘中是如何存储的&#xff1f;2.对文件进行操作 三、软硬链接1.软链接创建软链接&#xff1a;inode删除软链接&#xff1a;软链接的作用&#xff1a; 2.硬链接创建硬链接…

JavaScript之BOM(八)

JavaScript之BOM 1、BOM中的对象2、window对象2.1、简介2.2、常用的属性与方法2.3、常用的事件2.4、定时器和延时器 3、navigator 常用属性与方法4、history 常用属性与方法5、location 常用属性与方法 BOM&#xff1a;浏览器对象模型&#xff08;Browser Object Model&#xf…

阿里云 Windows Server 2022 安装 Docker

阿里云Windows Server 2022 安装 Docker 文章目录 情景尝试正解 安装Docker管理工具安装Docker重启系统配置Docker系统路径配置Docker引擎(也许不用)启动Docker服务 情景 情景&#xff1a;最近一直在搞微服务&#xff0c;团队的服务器是阿里云的 Windows Server 2022&…

论文笔记--Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context

论文笔记--Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context 1. 文章简介2. 文章概括3 文章重点技术3.1 Segment-Level Recurrence with State Reuse3.2 相对位置编码 4. 文章亮点5. 原文传送门 1. 文章简介 标题&#xff1a;Transformer-XL: Attent…