【math】大规模对称正定稀疏线性方程组的求解与代数多重网格

news2024/9/26 5:22:42

大规模对称正定稀疏线性方程组的求解与代数多重网格

      • 代数多重网格
      • 问题定义
      • 迭代法的优畧
      • 几何多重网格
      • 代数多重网格

代数多重网格

你好!代数多重网格一个很有意思的话题。

问题定义

很多问题都可以抽象为求解下列优化的问题:
在这里插入图片描述
对于图像问题,一方面由于绝大多数模型都只会建立某个像素与它局部之间的关系,因此线性方程组的系数矩阵 A A A通常满足某种特定的稀疏性;另一方面,由于图像分辨率较高,因此线性方程组维度实际上极大,导致快速计算难度较大。
因此,这个问题的****最终核心在于:如何快速求解一个稀疏大规模的对称正定的线性方程组

迭代法的优畧

对于简单迭代法,如雅可比迭代,高斯-塞德尔迭代等,都存在高频快速收敛,低频难以收敛的问题。 简单来说,对于柏松问题:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

几何多重网格

为了解决低频收敛慢的问题,多重网格算法应运而生。 核心思想在于,在细网格上的低频可以变为粗网格上的高频。 注意到对于$ \lambda_{k}$ ,如果N变为N/2实际上可以认为频率变为了原来的两倍,那么收敛性自然会变好。 因此,我们可以先在细网格上迭代,消除了高频误差,然后放到粗网格迭代,消除细网格上的低频误差,然后再在粗网格上refine最终结果,大致流程如下图:
在这里插入图片描述
这个方法实际上是比较简单的,网格如下所示:
在这里插入图片描述
红色的点代表粗网格上的节点,如果我们将网格细化,那么,可以得到细网格的点:
在这里插入图片描述
这些点的值通过粗网格插值而来,也就是说,几何多重网格实际上是依赖于实际的网格,人为设定了粗网格和细网格,从而设置的一种多重网格算法。

注意到这种方法细网格上的节点上一定有粗网格上的节点,因此原来如果粗细网格原来是同一个点,只需要将粗网格上的点赋值到细网格上,如果是新的点,那么需要对它进行插值,假设这个矩阵为 S , f k S,f_{k} S,fk 表示第k层网格上的节点,那么 f k = S ∗ f k − 1 f_{k} =S*f_{k-1} fk=Sfk1 ,因此我们只需要求解线性方程组:
A k − 1 f k − 1 = g k − 1 A_{k-1}f_{k-1}=g_{k-1} Ak1fk1=gk1
之后插值即可。

但实际上这样做是不对的。回到最初的问题,我们要消除的是低频误差,也就是“光滑”误差,粗网格上迭代后的结果实际上和光滑没有太多关系,我们迭代后的结果,实际上是消除了高频的误差,也就是将误差变得光滑了。 因此,我们将误差传到粗网格上实际上是更为合理的,因此我们最终的迭代思路实际上是不断修正误差,即:
f k = f 0 + ∑ k = 1 M e k f_k=f_0 + \sum^{M}_{k=1}{e_k} fk=f0+k=1Mek
其中 e k e_k ek 代表每层网格给出的插值后的补偿误差。
那么,如何建立误差方程呢?
定义残差:
E k = A f k − b E_k =Af_k -b Ek=Afkb
由此,我们有误差方程: A e k = E k Ae_k =E_k Aek=Ek
由于我们希望将低频误差放到粗网格上进行消除,因此我们实际上将 e k e_k ek “限制”到了粗网格上计算,然后再插值回粗网格上进行“误差补偿”。

最终,我们实际上计算了:
K k − 1 e k − 1 ′ = E k − 1 K_{k-1} e^{'}_{k-1} = E_{k-1} Kk1ek1=Ek1
然后插值得到 e k − 1 = S ∗ e k − 1 ′ e_{k-1}=S*e^{'}_{k-1} ek1=Sek1
最后补偿到 f 上。

代数多重网格

是否有一种方法可以依赖于系数矩阵本身的特性,从而设计一种多重网格方法,与实际网格无关,从而得到更好的收敛性呢?实际上是有的,这个方法就是代数多重网格。 由于我们现在没有了实际网格,那么实际上为了使用多重网格技术,我们需要回答两个问题:

  1. 要选择哪些节点为粗网格上的节点
  2. 如何插值
    对于问题1,实际上我们是需要准从两个原则:得到的粗网格节点能够通过插值表示细网格节点,或者说粗网格节点一定原来有和细网格节点相连。另一方面,我们希望粗节点能够尽量少,从而求解线性方程组的规模可以更小。 对于这个问题有个经典方法: 即Ruge提出来的方法

对于问题2,回答了两个子问题:

  1. 插值公式长什么样
    2)粗网格上的线性方程组长什么样

通常如果插值矩阵为 S k S_k Sk ,那么粗网格上的线性方程组的系数矩阵构建为:KaTeX parse error: Expected group after '_' at position 2: S_̲^{T}_k A_kS_k

因此实际上核心还是在于如何插值。

假设 a i j a_{ij} aij表示连接i和j节点的边的权重,同时我们认为残差几乎为0,由此可以得到:

r i = a i i e i + ∑ a i j e j ≈ 0 r_i = a_{ii}e_i + \sum{a_{ij}e_j} \approx 0 ri=aiiei+aijej0
由此:

a i i e i ≈ − ∑ a i j e j a_{ii}e_i \approx- \sum{a_{ij}e_j} aiieiaijej

由于这些边连接的节点可以分为3类:

细网格上的节点 e f e_f ef
粗网格上的节点 e c e_c ec
连接极弱的节点 e w e_w ew
若用C表示粗节点误差集合,F表示细节点误差集合,W表示弱连接集合,可以将求和部分分为三块:

a i i e i ≈ − ∑ j ∈ C a i j e j − ∑ j ∈ F a i j e j a_{ii}e_i \approx- \sum_{j \in C}{a_{ij}e_j} - \sum_{j \in F}{a_{ij}e_j} aiieijCaijejjFaijej
由于弱连接集合的连接已经足够弱,因此我们强制认为这部分的 e j = e i e_j=e_i ej=ei ,由此可以得到新的近似公式:

( a i i + ∑ j ∈ W a i j ) e i ≈ − ∑ j ∈ C a i j e j − ∑ j ∈ F a i j e j (a_{ii} + \sum_{j \in W}{a_{ij}})e_i \approx- \sum_{j \in C}{a_{ij}e_j} - \sum_{j \in F}{a_{ij}e_j} (aii+jWaij)eijCaijejjFaijej
对于粗网格上的 e j e_j ej实际上在粗网格上已经算出,而细网格上的 e j e_j ej 实际上是没有的。 对于这部分有连接的细网格上的 e j e_j ej ,我们找到和它相连的所有粗网格的节点 e j c e_{jc} ejc ,通过公式:
e j = ∑ a j , j c e j c ∑ a j , j c e_j = \frac{ \sum{a_{j,jc}e_{jc}}}{ \sum{a_{j,jc}}} ej=aj,jcaj,jcejc

对它进行近似计算。

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

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

相关文章

安全、稳定的工业蜂窝路由器具有怎样的特性?

一、前言 传统路由器通过电缆或光纤线路访问Internet,在很多场景或区域下存在着很大的局限性,例如在行驶的火车上,在固定电话稀缺或没有其他接入方式的地区都是十分受限的。随着科技的发展,很多行业应用都需要具有更强大功能的路…

3 高级面向对象编程实例

高级OOP 1 继承 是一种基于已有类创建新类的机制 class 子类名 extends 父类{类体; }public class Extends_v1 {public static void main(String[] args) {Extendsclass01 ex new Extendsclass01();} } class Baseclass01{public int num;public void setNum(int n){num n…

java之线程死锁和ThreadLocal的使用

线程死锁: 线程死锁是指两个或者两个以上的线程在执行过程中,由于竞争资源或者彼此通信而造成的一种阻塞的现象,若无外力的作用,它们都将无法继续执行下去。 此时应用系统就处于了死锁状态,这些永远在互相等待的线程称为死锁线程。 如下图…

文本中按规则分组区段随机抽样

【问题】 This is a bit complex, and I greatly appreciate any help! I am trying to randomly sample rows from a .csv file. Essentially, I want a resulting file of unique locations (Locations are specified by Easting and Northing columns of the data file, be…

ServletContext和过滤器

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:JAVA开发者…

BM30 二叉搜索树与双向链表

题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。如下图所示: 数据范围:输入二叉树的节点数0≤n≤1000,二叉树中每个节点的值0≤val≤1000. 要求:空间复杂度O(1)(即在原树上操作&#x…

低代码对比分析,从工程化上看产品的优劣

低代码算是这几年在IT行业内越来越尖锐的讨论了,而且随着这两年大厂的大量裁员,更是亲者痛仇者快的事情,因为很多大厂发现把一些低端的研发岗位干掉了,反而整个体系在工具的辅助运转下,效率更高,执行力更优…

【Python数据分析】Python模拟登录(一) requests.Session应用

最近由于某些原因,需要用到Python模拟登录网站,但是以前对这块并不了解,而且目标网站的登录方法较为复杂, 所以一下卡在这里了,于是我决定从简单的模拟开始,逐渐深入地研究下这块。 注:本文仅为…

Python学习基础笔记五十九——封装和@property

1、私有属性的一个用法: class Room:def __init__(self, name, length, width):self.name nameself.__length lengthself.__width widthdef area(self):return self.__length * self.__widthwei Room(Wei, 2, 1) print(wei.area()) 2、getter和setter&#xf…

Hi3861鸿蒙物联网项目实战:智能照明灯

华清远见FS-Hi3861开发套件,支持HarmonyOS 3.0系统。开发板主控Hi3861芯片内置WiFi功能,开发板板载资源丰富,包括传感器、执行器、NFC、显示屏等,同时还配套丰富的拓展模块。开发板配套丰富的学习资料,包括全套开发教程…

第十篇 1+X考证 Web前端测试题(新)

单选题 1、关于HTML和CSS以下说法错误的是( D ) A、HTML标签中属性的值一定要用双引号或单引号括起来B、HTML空元素要有结束的标签或于开始的标签后加上"/"C、结构与样式完全分离时,结构代码中不涉及任何的样式元素,如f…

Qt之软键盘的实现

文章目录前言一、基于中文汉字数据库1、核心代码2、效果二、基于谷歌拼音输入引擎1、核心代码2、效果前言 Qt5.8版本开始推出了基于QML实现的软键盘功能,在此之前,并没有官方版本的软键盘。本篇主要介绍Qt实现软键盘的两种方案,一种基于中文汉…

[python][GUI]pyside6

------------------------------------------------------------------------------------------------------------------ #非常好资料和教程: 1. Module Index - Qt for Python 2. muziing/PySide6-Code-Tutorial: 可能是最好的PySide6中文教程!用代…

Spring boot 日志直接推送到elasticsearch上

Spring boot 日志直接推送到elasticsearch前言核心依赖elasticsearch配置文件1.url格式如下2.index索引前缀 "xxx"3.maxMessageSize参数数据内容最大值,本文未使用(默认值-1全部数据接收)如下4.BasicAuthentication.java 重写该类用…

详解opencv库函数ellipse()

opencv库函数ellipse()函数可以画扇形,也可以画椭圆。画扇形时只需要将椭圆的长短轴长度设为相同并给定扇形的圆心角即可。 # 参数 1.目标图片 2.椭圆圆心 3.长短轴长度 4.偏转角度 5.圆弧起始角度 6.终止角度 7.颜色 8.是否填充 cv2.ellipse(img_p, (500, 2…

[python] PyMouse、PyKeyboard用python操作鼠标和键盘

1、PyUserInput 简介 PyUserInput是一个使用python的跨平台的操作鼠标和键盘的模块,非常方便使用。支持的平台及依赖如下: Linux - XlibMac - Quartz, AppKitWindows - pywin32, pyHook 支持python版本:我用的是3.6.7 2、安装 直接源码安装…

越南猫年来袭!2023Lazada年货节热销品趋势

距离2023年春节倒计时23天!大家是否对春节假期已经满怀期待了?越南人也和我们一样正期盼着新年到来,越南所有的传统节日都是按照农历来算的,其中春节也是越南重大的节日。春节将至,提前置办年货成了越南人和华人必不可…

MySQL 表的增删改查(进阶篇②)· 联合查询 内连接 外连接 · 自连接 · 子查询 exists · 合并查询 union

接进阶篇①,我们继续学习。 一、联合查询1.1 内连接1.2 外连接1.3 内连接和左右外连接的区别二、自连接三、子查询3.1 单行子查询3.2 多行子查询使用 in 范围匹配多行另一种写法 exists两种写法的区别3.3 在 from 子句中使用子查询四、合并查询unionunion all一、联…

随谈_前端与后端

文章目录一、前言二、前后端分别是什么?2.1. 前端(front end)2.2. 后端(back end)一、前言 最近在学习Vue,打算边学边用,开发一个网页系统。 Vue的话,网上介绍很多,简单…

容器安全的三大挑战

容器凭借其经济高效的优势改变了应用程序的交付方式,随着容器的普遍使用,管理应用程序基础设施的 IT 劳动力和资源也显著减少。然而,在保护容器和容器化生态系统时,软件团队遇到了许多障碍。尤其是习惯于更传统的网络安全流程和策…