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

news2024/11/28 10:51:23

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/576855.html

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

相关文章

天天被开发怼?4个方法区分bug前后端归属,我再也不背锅了!

“开发都这么不友善吗&#xff1f;” 有朋友跟我说&#xff0c;刚上岗经常分不清bug是前端还是后端&#xff0c;一直需要开发帮忙重新指派&#xff0c;甚至还会被开发拿来吐槽.... 其实不是开发态度不好&#xff0c;而是对于前后端分离的应用&#xff0c;既需要进行功能测试&am…

什么是网络安全?如何让普通人简单的了解网络安全

一、介绍网络安全 可以介绍一下河南郑州的网络安全科技馆。网络安全科技馆设置个人安全、政企安全、社会安全、综合竞技四个主展区&#xff0c;帮大家普及网络安全知识。首先&#xff0c;可以从个人安全展区开始游览&#xff0c;了解我们身边的网络安全&#xff0c;原来网络安…

调幅波解调-二极管峰值包络检波器【Multisim】【高频电子线路】

目录 一、实验目的与要求 二、实验仪器 三、实验内容与测试结果 1.观测输入、输出波形&#xff0c;估算检波效率&#xff08;D1接法不同&#xff0c;分别观测&#xff09; 2.观察惰性失真波形(C1100nF&#xff0c;其他参数保持不变) 3.观测负峰切割失真(ma0.8&#xff0c…

【目标检测实验系列】AutoDL线上GPU服务器租用流程以及如何用Pycharm软件远程连接服务器进行模型训练 (以Pycharm远程训练Yolov5项目为例子 超详细)

目录 1. 文章主要内容2. 租用AutoDL服务器详细教程2.1 注册AutoDL账号&#xff0c;并申请学生认证(学生认证有优惠&#xff0c;如果不是学生可以忽略此点)2.2 算力市场选择GPU&#xff0c;并选择初始化配置环境2.3 控制台参数解析&#xff0c;并使用相关参数登录Xftp(Windows与…

Spring Boot如何实现OAuth2授权?

Spring Boot如何实现OAuth2授权&#xff1f; OAuth2是一种授权框架&#xff0c;用于授权第三方应用程序访问受保护的资源。在Web应用程序中&#xff0c;OAuth2通常用于授权用户访问受保护的API。 在本文中&#xff0c;我们将介绍如何使用Spring Boot实现OAuth2授权。我们将使…

5-python的Number类型

内容提要 主要介绍python中的Number类型&#xff1a; python的类型转换&#xff0c;oct()、hex()、bin()函数的使用。 python的整数表示&#xff1a;十进制、二进制、八进制、十六进制。&#xff08;*&#xff0c;0b&#xff0c;0o&#xff0c;0x&#xff09; python中ASCII码…

springboot+java+ssm教材管理系统87k61

教材管理系统&#xff0c;主要的模块包括查看主页、个人中心、教师管理、学生管理、教材分类管理、教材信息管理、个体预订管理、取消预订管理、集体预订管理、集体取消管理、系统管理等功能。系统中管理员主要是为了安全有效地存储和管理各类信息&#xff0c;还可以对系统进行…

开发微信公众号本地调试【内网穿透】

文章目录 前言1. 配置本地服务器2. 内网穿透2.1 下载安装cpolar内网穿透2.2 创建隧道 3. 测试公网访问4. 固定域名4.1 保留一个二级子域名4.2 配置二级子域名 5. 使用固定二级子域名进行微信开发 转载自cpolar内网穿透的文章&#xff1a;微信公众号开发&#xff1a;对接本地开发…

【QT】windows下OpenSSL的使用

设计需求 在QT端实现对字符串的加密与解密 OpenSSL下载教程 本人采用 Win64OpenSSL-1_1_1t.msi&#xff0c;百度网盘下载链接 链接&#xff1a;https://pan.baidu.com/s/1vg4s_1JmCpa68TMc1F2gMw 提取码&#xff1a;u4js OpenSSL安装参考链接 OpenSSL使用的参考链接 OpenSS使用…

onceperrequestfilter 和 webmvcconfigurer 区别

概述 在使用Spring框架进行Web开发的时候,我们经常会遇到需要对每个请求做一些统一的处理的情况。例如,我们可能需要在每个请求到达Controller之前进行身份验证,或者在每个请求结束后记录请求的日志信息。这时候,我们可以使用两种不同的方式来实现这些功能:onceperreques…

一款免费无广、简单易用的安全软件:火绒安全软件

名人说&#xff1a;往者不可谏&#xff0c;来者犹可追。——语出《论语微子篇》 Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; o(‐&#xff3e;▽&#xff3e;‐)o很高兴你打开了这篇博客&#xff0c;跟着步骤一步步尝试安装吧。✧ 目录…

Linux-基础篇:虚拟机环境搭建

目录 1、linux介绍 2、安装vm和centos 2.1、vmware下载 2.2、Centos 下载地址 3、虚拟机三种网络连接方式 3.1、桥接模式 3.2、NAT模式 3.3、主机模式 4、虚拟机克隆 5、虚拟机快照 6、虚拟机迁移和删除 7、安装vmtools 7.1、vmtools作用 7.2、安装vmtools步骤 …

django+vue+python 协同用过滤电商推荐系统w58n0

现在人们足不出户就可以购物&#xff0c;聊天&#xff0c;消费&#xff0c;我们的生活越来越智能&#xff0c;越来越人性化&#xff0c;随之而来的就是让它更懂你&#xff0c;给你推荐你可能喜欢的东西&#xff0c;这样你就不必再费力去找你喜欢的东西&#xff0c;既节约了你的…

博客系统前端页面代码实现及页面展示(代码版)

hi,大家好,今天为大家带来博客系统的前端代码及页面展示 我们使用VS code 这个编码工具来编写代码 博客系统前端页面分为四个部分 1.博客列表页 2.博客编辑页 3.博客登录页 4.博客详情页 &#x1f367;1.博客列表页 <!DOCTYPE html> <html lang"en"&…

关于linux的ssh(出现的问题以及ubuntu的ssh配置)

目录 Ubuntu进行ssh连接 关于ssh报错排错 备注&#xff1a;防火墙和selinux可能对ssh连接存在限制&#xff0c;但是我在操作的时候并没对我照成影响 查看selinux状态 ssh_config和sshd_config的区别 Ubuntu进行ssh连接 1.首先需要安装SSH服务器&#xff0c;在ubuntu终端输…

强化学习与ChatGPT:快速让AI学会玩贪食蛇游戏!

大家好&#xff0c;我是千寻哥&#xff0c;现在自动驾驶很火热&#xff0c;其实自动驾驶是一个很大的概念&#xff0c;主要涉及的领域包括强化学习以及计算机视觉。 今天给各位讲讲强化学习的入门知识&#xff0c;并且手把手和大家一起做一个强化学习的Demo。 一、 浅谈强化学习…

基于SSM的酒店客房管理系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 酒店管理系统是一款高…

Java 集合 - 集合框架概述

文章目录 1.集合框架体系结构2.Collection 接口2.1 Iterator2.1.1 使用迭代器遍历集合2.1.2 使用迭代器删除集合元素2.1.3 Iterator 迭代器的 fail-fast 机制 2.2 Iterable2.3 List 集合2.4 Set 集合2.5 Queue 3.Map 集合 Java 集合框架&#xff08;Java Collections Framework…

Java 集合 - Set 接口

文章目录 1.概述2.HashSet3.LinkedHashSet4.TreeSet5.选择合适的 Set 实现6.总结 1.概述 Set 接口的定义非常简单。它本质上是一个 Collection&#xff0c;但是要求该集合不能有重复的元素。换句话说&#xff0c;如果尝试将一个元素添加到 Set 中&#xff0c;而该元素已经存在…

FPGA实现ESP8266驱动且进行数据包收发

一. 简介 本次将使用正点原子的ESP8266 WIFI模块&#xff0c;来实现PC与FPGA之间的TCP通讯&#xff0c;其中ESP8266与FPGA之间的接口是UART。 二. 正点原子的ESP8266 WIFI模块介绍 模块实物图如下&#xff0c;到手就可以使用了&#xff0c;RST和IO_0两个IO口不接或者接高电平…