C#,码海拾贝(29)——求解“大型稀疏方程组”的“全选主元高斯-约去消去法”之C#源代码,《C#数值计算算法编程》源代码升级改进版

大型稀疏矩阵线性化方程组的数值求解问题 广泛存在于工程实践尤其是计算机仿真领域 如水力管网计算,电力系统的大型导纳矩阵计算,高阶偏微分方程的数值求解,以及铸件充型过程与凝固过程的数值模拟等。
经常出现在科学和工程计算中, 因此寻找稀疏线性方程组的高效计算方法及其并行算法是提高科学与工程应用问题计算效率的有效途径。
这方面的研究始于 20 世纪 60 年代然而至今仍未见任何公诸于世的高效的数值解法 计算准确~ 快速又节省内存。
所谓稀疏矩阵,是指矩阵中大多数元素为零元素。而大型稀疏矩阵, 顾名思义是指矩阵的阶数很大的稀疏矩阵 比如阶数大于 10 万甚至 100 万或更大。鉴于稀疏矩阵的特点 在存储时不必存储矩阵中的零元素 只存储矩阵中的非零元素 这种存储方式称之为稀疏矩阵的压缩存储. 通常 稀疏矩阵的存储方式有两种: 三元组法与十字链表法。

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 GetRootsetGgje(Matrix mtxLECoef, Matrix mtxLEConst, Matrix mtxResult)
        {
            int i, j, k, nIs = 0, u, v;
            double d, t;

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

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

            // 消元
            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)
                {
                    return false;
                }

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

                    t = pDataConst[k];
                    pDataConst[k] = pDataConst[nIs];
                    pDataConst[nIs] = t;
                }

                if (pnJs[k] != k)
                {
                    for (i = 0; i <= n - 1; i++)
                    {
                        u = i * n + k;
                        v = i * n + pnJs[k];
                        t = pDataCoef[u];
                        pDataCoef[u] = pDataCoef[v];
                        pDataCoef[v] = t;
                    }
                }

                t = pDataCoef[k * n + k];
                for (j = k + 1; j <= n - 1; j++)
                {
                    u = k * n + j;
                    if (Math.Abs(pDataCoef[u]) > float.Epsilon) 
                    {
                        pDataCoef[u] = pDataCoef[u] / t;
                    }
                }

                pDataConst[k] = pDataConst[k] / t;
                for (j = k + 1; j <= n - 1; j++)
                {
                    u = k * n + j;
                    if (Math.Abs(pDataCoef[u]) > float.Epsilon)
                    {
                        for (i = 0; i <= n - 1; i++)
                        {
                            v = i * n + k;
                            if ((i != k) && Math.Abs(pDataCoef[v]) > float.Epsilon)
                            {
                                nIs = i * n + j;
                                pDataCoef[nIs] = pDataCoef[nIs] - pDataCoef[v] * pDataCoef[u];
                            }
                        }
                    }
                }

                for (i = 0; i <= n - 1; i++)
                {
                    u = i * n + k;
                    if ((i != k) && Math.Abs(pDataCoef[u]) > float.Epsilon)
                    {
                        pDataConst[i] = pDataConst[i] - pDataCoef[u] * pDataConst[k];
                    }
                }
            }

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

            return true;
        }
 

    }
}
 

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

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

相关文章

maya超大图分区渲染

需求 使用maya 一般是用来渲染影视动画&#xff0c;分辨率一般是1080P&#xff0c;2k&#xff0c;或者4K。有时候渲染的图片会用来做海报等打印使用&#xff0c;需要渲染一些超大图&#xff0c;虽然maya支持8K的渲染输出。 但是由于内存等限制&#xff0c;低配电脑往往出现“/…

Maya灯光【电影级灯光渲染-基础光】

平行光&#xff1a; 1、色温&#xff08;一般白炽灯色温是8000&#xff09;&#xff1a; 2、Exposure: 调整幅度大&#xff0c; 3、idensity&#xff1a; 强度变化更柔和 4、angle&#xff08;太阳光本来是平行光&#xff0c;因为空气中含有灰尘颗粒&#xff0c;导致照射过…

手机安卓Termux搭建Hexo博客网站,发布公网访问

文章目录 1. 安装 Hexo2. 安装cpolar内网穿透3. 公网远程访问4. 固定公网地址 转载自cpolar极点云的文章&#xff1a;安卓手机使用Termux搭建Hexo个人博客网站【内网穿透公网访问】 Hexo 是一个用 Nodejs 编写的快速、简洁且高效的博客框架。Hexo 使用 Markdown 解析文章&#…

maya计算机内存不足请保存,Maya渲染时提示内存不足的六种解决办法

在maya渲染时&#xff0c;由于我们的场景文件过于复杂&#xff0c;或者材质复杂以后&#xff0c;可能导致无法启用高质量的渲染工作&#xff0c;这个时候&#xff0c;我们就需要做一些合适的处理&#xff0c;以保证渲染工作的正常进行&#xff0c;通过此经验&#xff0c;分享给…

如何用maya 渲染论文彩图 (occulusion效果)

本文指导如何使用Maya来渲染一些用于论文的彩图,效果如下&#xff1a; 本例子所用的maya版本 maya2015 步骤如下&#xff1a; 一、初始环境设置 1.打开 maya , 在新场景 &#xff0c;确保一些环境设置。 勾上 Mayatomr.dll 中的 两个选项 二、顶点上色 由于脚本中使用的命名的…

maya前台渲染插件mel脚本工具

一.概述&#xff1a; maya使用 batch render 后台批量渲染时&#xff0c;有时会出错&#xff0c;无法进行。还有一些情况需要补渲染出错帧&#xff0c;此时只要文件maya能打开&#xff0c;就可以进行前台窗口渲染。maya默认提供sequence render渲染命令&#xff0c;如下图&…

咸鱼Maya笔记—渲染基础

咸鱼Maya笔记—渲染基础 渲染的概念渲染算法渲染器公用属性 在场景或角色材质灯光环节结束后&#xff0c;接下来可以将三维场景中的场景模型、角色模型和光影效果等转化输出成最终的图片或者视频&#xff0c;这就需要用到Maya渲染方面的知识了。 渲染的概念 渲染&#xff0c;英…

玛雅云渲染计算机设置,maya渲染设置

自定义渲染设置(Render Setup)窗口的布局 通过停靠、取消停靠和重新排列渲染设置编辑器,创建最适合您工作流的布局。 选择“渲染 - 标准”(Rendering - Standard)或“渲染 - 专家”(Rendering - Expert)工作区,随即系统会自动停靠“渲染设置”(Render Setup)和“特性编辑器”…

Maya场景渲染(一)

这次动画我主要负责的一部分&#xff0c;就是渲染&#xff0c;渲染可以说是动画中最初效果的一部分&#xff0c;如何把Maya中生硬的模型打造出光影效果优秀&#xff0c;阴影层次分明的画面&#xff0c;是渲染所需要完成的工作。特别是对于我们这次的写实风格的CG动画来说更是如…

chatgpt赋能python:Python中输入怎么写?完整教程

Python中输入怎么写&#xff1f;完整教程 如果你正在学习Python编程&#xff0c;那么输入是你必须掌握的重要概念之一。在Python中&#xff0c;输入是指将数据从用户的键盘输入到程序中。这些数据可以是字符串、整数、浮点数或其他任何类型的值。本文将提供有关Python中输入的…

Python下载和安装

前言 Python是当下流行的通用编程语言&#xff0c;简单易学、容易上手&#xff0c;且“钱”景广阔。 在网络爬虫、数据挖掘分析、人工智能、运营运维、日常工作效率提升&#xff0c;无不有Python的影子。 因此&#xff0c;今天跟大家分享Python的下载和安装教程。 第一步&…

下载Python特别慢怎么办?

一般我们下载python都是去官网&#xff08;Welcome to Python.org&#xff09;这个网址去下载的&#xff0c;但是下载速度特别特别慢&#xff0c;哪怕家里是千兆网也要20分钟&#xff08;反正我家是这样&#xff09;&#xff0c;那有什么好方法来解决这个问题吗&#xff1f; 有…

如何快速下载Python解决在官网下载缓慢问题以及如何安装Python

不知道你们碰到过这样的情况没有&#xff0c;在Python官网下载Python却很慢&#xff0c;刚开始我还以为是被限速了&#xff0c;后来才了解到这是因为Python官网的服务器是在外网&#xff0c;所以呢那我找到了一个Python的国内下载网址&#xff1a;CNPM Binaries Mirror (npmmir…

2021:Python的下载安装教程(很详细,初学者也能懂)

文章目录 Python的下载安装配置环境变量喜欢技术的&#xff0c;一起进群交流学习吧&#xff01;&#xff01;&#xff01; Python的下载安装 1.进入Python的官网&#xff0c; http://www.python.org/download/ &#xff0c;这里以下载Windows的Python为例 2.选择下载的版本是…

python软件下载安装教程,如何下载和安装python

python下载安装教程 首先打开浏览器&#xff0c;百度搜索【python】。出现搜索结果后&#xff0c;再进入下图所示的官网中。进入官网后&#xff0c;鼠标移至【download】再选择自己的系统。进入下载页面后&#xff0c;再选择python的版本。 下载完成后&#xff0c;再点击打开…

Python的下载安装(手把手教学)

程序员养成日记第一天&#xff1a;从自主下载安装软件开始~~~ 目录 windows版本 MacOS版本 windows版本 1、进入Python官网 https://www.python.org/downloads/ 2、点击Downloads中的Windows版本 3、进入Windows版本&#xff0c;进行Python版本的挑选&#xff0c;建议P…

P7960 [NOIP2021](洛谷) 报数(筛数)

题目传送门 这道题我们只要把十进制下有七的数筛出啦就万事大吉了 类似于埃氏筛 for(int i1;i<10000100;i){if(a[i])continue;if(check(i)){for(int ji;j<10000100;ji)a[j]1;continue;}nx[ls]i;lsi; } 坑点 数组开大一百左右 因为当X为时 X的下一个数会大于 AC代…

【洛谷P7960】[NOIP2021] 报数【筛法】

P r o b l e m l i n k Problem~link Problem link 分析&#xff1a; 筛子 当前数 x x x如果被标记 就跳过 看 x x x是否含有 7 7 7 如果有就把 x x x的倍数都标记 记录下下一个报的数即可 CODE&#xff1a; #include<iostream> #include<cstdio> #include<…

2018年六月前十超级计算机,CPU天梯图2018年6月最新版 六月台式电脑CPU性能排行 (全文)...

年中618网购狂欢节临近&#xff0c;受不少商家降价促销活动利好&#xff0c;近期DIY装机的朋友也明显多了起来。对于装机朋友来说&#xff0c;最重要的是选CPU和显卡了&#xff0c;今天“电脑百事网”带来了CPU天梯图2018年6月最新版&#xff0c;可以秒懂各平台各型号处理器性能…

英特尔宣布 18 核桌面处理器 Skylake-X

&#xff08;点击上方公众号&#xff0c;可快速关注&#xff09; 来源&#xff1a;Solidot http://www.solidot.org/story?sid52580 在 AMD 宣布了 16 核桌面处理器 Threadripper 两周之后&#xff0c;原本在核心数量上落后的芯片巨人透露了 18 核桌面处理器 Skylake-X。 英特…