快速多极算法
‘壹’ 关于 世纪 和年代的算法我不是很明白【100分】
世纪公元和年代的算法 本世纪初,美国物理学会(American Institute of Physics)和IEEE计算机社团 (IEEE Computer Society)的一本联合刊物《科学与工程中的计算》发表了由田纳西大学的Jack Dongarra和橡树岭国家实验室的Francis Sullivan 联名撰写的“世纪十大算法”一文,该文“试图整理出在20世纪对科学和工程领域的发展产生最大影响力的十大算法”。作者苦于“任何选择都将是充满争议的, 因为实在是没有最好的算法”,他们只好用编年顺序依次列出了这十项算法领域人类智慧的巅峰之作——给出了一份没有排名的算法排行榜。有趣的是,该期杂志还 专门邀请了这些算法相关领域的“大拿”为这十大算法撰写十篇综述文章,实在是蔚为壮观。本文的目的,便是要带领读者走马观花,一同回顾当年这一算法界的盛 举。
1946 蒙特卡洛方法
在广场上画一个边长一米的正方形,在正方形内部随意用粉笔画一个不规则的形 状,呃,能帮我算算这个不规则图形的面积么?蒙特卡洛(Monte Carlo)方法便是解决这个问题的巧妙方法:随机向该正方形内扔N(N 是一个很大的自然数)个黄豆,随后数数有多少个黄豆在这个不规则几何形状内部,比如说有M个:那么,这个奇怪形状的面积便近似于M/N,N越大,算出来的 值便越精确。别小看这个数黄豆的笨办法,大到国家的民意测验,小到中子的移动轨迹,从金融市场的风险分析,到军事演习的沙盘推演,蒙特卡洛方法无处不在背 后发挥着它的神奇威力。
蒙特卡洛方法由美国拉斯阿莫斯国家实验室的三位科学家John von Neumann(看清楚了,这位可是冯诺伊曼同志!),Stan Ulam 和 Nick Metropolis共同发明。就其本质而言,蒙特卡洛方法是用类似于物理实验的近似方法求解问题,它的魔力在于,对于那些规模极大的问题,求解难度随着 问题的维数(自变量个数)的增加呈指数级别增长,出现所谓的“维数的灾难”(Course of Dimensionality)。对此,传统方法无能为力,而蒙特卡洛方法却可以独辟蹊径,基于随机仿真的过程给出近似的结果。
最后八卦一下,Monte Carlo这个名字是怎么来的?它是摩纳哥的一座以博彩业闻名的城市,赌博其实是门概率的高深学问,不是么?
1947 单纯形法
单 纯形法是由大名鼎鼎的“预测未来”的兰德公司的Grorge Dantzig发明的,它成为线性规划学科的重要基石。所谓线性规划,简单的说,就是给定一组线性(所有变量都是一次幂)约束条件(例如a1*x1+ b1*x2+c1*x3>0),求一个给定的目标函数的极值。这么说似乎也太太太抽象了,但在现实中能派上用场的例子可不罕见——比如对于一个公司 而言,其能够投入生产的人力物力有限(“线性约束条件”),而公司的目标是利润最大化(“目标函数取最大值”),看,线性规划并不抽象吧!线性规划作为运 筹学(operation research)的一部分,成为管理科学领域的一种重要工具。而Dantzig提出的单纯形法便是求解类似线性规划问题的一个极其有效的方法,说来惭 愧,本科二年级的时候笔者也学过一学期的运筹学,现在脑子里能想起的居然只剩下单纯形法了——不过这不也正说明了该方法的简单和直观么?
顺便说句题外话,写过《万历十五年》的黄仁宇曾说中国的传统是“不能从数目字上管理”,我们习惯于“拍脑袋”,而不是基于严格的数据做决定,也许改变这一传统的方法之一就是全民动员学习线性规划喔。
1950 Krylov子空间迭代法
1951 矩阵计算的分解方法
50 年代初的这两个算法都是关于线性代数中的矩阵计算的,看到数学就头大的读者恐怕看到算法的名字已经开始皱眉毛了。Krylov子空间叠代法是用来求解形如 Ax=b 的方程,A是一个n*n 的矩阵,当n充分大时,直接计算变得非常困难,而Krylov方法则巧妙地将其变为Kxi+1=Kxi+b-Axi的迭代形式来求解。这里的K(来源于作 者俄国人Nikolai Krylov姓氏的首字母)是一个构造出来的接近于A的矩阵,而迭代形式的算法的妙处在于,它将复杂问题化简为阶段性的易于计算的子步骤。
1951年由橡树岭国家实验室的AlstonHouseholder提出的矩阵计算的分解方法,则证明了任何矩阵都可以分解为三角、对角、正交和其他特殊形式的矩阵,该算法的意义使得开发灵活的矩阵计算软件包成为可能。
1957 优化的Fortran编译器
说 实话,在这份学术气息无比浓郁的榜单里突然冒出一个编译器(Compiler)如此工程化的东东实在让人有“关公战秦琼”的感觉。不过换个角度想 想,Fortran这一门几乎为科学计算度身定制的编程语言对于科学家(尤其是数学家,物理学家)们实在是太重要了,简直是他们形影不离的一把瑞士军刀, 这也难怪他们纷纷抢着要把票投给了它。要知道,Fortran是第一种能将数学公式转化为计算机程序的高级语言,它的诞生使得科学家们真正开始利用计算机 作为计算工具为他们的研究服务,这是计算机应用技术的一个里程碑级别的贡献。
话说回来,当年这帮开发Fortran的家伙真是天 才——只用23500行汇编指令就完成了一个Fortran编译器,而且其效率之高令人叹为观止:当年在IBM 主持这一项目的负责人JohnBackus在数十年后,回首这段往事的时候也感慨,说它生成代码的效率“出乎了所有开发者的想象”。看来作为程序员,自己 写的程序跑起来“出乎自己的想象”,有时候还真不一定是件坏事!
1959-61 计算矩阵特征值的QR算法
呼, 又是一个和线性代数有关的算法,学过线性代数的应该还记得“矩阵的特征值”吧?计算特征值是矩阵计算的最核心内容之一,传统的求解方案涉及到高次方程求 根,当问题规模大的时候十分困难。QR算法把矩阵分解成一个正交矩阵(什么是正交矩阵?!还是赶紧去翻书吧!)与一个上三角矩阵的积,和前面提到的 Krylov 方法类似,这又是一个迭代算法,它把复杂的高次方程求根问题化简为阶段性的易于计算的子步骤,使得用计算机求解大规模矩阵特征值成为可能。这个算法的作者 是来自英国伦敦的J.G.F. Francis。
1962 快速排序算法
不少读者恐怕和我一样,看到“快 速排序算法”(Quick Sort)这个条目时,心里的感觉是——“这可总算找到组织了”。相比于其他一些对程序员而言高深莫测的数学物理公式,快速排序算法真是我们朝夕相处的好 伙伴——老板让你写个排序算法,如果你写出来的不是快速排序,你都不好意思跟同事打招呼。其实根本不用自己动手实现, 不论是ANSI C,C++ STL,还是Java SDK,天下几乎所有的SDK里都能找到它的某种实现版本。
快速排序算法最早由Tony Hoare爵士设计,它的基本思想是将待排序列分为两半,左边的一半总是“小的”,右边的一半总是“大的”,这一过程不断递归持续下去,直到整个序列有 序。说起这位Tony Hoare爵士,快速排序算法其实只是他不经意间的小小发现而已,他对于计算机贡献主要包括形式化方法理论,以及ALGOL60 编程语言的发明等,他也因这些成就获得1980 年图灵奖。
快速排序的平均时间复杂度仅仅为O(Nlog(N)),相比于普通选择排序和冒泡排序等而言,实在是历史性的创举。
1965 快速傅立叶变换
如 果要评选对我们的日常生活影响最大的算法,快速傅立叶变换算法应该是当仁不让的总冠军——每天当拿起话筒,打开手机,听mp3,看DVD,用DC拍照 ——毫不夸张的说,哪里有数字信号处理,哪里就有快速傅立叶变换。快速傅立叶算法是离散傅立叶算法(这可是数字信号处理的基石)的一种快速算法,它有 IBM 华生研究院的James Cooley和普林斯顿大学的John Tukey共同提出,其时间复杂度仅为O(Nlog(N));比时间效率更为重要的是,快速傅立叶算法非常容易用硬件实现,因此它在电子技术领域得到极其 广泛的应用。
1977 整数关系探测算法
整数关系探测是个古老的问题,其历史甚至可以追溯到欧几里德的时代。具体的说:
给 定—组实数X1,X2,...,Xn,是否存在不全为零的整数a1,a2,...an,使得:a 1 x 1 +a 2 x 2 + . . . + a n x n = 0 这一年BrighamYoung大学的Helaman Ferguson 和Rodney Forcade解决了这一问题。至于这个算法的意义嘛,呃,该算法应用于“简化量子场论中的Feynman图的计算”——太深奥的学问拉!
1987 快速多极算法
日 历翻到了1987 年,这一年的算法似乎更加玄奥了,耶鲁大学的Leslie Greengard和Vladimir Rokhlin提出的快速多极算法用来计算“经由引力或静电力相互作用的N 个粒子运动的精确计算——例如银河系中的星体,或者蛋白质中的原子间的相互作用”,天哪,不是我不明白,这世界真是变得快!
所谓浪花淘尽英雄,这些算法的发明者许多已经驾鹤西去。二十一世纪的头五年也已经在不知不觉中从我们指尖滑过,不知下一次十大算法评选的盛事何时再有,也许我们那时已经垂垂老去,也许我们早已不在人世,只是心中唯一的希望——里面该有个中国人的名字吧!
‘贰’ “算法” 在编程中什么意思
比如你从b地到a地,有许多条路可以走,任何一条路都可以看作一个算法。
编程中解决一个问题同样有很多不同方法,每个方法就是一个算法。
算法里面总有一个最好的,效率最高的,能否做到用效率最高的方法来完成任务,就是一个程序员水平高低的表现之一
‘叁’ 电磁兼容常用分析软件有哪些
国外发展概况
电磁仿真技术中运用的主要计算电磁学方法大致可分为2 类:精确算法和高频近似方法。精确计算方法包括差分法(FDTD,FDFD)、有限元(FEM)、矩量法(MoM)以及基于矩量法的快速算法(如快速多极子FMM 和多层快速多极子MLFMA)等,其中,在解决电大目标电磁问题中最有效的方法为多层快速多极子方法。高频方法一般可归作2 类:一类基于射线光学,包括几何光学(GO)、几何绕射理论(GTD)以及在GTD 基础上发展起来的一致性绕射理论(UTD)等;另一类基于波前光学,包括物理光学(PO)、物理绕射理论(PTD)、等效电磁流方法(MEC)以及增量长度绕射系数法(ILDC)等。PO 高频方法由于计算效率较高,对大目标的适应能力强,因此被广为采用。
基于这些方法,国外不仅形成了众多的预测仿真系统和软件,还建立了相应的EMC 数据库,可开展:1)各种军用平台电磁兼容性设计,包括大型舰船平台的天线布置设计、舱室内EMC 设计、系统内EMC 分析、系统间EMC 分析等;2)平台间EMC 分析,包括舰船编队的EMC 分析;3)EMP(电磁脉冲)仿真、各种载体EMP 效应及适应性分析;4)陆海空天电五维现代化战场电磁环境分析。
目前国外主要的商业软件主要如下:
1、 EMC2000软件
该软件由法国某公司研制,采用的计算方法主要是MoM,FDTD,FVO(有限体积法),PO/GO,GTD,UTD,PTD,ECM(等效电流法),在算法上与Ship EDF基本相同(增加了FVO),两者的分析功能非常接近。据介绍,EMC2000 可以对雷电、静电、电磁脉冲对目标的冲击效应进行仿真分析,可对复杂介质进行时域分析,对孔缝耦合进行计算,但没有RCS 计算功能。
2、 FEKO+Cable Mod软件
该软件由南非某公司研制,采用的数值算法主要是MoM,PO,UTD,FEM(有限元法)以及一些混合算法,在新版软件中增加了多层快速多极子算法(MLFMA),Cable Mod 功能和多种脉冲源(高斯、三角、双指数和斜波脉冲)的时域分析,可为飞机、舰船、卫星、导弹、车辆等系统的全波电磁分析提供解决手段,包括电磁目标的散射分析(图1)、机箱的屏蔽效能分析(图2)、天线的设计与分析(图3)、多天线布局分析(图4)、系统的EMC/EMI 分析、介质实体的SAR 计算、微波器件的分析与设计、电缆束的耦合分析等。
3、 Ansoft-HFSS软件
该软件由美国Ansoft公司研制,采用的主要算法是有限元法(FEM),主要应用于微波器件(如波导、耦合器、滤波器、隔离器、谐振腔)和微波天线设计(图5)中,可获得特征阻抗、传播常数、S 参数及电磁辐射场、天线方向图等参数和结果。该软件与FEKO 最早进入中国市场,并在国内拥有一定数量的用户。
4、 CST-SD 软件
德国CST 公司研制了基于有限积分技术(FIT,该技术类似于FDTD)的仿真软件CST-SD,主要用于高阶谐振结构的设计。它通过散射参数(S 参数)将复杂系统分离成更小的单元进行分析,具体应用范围主要是微波器件,包括耦合器、滤波器、平面结构电路、各种微波天线和蓝牙技术等。图6 是该软件对双指数脉冲信号沿电缆进入机箱后的效应进行仿真分析的结果。
5、 FIDELITY 软件
FIDELITY 软件由Zeland公司研制,主要采用非均匀网格FDTD技术,可分析复杂填充介质中的场分布问题,其仿真结果主要包括:S 参数、VSWR(驻波比)、RLC 等效电路、坡印亭矢量、近场分布和辐射方向图,具体应用范围主要包括微波/毫米波集成电路(MMIC)、RFDCB、RF 天线、HTS 电路和滤波器、IC 内部连接、电路封装等。
6、 IMST-Empire软件
IMST-Empire软件主要采用FDTD 法,是RF 元件设计的标准仿真软件,它的应用范围包括平面结构、连接线、波导、RF 天线和多端口集成,仿真参数主要是S参数、辐射场方向图等。
7、 Micro-Stripe仿真软件
该软件由美国FLOMERICS 公司研制,主要采用传输线矩阵法(TLM)。该软件可对飞机、舰船平台天线布置中的耦合度进行计算,可以对电子设备防雷击、电磁脉冲和静电放电威胁进行分析,可以辅助面天线、贴片天线、天线阵的电磁设计。
8、 ADS软件
该软件是美国安捷伦公司在HP EESOF系列的EDA 软件基础上发展完善起来的大型综合设计软件,主要采用MoM 算法,可协助系统和电路工程师进行各种形式的射频设计,如离散射频/微波模块的集成、电路元件的仿真和模式识别。该软件还提供了一种新的滤波器的设计,其强大的仿真设计手段可在时域或频域内实现对数字或模拟、线性或非线性电路的综合仿真分析与优化。
9、 Sonnet 仿真软件
Sonnet 是一种基于矩量法的电磁仿真软件,是高频电路、微波、毫米波领域设计和电磁兼容/电磁干扰分析的三维仿真工具。主要应用于:微带匹配网络、微带电路、微带滤波器、带状线电路、带状线滤波器、过孔(层的连接或接地)、耦合线分析、PCB 板电路分析、PCB 板干扰分析、桥式螺线电感器、平面高温超导电路分析、毫米波集成电路(MMIC)设计和分析、混合匹配的电路分析、HDI 和LTCC 转换、单层或多层传输线的精确分析、多层/平面的电路分析、单层或多层的平面天线分析、平面天线阵分析、平面耦合孔分析等。
10、 IE3D仿真软件
IE3D 是一个基于矩量法的电磁场仿真工具,可以解决多层介质环境下三维金属结构的电流分布问题,包括不连续性效应、耦合效应和辐射效应。仿真结果包括S 参数、VWSR(驻波比)、RLC 等效电路、电流分布、近场分布、辐射方向图、方向性、效率和RCS等。IE3D 在微波/毫米波集成电路(MMIC)、RF 印制板电路、微带天线、线电线及其它形式的RF 天线、HTS 电路及滤波器、IC 的内部连接及高速数字电路封装方面是一个非常有用的工具。
11、 Microwave Office软件
该软件也是基于矩量法的电磁场仿真工具,是通过2个模拟器实现对微波平面电路的模拟和仿真。“VoltaireXL”模拟器处理集总元件构成的微波平面电路问题,“EMSight”模拟器处理任何多层平面结构的三维电磁场问题。“VoltaireXL”模拟器内设一个元件库,其中无源器件有电感、电阻、电容、谐振电路、微带线、带状线、同轴线等;非线性器件有双极晶体管、场效应晶体管、二极管等。在建立电路模型时,可以调出所用的元件。“EMSight” 模拟器的特点是把修正谱域矩量法与直观的图形用户界面(GUI)技术结合起来,使得计算速度加快许多。它可以分析射频集成电路(RFIC)、微波单片集成电路(MMIC)、微带贴片天线和高速印制电路(PCB)等的电气特性。
12、 ICE WAVE仿真软件
该软件是针对电子产品电磁兼容设计/电磁干扰分析的三维仿真工具,采用FDTD 全波数值方法。应用范围包括:PCB 退耦、辐射、接地、过孔和不连续分析,以及微波元器件、铁氧体、谐振腔、屏蔽盒的电磁分析。
13、 WIPL-D软件
该软件是由WIPL-d.o.o.公司基于MoM算法开发的三维全波电磁仿真设计软件。它采用了最先进的最大正交化高阶基函数(HOBFs)、四边形网格技术等,减少了内存需求和计算时间。据介绍,该软件可用201s 仿真一个58λ长平台的天线布局问题。该软件能解决的电磁问题包括:各种电磁兼容天线设计、复杂平台天线布局问题、复杂平台RCS 计算以及微波无源结构设计。
14、 Singula软件
该软件由加拿大IES 公司开发,采用MoM+PO的混合算法,可用于天线与天线阵、波导与谐振腔、射频电路与微波元器件、电磁散射与RCS、吸收率(SAR)等方面的电磁分析,可以分析复杂平台短波和超短波天线布局问题。
15、 FISC软件
美国Illinois大学于2001年公布的电磁散射分析软件FISC 适用于导弹(图7)、飞机(图8)、坦克等的电磁散射分析,采用的主要方法是多层快速多极子方法(MLFMA),据报道,可以求解未知量达1 千万的电磁散射问题。
16、 XPATCH软件
该软件由美国军方研制,主要采用弹跳射线法(SBR),并与计算机图形学技术紧密结合。在计算中,同时考虑了射线直射时的物理光学近似、物理绕射以及射线的多次反射效应(multi-bounce rays)。在计算射线直射效应(first bounce)时,最花时间的是确定复杂目标的阴影部分和遮挡部分,该软件采用Z-buffering 技术的硬件和软件精确确定这2 部分。阴影部分和遮挡部分确定之后,直射场部分的贡献可由PO 计算。为了计算多次反射效应,从入射波向目标发射一系列平行的射线,对每一条射线在目标上(或目标内)的反射和折射进行跟踪,直到射线离开目标为止。射线的跟踪是根据几何光学原理进行的,在反射点或折射点处的场由几何光学确定,包括极化效应、多层媒质效应等。在射线离开目标时的最后一个反射点,应用物理光学积分计算远区散射场(图9)。叠加所有射线对远区散射场的贡献,即获得总的远区散射场或雷达散射截面。通常,对RCS 的计算而言,1个波长的距离至少需要10 根射线。此软件基于的方法的原理虽然简单,但需要有效的几何CAD 技术和快速的射线跟踪算法。
我个人见到的是ansoft和CTS两个软件使用的比较多。