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

news2025/1/16 1:34:09

 

using System;

namespace Zhou.CSharp.Algorithm
{
    /// <summary>
    /// 求解线性方程组的类 LEquations
    /// 原作 周长发
    /// 改编 深度混淆
    /// </summary>
    public static class LEquations
    {
        /// <summary>
        /// 全选主元高斯消去法
        /// </summary>
        /// <param name="mtxLECoef">指定的系数矩阵</param>
        /// <param name="mtxLEConst">指定的常数矩阵</param>
        /// <param name="mtxResult">Matrix对象,返回方程组的解</param>
        /// <return>bool 型,方程组求解是否成功</return>
        public static bool GetRootsetGauss(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();//  GetNumUnknowns();

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

            // 消元
            u = 1;
            for (k = 0; k <= n - 2; 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== 0.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;
                        }

                        t = pDataConst[k];
                        pDataConst[k] = pDataConst[nIs];
                        pDataConst[nIs] = 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;
                }

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

                    pDataConst[i] = pDataConst[i] - pDataCoef[i * n + k] * pDataConst[k];
                }
            }

            // 求解失败
            d = pDataCoef[(n - 1) * n + n - 1];
            if (Math.Abs(d) < float.Epsilon)// d  == 0.0)
            {
                return false;
            }

            // 求解
            pDataConst[n - 1] = pDataConst[n - 1] / d;
            for (i = n - 2; i >= 0; i--)
            {
                t = 0.0;
                for (j = i + 1; j <= n - 1; j++)
                {
                    t = t + pDataCoef[i * n + j] * pDataConst[j];
                }
                pDataConst[i] = pDataConst[i] - t;
            }

            // 调整解的位置
            pnJs[n - 1] = n - 1;
            for (k = n - 1; k >= 0; k--)
            {
                if (pnJs[k] != k)
                {
                    t = pDataConst[k];
                    pDataConst[k] = pDataConst[pnJs[k]];
                    pDataConst[pnJs[k]] = t;
                }
            }

            return true;
        }

    }
 }

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

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

相关文章

chatgpt赋能Python-python_geany

了解Python Geany: 一种强大且高效的Python IDE 介绍 Python Geany是一种非常流行的Python集成开发环境&#xff08;IDE&#xff09;&#xff0c;是由Geany团队开发的。它是一种跨平台的开发工具&#xff0c;可在Windows、Linux和macOS等不同平台上运行。Python Geany提供了支…

Linux常用命令——host命令

在线Linux命令查询工具 host 常用的分析域名查询工具 补充说明 host命令是常用的分析域名查询工具&#xff0c;可以用来测试域名系统工作是否正常。 语法 host(选项)(参数)选项 -a&#xff1a;显示详细的DNS信息&#xff1b; -c<类型>&#xff1a;指定查询类型&am…

小白畅玩免费支持ChatGPT3和4,一键定制自己专属AI

AI爆炸时代。你不用AI&#xff0c;别人就会用AI,当别人用AI,为自己给工作生活赋能时候。生活自在&#xff0c;工作高效&#xff0c;AI正在潜移默化改变我们生活 基于OPEN AI平台 轻松让AI 为你的生活赋能. 总之我现在生活已经离不开AI&#xff0c;帮助了。 不管是工作上问题…

第四范式涂威威:企业专属大模型技术需闭环数据、思维链学习、高落地效率...

‍ 近日&#xff0c;以“智行天下 能动未来”为主题的第七届世界智能大会隆重举办&#xff0c;第四范式副总裁、主任科学家涂威威出席高峰会&#xff0c;与中国工程院院士邬江兴、德国弗劳恩霍夫电子纳米系统研究所所长Harald Kuhn、高通公司中国区董事长孟樸等院士及企业代表&…

chatgpt赋能Python-python_for_in遍历列表

Python for-in循环遍历列表&#xff1a;最简单易用的方法 Python是最流行的编程语言之一&#xff0c;也是许多开发人员的首选工具。其中&#xff0c;for循环是Python最重要的控制结构之一&#xff0c; for-in循环是其中最常用的形式之一。在本文章中&#xff0c;我们将重点介绍…

做流量卡代理,看看人家是怎么赚钱的?

这两年来&#xff0c;流量卡市场可谓是一片欣欣向荣&#xff0c;三大运营商也推出了多款热门套餐。 ​ 作为上网的主要方式&#xff0c;流量卡在这两年可谓是“风光无限”&#xff0c;上至60岁老人&#xff0c;下至16岁的学生都在使用&#xff0c;就连小编的亲戚朋友也都在网上…

chatgpt赋能Python-python_gi

Python-GI: 一个强大的Python库 Python-GI是一个用于Python的开源库&#xff0c;它提供了一个统一的接口来访问底层的系统库。这个库的目的是方便Python开发人员使用底层操作系统或系统库的底层功能。Python-GI是GNOME桌面环境的一部分&#xff0c;它为Python开发人员提供了访…

因果

数字化转型已经喊了很多年了&#xff0c;但是很多人仍然不明白数字化转型是怎么回事&#xff0c;为啥要转。很多人甚至以为数字化转型就是个营销噱头&#xff0c;还有人跟着瞎起哄什么互联网红利消失、中国供给侧和消费侧人口红利消失等等。 我不讲&#xff0c;很多人都不知道。…

字节跳动开源其云原生数据仓库 ByConity

动手点关注 干货不迷路 ‍ ‍项目简介 ByConity 是字节跳动开源的云原生数据仓库&#xff0c;它采用计算-存储分离的架构&#xff0c;支持多个关键功能特性&#xff0c;如计算存储分离、弹性扩缩容、租户资源隔离和数据读写的强一致性等。通过利用主流的 OLAP 引擎优化&#xf…

吴恩达 x OpenAI Prompt Engineering教程中文笔记

Datawhale干货 作者&#xff1a;刘俊君&#xff0c;Datawhale成员 完整课程&#xff1a;《吴恩达ChatGPT最新课程》 &#x1f433;Reasons & Importance Important for research, discoveries, and advancement 对研究、发现和进步很重要 Accelerate the scientific resea…

案例15:Java餐厅外卖管理系统设计与实现开题报告

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

一步步教你安装RabbitMQ Server在Ubuntu上,并让其支持远程访问!

文章目录 前言1.安装erlang 语言2.安装rabbitMQ3. 内网穿透3.1 安装cpolar内网穿透(支持一键自动安装脚本)3.2 创建HTTP隧道 4. 公网远程连接5.固定公网TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 转载自cpolar内网穿透的文章&#xff1a;无公网IP&…

针对自主泊车的多相机视觉惯导同时定位与建图方案

文章&#xff1a;Multi-Camera Visual-Inertial Simultaneous Localization and Mapping for Autonomous Valet Parking 作者&#xff1a;Marcus Abate, Ariel Schwartz, Xue Iuan Wong, Wangdong Luo, Rotem Littman, Marc Klinger, Lars Kuhnert, Douglas Blue, Luca Carlone…

chatgpt赋能Python-python_geohash

Python GeoHash: 将位置信息转换为字符串 在现代生活中&#xff0c;我们经常需要处理和分析大量的位置信息&#xff0c;包括地图、GPS、定位等。而一种流行的做法是将位置信息转换为字符串&#xff0c;并使用该字符串进行存储、传输和查询。GeoHash就是一种将位置信息压缩为字…

Tomcat之服务管理页面manager部署

一、tomcat服务管理页面manager简介 Tomcat的管理页面Manager是一个Web应用程序&#xff0c;用于管理Tomcat服务器的部署和操作。它提供了一个易于使用的界面&#xff0c;可以通过Web浏览器访问。Manager可以帮助管理员对Tomcat服务器进行以下操作&#xff1a; 部署/卸载Web应…

chatgpt赋能Python-python_gil

简介 Python&#xff08;特别是 CPython 实现&#xff09;有一个全局解释器锁&#xff08;Global Interpreter Lock&#xff0c;简称 GIL&#xff09;&#xff0c;它的作用是确保只有一个线程可以执行 Python 代码。这让多线程 Python 程序的并发性有所限制。 为什么需要 GIL…

谁在杀死 ChatGPT ?

作者| Mr.K 编辑| Emma 来源| 技术领导力(ID&#xff1a;jishulingdaoli) AI浪潮汹涌而来&#xff0c;离我们越来越近&#xff0c;有时候近到只差一个APP的距离。很多人把AI科技可能带来的全方位社会变革&#xff0c;称之为第四次科技革命&#xff0c;把ChatGPT称为“第四次科…

【010】C++运算符详解

C运算符详解 引言一、运算符概述二、算术运算符三、复合运算符四、关系运算符五、逻辑运算符六、位运算符&#xff08;二进制位运算&#xff09;6.1、& 按位与6.2、| 按位或6.3、~ 按位取反6.4、^ 按位异或6.5、<< 左移&#xff1a;左边丢弃&#xff0c;右边补零6.5、…

MySQL高级篇——排序、分组、分页优化

导航&#xff1a; 【Java笔记踩坑汇总】Java基础进阶JavaWebSSMSpringBoot瑞吉外卖SpringCloud黑马旅游谷粒商城学成在线MySQL高级篇设计模式牛客面试题 目录 5. 排序优化 5.1 排序优化建议 5.2 测试 5.2.1 案例验证 5.3.2 练习 5.3 范围查询时索引字段选择 5.4 filesor…

chatgpt赋能Python-python_fem

Python在有限元分析中的应用 什么是有限元分析 有限元分析&#xff08;Finite Element Analysis, FEA&#xff09;是一种针对工程结构、材料及其它物理现象进行数值仿真的方法。它通过将结构或者物理现象的连续域分割成有限个小元素&#xff0c;再在每个小元素中建立数学模型…