C#,码海拾贝(39)——求解“对称正定方程组”的“共轭梯度法”之C#源代码

news2025/1/13 19:50:20

 

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>
        /// <param name="eps - 控制精度</param></return>
        public static void GetRootsetGrad(Matrix mtxLECoef, Matrix mtxLEConst, Matrix mtxResult, double eps)
        {
            int i, k;
            double alpha, beta, d, e;

            // 未知数个数
            int n = mtxLECoef.GetNumColumns();

            // 初始化解向量
            mtxResult.Init(n, 1);
            double[] x = mtxResult.GetData();

            // 构造临时矩阵
            Matrix mtxP = new Matrix(n, 1);
            double[] p = mtxP.GetData();

            double[] pDataCoef = mtxLECoef.GetData();
            double[] pDataConst = mtxLEConst.GetData();

            double[] r = new double[n];

            for (i = 0; i <= n - 1; i++)
            {
                x[i] = 0.0;
                p[i] = pDataConst[i];
                r[i] = pDataConst[i];
            }

            i = 0;
            while (i <= n - 1)
            {
                Matrix mtxS = mtxLECoef.Multiply(mtxP);
                double[] s = mtxS.GetData();

                d = 0.0;
                e = 0.0;
                for (k = 0; k <= n - 1; k++)
                {
                    d = d + p[k] * pDataConst[k];
                    e = e + p[k] * s[k];
                }

                alpha = d / e;
                for (k = 0; k <= n - 1; k++)
                {
                    x[k] = x[k] + alpha * p[k];
                }

                Matrix mtxQ = mtxLECoef.Multiply(mtxResult);
                double[] q = mtxQ.GetData();

                d = 0.0;
                for (k = 0; k <= n - 1; k++)
                {
                    r[k] = pDataConst[k] - q[k];
                    d = d + r[k] * s[k];
                }

                beta = d / e;
                d = 0.0;
                for (k = 0; k <= n - 1; k++)
                {
                    d = d + r[k] * r[k];
                }
                if (Math.Abs(d) < float.Epsilon)
                {
                    break;
                }
                // 满足精度,求解结束
                d = Math.Sqrt(d);
                if (d < eps)
                {
                    break;
                }
                for (k = 0; k <= n - 1; k++)
                {
                    p[k] = r[k] - beta * p[k];
                }
                i = i + 1;
            }
        }
}

}

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

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

相关文章

vue3 script setup 获取父组件函数与参数方法

<script setup>真的可以说是一种非常方便的开发方式了 但没有直接性的setup 拿取父组件的参数和函数就会有点问题 其实vue官方给我提供了defineProps和defineEmits这两个方法是官方提供 不需要引入 直接用就好了 例如这里 我们给子组件传了三个参数 :imgSrc“user.images…

scrcpy 快捷键

可以使用键盘和鼠标在 scrcpy 窗口上执行操作 快捷方式。 在下面的列表中&#xff0c;是快捷方式修饰符。默认情况下&#xff0c;它是 &#xff08;左&#xff09;或&#xff08;左&#xff09;。MODAltSuper 可以使用 进行更改。可能的键是 、 、 和 。例如&#xff1a;–sh…

湖南大学OS-2019期末考试解析

【特别注意】 答案来源于wolf以及网络 是我在备考时自己做的&#xff0c;仅供参考&#xff0c;若有不同的地方欢迎讨论。 【试卷评析】 这张卷子有点老了&#xff0c;部分题目可能有用。如果仔细研究应该会有所收获。 【试卷与答案】 一、选择题&#xff08;15%&#xff…

6、JS-AJAX

6.3、AJAX 6.3.1、AJAX概述 传统的web交互是用户触发一个http请求服务器&#xff0c;然后服务器收到之后&#xff0c;在做出响应到用户&#xff0c;并且返回一个新的页面&#xff0c;每当服务器处理客户端提交的请求时&#xff0c;客户都只能空闲等待&#xff0c;并且哪怕只是…

制作一个电商数据可视化大屏无从下手?看这篇!

01 啥叫可视化大屏&#xff1f; 从字面意思就能看出来&#xff0c;可视化大屏就是有个大屏幕。可视化体现在里面的数据都成了图形和图标&#xff0c; 但是静止的图像也不能完全表现出多报表的结果&#xff0c;可视化大屏是将数据通过图形化、可视化的方式展现在大屏幕上的一种…

【深度学习】BERT变种—百度ERNIE 2.0

ERNIE 2.0 提出了一种持续学习的预训练框架&#xff1a;预训练使用了7种任务&#xff0c;而不是一两种简单的任务。不断引入新的预训练任务&#xff0c;让模型可以持续性地学习不同的预训练任务&#xff0c;并且不会遗忘先前学习的知识&#xff0c;以此让模型能够获得更为全面的…

让小白也能看懂,ChatGPT入门级科普“十问十答”

由于现在GPT火热&#xff0c;360老板已经开始总动员. 白领的日常工作肯定是要发生颠覆性变化的。下面我们就通过自问自答的方式带领小白用户了解一下ChatGPT. 1、ChatGPT到底是什么&#xff1f; ChatGPT 是一个由美国人工智能公司 OpenAI 开发的自然语言处理&#xff08;NLP&…

vue Electron ArcGis 桌面应用 Sqllite3 node-grp:老旧项目的起死回生

最近接收了一个三四年前做的项目。主要技术栈就是vue2electronsqllite3node-gyp。看到这个技术栈&#xff0c;基本可以知道感知这个项目的关键词&#xff1a;vue、Gis地图、本地数据库、桌面客户端。顿时深感亚历山大。 不多说&#xff0c;开干。 第一步&#xff0c;查看项目…

Qemu搭建ARM Vexpress开发环境

Qemu搭建ARM Vexpress开发环境 文章目录 Qemu搭建ARM Vexpress开发环境Qemu简介QEMU安装前的准备工作QEMU 安装的两种方式通过网络在线安装源码编译安装源码获取QEMU依赖库安装编译安装 命令选项qemu的标准选项qemu显示选项网络属性相关选项kvm的网络模型 Ubuntu 双网卡&#x…

阿里高级工程师纯手打造的Spring Cloud Alibaba微服务全彩手册,限时分享

Spring Cloud Alibaba 是阿里巴巴提供的微服务开发一站式解决方案&#xff0c;是阿里巴巴开源中间件与 Spring Cloud 体系的融合。 Springcloud 和 Srpingcloud Alibaba 区别&#xff1f; SpringCloud&#xff1a; 部分组件停止维护和更新&#xff0c;给开发带来不便;SpringC…

msvcr120.dll丢失怎样修复,快速修复msvcr120.dll的方法分享

msvcr120.dll是Microsoft Visual C Redistributable for Visual Studio 2013的一个组件&#xff0c;是一个动态链接库文件。它包含了许多函数和程序&#xff0c;可以被其他程序调用&#xff0c;这些程序使用了Visual C 2013运行时库。在Windows操作系统中&#xff0c;许多软件和…

vxe-table 列表过滤踩坑

vxet-table 官网给的案例&#xff1a;https://vxetable.cn/#/table/base/filter 通过设置 filters 属性和 filter-method 方法可以开启列筛选功能&#xff0c;通过 filter-multiplefalse 设置为单选 如果是服务端筛选&#xff0c;只需加上 filter-config{remote: true} 和 fi…

vue页面缓存失效问题解决

文章目录 一、问题背景二、问题排查三、问题解决 一、问题背景 前端技术栈用的是vue&#xff0c;然后用keep-alive组件进行缓存页面【切换页面不进行刷新页面&#xff0c;保留之前的查询条件及状态等等】 测试提bug&#xff1a;部分页面突然缓存失效了&#xff0c;每次切换都…

易基因:全基因组DNA甲基化和小RNA分析揭示甘蓝型油菜种子的基因组不对称性 | 植物发育

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 多倍体是被子植物基因组进化中的一种持续现象&#xff0c;有助于现存开花植物的多样性。甘蓝型油菜&#xff08;Brassica napus&#xff09;是世界上最重要的被子植物油料作物品种之一&a…

2023年系统分析师上午题

全国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试 2023年上半年 系统分析师 上午试卷 &#xff08;考试时间 9 : 00&#xff5e;11 : 30 共 150 分钟&#xff09; 1. 在答题卡的指定位置上正确写入你的姓名和准考证号&#xff0c;并用正规 2B 铅笔在你写入…

重命名文件名也可以很优雅,看看这些技巧

文件重命名对于许多工作场景来说是非常重要的。比如&#xff0c;当你需要整理大量文件时&#xff0c;一个好的文件命名系统可以帮助你更轻松地管理和查找文件。但是&#xff0c;当需要重命名大量文件时&#xff0c;逐个重命名显然是非常耗时和繁琐的。这时&#xff0c;批量重命…

mysql-8.0.32 数据库的安装 (Linux)

Linux 中 mysql-8.0.32 数据库的安装 缘步骤常见问题解决方案问题一. mysql: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory解决方案&#xff1a;方案一&#xff08;推荐&#xff09;&#xff1a;方案二&a…

【6 微信小程序学习 - 小程序的组件化开发,通信】

1 小程序组件化开发 2 创建一个组件 1 创建 1,在根目录创建components文件夹,自定义组件都放在此处 2,右键新建component,输入名称后悔创建四个文件 3.其中.json中的"component": true,表示这是一个组件 4,编写代码,和其他代码逻辑相同 2 使用 1,要使用组件的父组…

1:操作系统导论

1.1操作系统的定义 •Anoperatingsystemactsanintermediarybetweenuserofacomputerandthecomputer hardware. ◦ 操作系统充当计算机⽤⼾和计算机硬件之间的中介 •Thepurposeofanoperatingsystemistoprovideanenvironmentinwhichausercanexecute programsinaconvenientandeff…

小红书平台,“松弛感”生活十大趋势报告出炉

放眼时尚、教育、情感、职场等各大领域&#xff0c;继氛围感、仪式感、精致感后&#xff0c;今年都在谈论一个词——松弛感。包括现下轻户外、轻运动、轻解压等风口&#xff0c;也都呼应着年轻人对松弛感的追求。 千瓜数据显示&#xff0c;2023年1月-5月&#xff0c;“松弛感”…