多重网格方法(Multigridmethod)

原文链接

多重网格方法是解微分方程的方法。这个方法的好处是在利用迭代法收敛结果的时候速度特别快。并且,不管是否对称,是否线性都无所谓。它的值要思想是在粗糙结果和精细结果之间插值。

前面介绍了Gauss–Seidel方法和Jacobi 方法,现在再用这两个方法来举例。尽管Gauss–Seidel (GS)方法converge更快一些,但其实对于维度很高的系统都很慢。Multigrid(MG)方法的思路是先把问题粗糙化,把原网格投影到一个比较简单的新网格上计算,等到快速收敛以后再经由Interpolation(插值)返回原来的系统。

对于某个工程数学问题(如泊松方程),可以归纳为线形方程Ax = b,  A为n X n矩阵。那么,最终目的是得到所谓的x = A^(-1)b。定义e(t) = x – x(t),当e(t)为小于某个值的时候,可以认为xconverge到了合适的值。但实际上我们比较的是相邻的值。

把A非奇异分解A = B – C,

Bx – Cx = b

x = B(-1) Cx + B^(-1) b

并分开求解x

Bx(t+1) - Cx(t)= b

x(t+1) = B^(-1) Cx(t) + B^(-1) b                  -(1)

把形如B^(-1) C的矩阵称作迭代矩阵,用M表示。

容易发现,

x(t+1) – x = Mx(t) + B^(-1) b – x = Mx(t) +Mx = M (x(t) – x)   -(2)

以上式子与(1)式等价。

另外可令N = B^(-1):

x(t+1) = Mx(t) + Nb            - (3)

不同的迭代方法其实就是A的不同分解法,反映到(3)式就是取不同的M和N值。

比如,在GS方法中B = D – L, C = U, 则(3)式为:

x(t+1) = (D - L)^(-1)Ux(t) + (D - L)^(-1)b            - (4)

分析发现,当n的数值比较大时,以上收敛是极其缓慢的。假设p(i) 是序号为i的原系统有限元基函数(i = 1, 2, … , n),q(i)是粗糙化的网格(i = 1,2, … , m  m<n).

一种粗糙化方法是构造矩阵H,使p = H * q, H为m X n矩阵。令A’ = HAH^T, x’ = Hx, b’ = Hb. 则 A’ x’ = b’ 是一个m维粗化的网格系统。

更加具体来说,对于一个k维的问题,如果k小于一个指定的维数,那么直接用jacob等方法解救可以了。否则,粗糙化为更低的维度比如变为原来的二分之一,最后再把维数变回来。把mesh粗糙化的过程叫做Downv-cycle (从k维到k/2维), 反之叫Up v-cycle.(从k维到2k维)。

时间: 2024-08-26 19:10:41

多重网格方法(Multigridmethod)的相关文章

pro-engineer&amp;UG

Pro/Engineer操作软件是美国参数技术公司(PTC)旗下的CAD/CAM/CAE一体化的三维软件.Pro/Engineer软件以参数化著称,是参数化技术的最早应用者,在目前的三维造型软件领域中占有着重要地位.Pro/Engineer作为当今世界机械CAD/CAE/CAM领域的新标准而得到业界的认可和推广,是现今主流的CAD/CAM/CAE软件之一,特别是在国内产品设计领域占据重要位置.中文名野火外文名Pro/Engineer和WildFire目录1其它名称 2主要特性 3软件版本 4模块

多重网格法简介(Multi Grid)

原文链接 多重网格法是一种用于求解方程组的方法,可用于插值.解微分方程等. 从专业角度讲多重网格法实际上是一种多分辨率的算法,由于直接在高分辨率(用于求解的间隔小)上进行求解时对于低频部分收敛较慢,与间隔的平方成反比.就想到先在低分辨率(间隔较大)上进行求解,因为此时,间隔小,数据量小,进行松弛时的时空耗费小,而且收敛快,而且一个很重要的优点是在低分辨率上对初值的敏感度显然要低于对高分辨率的初值的要求.这一点是显而易见的,例如我们平时看一个很复杂的物体,在很远的地方,你可能就觉得它是一个点或一个

Resnet论文翻译

Resnet Abstract 更深的神经网络更难以训练.我们提出了一个残差的学习框架,以减轻网络的训练,比以前使用的网络要深得多.我们明确地将层次重新定义为参照层次输入学习残差函数,而不是学习未引用的函数.我们提供了全面的经验证据表明,这些残余网络可以大大增加深度,从而优化和提高准确性.在ImageNet数据集上,我们评估残留网络,最多可达152层,比VGG网络深8倍[40],但复杂度较低.在个人网站上,个人网站上出现了3.57%的错误.这是ILSVRC 2015分类任务的第一步.我们还分析了

Unity 崩溃问题解决方法——之一

友情提示:工作随记,不喜勿喷 注意:文艺青年可以略过,暴力青年欢迎采纳 Library文件夹 Unity每次编译都会生成这个东西,不用担心丢失的问题.所以,干掉他! 选中 + Delete   或者  选中 + Shift  + Delete 网上看了很多方法,就觉得这个简单,粗暴,是我喜欢的类型. 优点:上面说了 缺点:如果工程过大,重新编译时间会比较长.(但是对于查Log日志来说,相对快点)

Java TM 已被阻止,因为它已过时需要更新的解决方法

公司的堡垒机需要通过浏览器登陆,且该堡垒机的网站需要Java的支持,最近通过浏览器登陆之后总是提示"java TM 已被阻止,因为它已过时需要更新的解决方法"导致登陆之后不能操作, 但是操作系统中确实已经安装了比较新的JDK,安装的JDK版本是jdk-7u67-windows-i586,因为太烦人,所以决定搞清楚报错的原因,一劳永逸,彻底解决这个问题 准备工作:安装JDK,安装版本jdk-7u67-windows-i586.exe,因为机器的Eclipse还依赖64位的JDK,所以另安

win7 64位系统 PB连接oracle数据库出现“oracle library oci.dll could not be loaded”问题的解决方法

今天与大家分享一个自己的学习笔记,希望能给遇到同样问题的人带来帮助. 不知道大家在win7 64位系统下用 PB连接oracle数据库时,是否遇到过“oracle library oci.dll could not be loaded”问题. 今天,在win7 64位系统下用 PB连接oracle数据库时,一直出现上述错误,在百度上找了很久,都没有找到一个完整的解决方案,咨询了很多人,(他们都说是我的PB和oracle没装好,但我装的时候没出现任何问题,一切都很顺利,而且PB和oracle都能正

C#与数据库访问技术总结(八)之ExecuteNonQuery方法

ExecuteNonQuery方法 ExecuteNonQuery方法主要用来更新数据. 通常使用它来执行Update.Insert和Delete语句. 该方法返回值意义如下: 对于Update.Insert和Delete语句,返回值为该命令所影响的行数. 对于所有其他类型的语句,返回值为-1. Command对象通过ExecuteNonQuery方法更新数据库的过程非常简单,需要进行的步骤如下: (1)创建数据库连接. (2)创建Command对象,并指定一个SQL Insert.Update

android开发之onCreate( )方法详解

onCreate( )方法是android应用程序中最常见的方法之一,那么,我们在使用onCreate()方法的时候应该注意哪些问题呢? 先看看Google Android Developers官网上的解释: onCreate(Bundle) is where you initialize your activity. Most importantly, here you will usually call setContentView(int) with a layout resource d

MAC平台下Xcode配置使用OpenCV的具体方法 (2016最新)

1.序言: 1.1 背景 本人小白一枚,不过因为最近在从事机器视觉方面的工作,所以接触到OpenCV. 因为工作需求,本人要在MAC端使用OpenCV实现一些视觉功能,配置环境成了最大的阻碍,网上查了很多相关资料和博客,都因为版本环境问题屡试屡败,不过经历重重尝试,笔者最终还是配置成功并运行了自己的源码.当然成功的关键还是因为笔者站在了巨人的肩膀上,借鉴了很多网上的教程,为了不误导大家配置的过程,参考文章的地址统一放在文章里,望各位大大看见之后能够理解,废话不说进入正题. 1.2 环境说明 如果