C#,码海拾贝(22)——线性方程组求解的全选主元高斯-约当消去法之C#源代码,《C#数值计算算法编程》源代码升级改进版

news2025/1/11 4:22:31

 

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>
        /// <return>bool 型,方程组求解是否成功</return>
        public static bool GetRootsetGaussJordan(Matrix mtxLECoef, Matrix mtxLEConst, Matrix mtxResult)
        {
            int u, k, i, j, nIs = 0, p, q;
            double d, t;

            // 方程组的属性,将常数矩阵赋给解矩阵
            mtxResult.SetValue(mtxLEConst);
            double[] pDataCoef = mtxLECoef.GetData();
            double[] pDataConst = mtxResult.GetData();
            int n = mtxLECoef.GetNumColumns();
            int m = mtxLEConst.GetNumColumns();

            // 临时缓冲区,存放变换的列数
            int[] pnJs = new int[n];

            // 消元
            u = 1;
            for (k = 0; k <= n - 1; k++)
            {
                d = 0.0;
                for (i = k; i <= n - 1; i++)
                {
                    for (j = k; j <= n - 1; j++)
                    {
                        t = Math.Abs(pDataCoef[i * n + j]);
                        if (t > d)
                        {
                            d = t;
                            pnJs[k] = j;
                            nIs = i;
                        }
                    }
                }

                if (Math.Abs(d) < float.Epsilon)//  d + 1.0 == 1.0)
                {
                    u = 0;
                }
                else
                {
                    if (pnJs[k] != k)
                    {
                        for (i = 0; i <= n - 1; i++)
                        {
                            p = i * n + k;
                            q = i * n + pnJs[k];
                            t = pDataCoef[p];
                            pDataCoef[p] = pDataCoef[q];
                            pDataCoef[q] = t;
                        }
                    }

                    if (nIs != k)
                    {
                        for (j = k; j <= n - 1; j++)
                        {
                            p = k * n + j;
                            q = nIs * n + j;
                            t = pDataCoef[p];
                            pDataCoef[p] = pDataCoef[q];
                            pDataCoef[q] = t;
                        }

                        for (j = 0; j <= m - 1; j++)
                        {
                            p = k * m + j;
                            q = nIs * m + j;
                            t = pDataConst[p];
                            pDataConst[p] = pDataConst[q];
                            pDataConst[q] = t;
                        }
                    }
                }

                // 求解失败
                if (u == 0)
                {
                    return false;
                }

                d = pDataCoef[k * n + k];
                for (j = k + 1; j <= n - 1; j++)
                {
                    p = k * n + j;
                    pDataCoef[p] = pDataCoef[p] / d;
                }

                for (j = 0; j <= m - 1; j++)
                {
                    p = k * m + j;
                    pDataConst[p] = pDataConst[p] / d;
                }

                for (j = k + 1; j <= n - 1; j++)
                {
                    for (i = 0; i <= n - 1; i++)
                    {
                        p = i * n + j;
                        if (i != k)
                        {
                            pDataCoef[p] = pDataCoef[p] - pDataCoef[i * n + k] * pDataCoef[k * n + j];
                        }
                    }
                }
                for (j = 0; j <= m - 1; j++)
                {
                    for (i = 0; i <= n - 1; i++)
                    {
                        p = i * m + j;
                        if (i != k)
                        {
                            pDataConst[p] = pDataConst[p] - pDataCoef[i * n + k] * pDataConst[k * m + j];
                        }
                    }
                }
            }

            // 调整
            for (k = n - 1; k >= 0; k--)
            {
                if (pnJs[k] != k)
                {
                    for (j = 0; j <= m - 1; j++)
                    {
                        p = k * m + j;
                        q = pnJs[k] * m + j;
                        t = pDataConst[p];
                        pDataConst[p] = pDataConst[q];
                        pDataConst[q] = t;
                    }
                }
            }

            return true;
        }
    }
}
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/561648.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小航编程题库机器人等级考试理论一级(2022年9月) (含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSDN博客 单选题2.0分 删除编辑 答案:C 第1题使用下列工具不能省力的是&#xff1f;&#xff08; &#xff09; A、斜面B、动滑轮C、定滑轮D…

深度学习笔记之循环神经网络(五)循环神经网络的反向传播过程

深度学习笔记之循环神经网络——循环神经网络的反向传播过程 引言回顾&#xff1a;循环神经网络的前馈计算过程场景构建前馈计算描述 反向传播过程各参数的梯度计算各时刻损失函数梯度计算损失函数对各时刻神经元输出的梯度计算 Softmax \text{Softmax} Softmax回归的梯度计算关…

chatgpt赋能Python-python_pyzmq

Python和pyzmq&#xff1a;高效的分布式计算 Python是一种高级的、面向对象的编程语言&#xff0c;因其易学易用以及可扩展性而备受青睐。其中&#xff0c;用于消息传递和异步I/O操作的pyzmq库&#xff0c;使Python成为一个高效的分布式计算平台。 Pyzmq的概述 Pyyzmq是Pyth…

chatgpt赋能Python-python_peak

Python Peak - 程序员必备技能 Python Peak 指的是 Python 的高峰和巅峰。Python 是一种高级编程语言&#xff0c;已成为数据科学和软件开发领域中最流行的语言之一。在 Python Peak 中&#xff0c;程序员能够利用 Python 的最佳实践和工具&#xff0c;最大化地发挥出 Python …

Java——JDK1.8新特性

目录 一、Lambda 表达式 &#xff08;一&#xff09;Lambda 表达式语法 &#xff08;二&#xff09;类型推断 二、函数式接口 &#xff08;一&#xff09;自定义函数式接口 &#xff08;二&#xff09;作为参数传递Lambda 表达式 &#xff08;三&#xff09;Java 内置四…

随身WIFI恢复日记

引言 因为折腾WIFI棒子的过程中&#xff0c;不小心砖了。现在需要重新刷一下机&#xff0c;所以把之前的过程的细节给梳理一下 1 、恢复 使用备份镜像文件恢复随身WIFI&#xff0c;使用MIKO软件将文件刷写到EMMC中。等待一会就好了 2 、原始分区 既然已经恢复成原始镜像了&…

chatgpt赋能Python-python_qrcode解码

Python QR码解码&#xff1a;了解QR码及其在Python中的使用 QR码&#xff08;Quick Response Code&#xff09;也被称为二维条码&#xff0c;是一种可以储存文本、链接等信息的矩阵条码。QR码已广泛应用于各个行业&#xff0c;例如商业广告、政府宣传、电子票据等领域。Python…

python+django+vue医院门诊挂号预约管理系统57wsx

开发语言&#xff1a;Python 框架&#xff1a;django/flask Python版本&#xff1a;python3.7.7 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;PyCharm 主要功能有&#xff1a;管理员功能&#xff1a;系统首页、个人中心、用户管理、医生管理…

RK3568平台开发系列讲解(环境篇)10min带你获取、了解与编译U-Boot源代码

🚀返回专栏总目录 文章目录 一、U-Boot获取二、U-Boot根目录2.1 api/2.2 arch/2.3 board/2.4 cmd/2.5 common/2.6 config/2.7 disk/2.8 drivers/2.9 dts/2.10 env/2.11 fs/2.12 Makefile、Kbuild、Kconfig、config.mk2.13 mak

Redis+LUA脚本结合AOP实现限流

文章目录 1、demo结构2、自定义接口3、编写写LUA脚本4、通过AOP切面识别需要限流的接口编写切面AOP通知类型 5、Redis限流自定义异常构建Redis限流自定义异常声明这个类为全局异常处理器专属日志 6、流量限制器RateLimiterRateLimitAlgApiLimitRateLimitRuleRuleConfig 7、Guav…

消息hook

一、消息hook的定义 消息 Hook&#xff08;Message Hook&#xff09;是一种编程技术&#xff0c;用于拦截、监视和处理计算机程序中传递的消息或事件。它通常用于操作系统、图形界面框架、应用程序框架等软件系统中&#xff0c;允许开发人员在特定的事件发生时执行自定义代码。…

chatgpt赋能Python-python_pubsub

Python PubSub - 一个高效的事件通知机制 在软件开发中&#xff0c;事件驱动编程是一种广泛使用的编程模型。在该模型中&#xff0c;应用程序中的各个组件通过发布和订阅事件来进行通信。Python PubSub是Python中一个有用的事件通知机制&#xff0c;它允许应用程序中不同部分通…

volatile是线程安全的吗?它的底层原理如何实现的?

目录 一、线程安全三要素 二、可见性&#xff08;强制刷新主内存&#xff09; 三、有序性&#xff08;禁止指令重排序&#xff09; 四、总结 一、线程安全三要素 1&#xff09;原子性&#xff1a; 一个操作或者多个操作&#xff0c;要么全部执行成功&#xff0c;要么全部执…

Kali-linux使用NVIDIA计算机统一设备架构(CUDA)

CUDA&#xff08;Compute Unified Device Architecture&#xff09;是一种由NVIDIA推出的通用并行计算架构&#xff0c;该架构使用GPU能够解决复杂的计算问题。它包含了CUDA指令集架构&#xff08;ISA&#xff09;及GPU内部的并行计算引擎。用户可以使用NVIDIA CUDA攻击使用哈希…

chatgpt赋能Python-python_pyusb

了解Python pyusb Python pyusb是Python的USB库&#xff0c;用于与USB设备进行通信。它提供了一个Pythonic的API&#xff0c;使得与USB设备进行通信变得非常简单。 什么是Python pyusb Python pyusb是一个Python的USB库&#xff0c;用于与USB设备进行通信。它是基于libusb的…

golang反向代理设置host不生效

文章目录 一、背景二、排查过程1、打印req.header2、tcpdump抓包分析&#xff08;1&#xff09;先抓取8080端口的请求&#xff0c;查看header差异&#xff08;2&#xff09;抓取目标域名请求体1&#xff09;网关没有配置header,且proxy清空header2&#xff09;网关配置header,且…

WPF MaterialDesign 初学项目实战(6):设计首页(2),设置样式触发器。已完结

原项目视频 WPF项目实战合集(2022终结版) 26P 源码地址 WPF项目源码 其他内容 WPF MaterialDesign 初学项目实战&#xff08;0&#xff09;:github 项目Demo运行 WPF MaterialDesign 初学项目实战&#xff08;1&#xff09;首页搭建 WPF MaterialDesign 初学项目实战&…

微服务开发系列 第五篇:Redis

总概 A、技术栈 开发语言&#xff1a;Java 1.8数据库&#xff1a;MySQL、Redis、MongoDB、Elasticsearch微服务框架&#xff1a;Spring Cloud Alibaba微服务网关&#xff1a;Spring Cloud Gateway服务注册和配置中心&#xff1a;Nacos分布式事务&#xff1a;Seata链路追踪框架…

STL-常用算法(二.拷贝 替换 算术 集合)

开篇先附上STL-常用算法(一)的链接 STL-常用算法&#xff08;一.遍历 查找 排序&#xff09;_小梁今天敲代码了吗的博客-CSDN博客 目录 常用拷贝和替换算法&#xff1a; copy函数示例&#xff1a;&#xff08;将v1容器中的元素复制给v2&#xff09; replace函数示例&#…

06:冯诺依曼计算机

布尔代数&#xff1a;是现代电子计算机的数学和逻辑基础 ---------- 布尔代数与开关电路&#xff1a; ---------- 1945年&#xff1a;冯诺依曼101报告 硬件&#xff0c;操作系统软件、防病毒软件、办公软件、日程生活娱乐软件...... 冯诺依曼体系结构&#xff1a; 算术逻辑单…