波前法及matlab实现
matlab处理波信息

matlab处理波信息Matlab是一种强大的科学计算软件,可以用于处理波信号。
以下是一些常见的用Matlab处理波信息的方法:1. 导入和可视化波信号数据:首先,你需要将波信号数据导入到Matlab中。
可以使用`importdata`函数或`load`函数加载数据文件。
然后,使用Matlab中的绘图函数(例如`plot`)将波信号可视化。
2. 时域分析:通过对波信号进行时域分析,可以获得关于波的时间特性的信息。
在Matlab中,你可以使用`fft`函数进行快速傅里叶变换,计算波信号的频谱。
另外,还可以使用`ifft`函数进行逆傅里叶变换,将频域信号转换回时域信号。
3. 频域分析:频域分析可以提供有关波信号频率特性的信息。
在Matlab中,你可以使用`fft`函数计算频谱,并使用`abs`函数获取幅度谱。
还可以使用`angle`函数获取相位谱。
通过对频谱的分析,可以提取波信号的频率分量和相位信息。
4. 滤波处理:滤波是一种常见的波信号处理技术,用于去除噪声或提取感兴趣的频率成分。
Matlab提供了各种滤波函数,例如`filter`函数用于滤波,`fir1`函数用于设计FIR滤波器,`butter`函数用于设计巴特沃斯滤波器等。
5. 谱分析:谱分析是一种用于估计波信号频谱的方法。
在Matlab中,你可以使用`pwelch`函数或`periodogram`函数进行谱估计。
这些函数可用于计算功率谱密度(PSD)估计,并提供了不同的参数和选项,以满足不同的分析需求。
6. 波形合成:如果你希望生成具有特定频率和幅度特性的波信号,可以使用Matlab中的合成函数。
例如,`sin`函数可以生成正弦波信号,`sawtooth`函数可以生成锯齿波信号,`square`函数可以生成方波信号等。
除了上述方法,还有许多其他功能和工具可用于处理波信号。
Matlab提供了丰富的文档和示例代码,可以帮助你更深入地了解和应用这些功能。
波前重构 matlab -回复

波前重构matlab -回复波前重构是一种数字图像处理技术,常被用于恢复模糊图像,其基本原理是通过分析和重建图像的光学波前来改善图像质量。
在本文中,我们将逐步讲解波前重构的原理、方法和实现步骤,以帮助读者了解这一技术的应用和实践。
第一部分:波前重构的基本原理波前是指光线通过光学系统传输时的相位及振幅的空间分布。
我们可以将光的传播过程看作是一系列的光波圆形传播,传播的过程中会受到媒介的散射、吸收等影响,导致图像模糊。
波前重构的目标就是通过捕获和分析这些波前信息来恢复图像的细节和清晰度。
第二部分:波前传感器和传感器阵列波前传感器是用于捕获波前信息的设备,其工作原理类似于相机。
它能够测量光线的相位和振幅,然后将其转化为电信号。
传感器阵列是由多个波前传感器组成的阵列,它们可以同时捕获多个位置的波前信息。
通过传感器阵列,我们可以获取更多的波前信息,从而提高波前重构的精度和效果。
第三部分:波前重构的数学模型波前重构的数学模型通常用于描述波前的传播过程和重构方法。
其中最常用的数学模型是菲涅尔传播模型,它基于波动光学理论,并假设光场是由波前球传播和菲涅尔补偿组成的。
根据这个模型,我们可以推导出一系列用于重构波前的数学公式和算法。
第四部分:波前重构的实现步骤波前重构的实现通常涉及以下步骤:1. 波前传感器校准:由于传感器的制造和使用过程中可能存在误差,我们需要对传感器进行校准,以确保其准确测量波前信息。
2. 波前数据采集:利用波前传感器或传感器阵列,我们可以采集到目标场景的波前信息,并将其转化为数字信号。
3. 波前重构算法:根据波前重构的数学模型,我们可以使用一系列的算法和方法来重构波前。
常见的波前重构算法包括基于菲涅尔传播的重构算法、逆传播算法等。
4. 图像重建:通过重构的波前信息,我们可以恢复模糊图像,改善其细节和清晰度。
这可以通过使用重建算法将波前信息重新投影到目标图像上来实现。
5. 图像分析和改进:最后,我们可以对重建后的图像进行分析和改进,以进一步优化图像的质量和内容。
哈特曼波前传感器的Matlab仿真

哈特曼波前传感器的Matlab仿真
满祥锟;曾晓东
【期刊名称】《电子科技》
【年(卷),期】2009(22)5
【摘要】目前哈特曼(Hartmann)传感器被越来越广泛的应用.文中介绍了Hartmann波前传感器原理,利用Matlab仿真了单束、双束光入射Hartmann波前传感器时的CCD上光强度图样,结果依然遵循夫琅和费衍射.
【总页数】3页(P17-18,39)
【作者】满祥锟;曾晓东
【作者单位】西安电子科技大学技术物理学院,陕西,西安,710071;西安电子科技大学技术物理学院,陕西,西安,710071
【正文语种】中文
【中图分类】TP212
【相关文献】
1.多通道像素并行输出哈特曼波前传感器的实时质心运算流水线架构设计 [J], 宋璐;王少白
2.剪切干涉仪与哈特曼波前传感器的波前复原比较 [J], 许晓军;陆启生;刘泽金
3.大视场相关夏克-哈特曼波前传感器图像快速匹配算法 [J], 王黄铭; 朱磊; 孔林; 张兰强; 饶长辉
4.优化夏克哈特曼波前传感器的光斑质心探测方法研究 [J], 钱思羽;刘鹏;景文博;
高雪峰;吉雪甫
5.基于片上质心计算的高速哈特曼波前传感器技术 [J], 杨蕊瑜;王帅;张彬;孙年春因版权原因,仅展示原文概要,查看原文内容请购买。
《2024年基于Matlab的光学实验仿真》范文

《基于Matlab的光学实验仿真》篇一一、引言光学实验是物理学、光学工程和光学科学等领域中重要的研究手段。
然而,实际的光学实验通常涉及到复杂的光路设计和精密的仪器设备,实验成本高、周期长。
因此,通过基于Matlab的光学实验仿真来模拟光学实验,不仅能够为研究提供更方便的实验条件,而且还可以帮助科研人员更深入地理解和掌握光学原理。
本文将介绍基于Matlab的光学实验仿真的实现方法和应用实例。
二、Matlab在光学实验仿真中的应用Matlab作为一种强大的数学计算软件,在光学实验仿真中具有广泛的应用。
其强大的矩阵运算能力、图像处理能力和数值模拟能力为光学仿真提供了坚实的数学基础。
1. 矩阵运算与光线传播Matlab的矩阵运算功能可用于模拟光线传播过程。
例如,光线在空间中的传播可以通过矩阵的变换实现,包括偏振、折射、反射等过程。
通过构建相应的矩阵模型,可以实现对光线传播过程的精确模拟。
2. 图像处理与光场分布Matlab的图像处理功能可用于模拟光场分布和光束传播。
例如,通过傅里叶变换和波前重建等方法,可以模拟出光束在空间中的传播过程和光场分布情况,从而为光学设计提供参考。
3. 数值模拟与实验设计Matlab的数值模拟功能可用于设计光学实验方案和优化实验参数。
通过构建光学系统的数学模型,可以模拟出实验过程中的各种现象和结果,从而为实验设计提供依据。
此外,Matlab还可以用于分析实验数据和优化实验参数,提高实验的准确性和效率。
三、基于Matlab的光学实验仿真实现方法基于Matlab的光学实验仿真实现方法主要包括以下几个步骤:1. 建立光学系统的数学模型根据实际的光学系统,建立相应的数学模型。
这包括光路设计、光学元件的参数、光束的传播等。
2. 编写仿真程序根据建立的数学模型,编写Matlab仿真程序。
这包括矩阵运算、图像处理和数值模拟等步骤。
在编写程序时,需要注意程序的精度和效率,确保仿真的准确性。
3. 运行仿真程序并分析结果运行仿真程序后,可以得到光束传播的模拟结果和光场分布等信息。
matlab仿真在光学原理中的应用

MATLAB仿真在光学原理中的应用1. 简介光学是研究光的产生、传播、照明及检测等现象和规律的科学,它在物理学、医学、通信等领域有着重要的应用。
随着计算机科学和数值计算的发展,MATLAB作为一种强大的科学计算软件,被广泛应用于光学原理的仿真和分析中,为光学研究提供了有力的工具和方法。
本文将介绍MATLAB仿真在光学原理中的应用,并通过列举几个典型例子来说明MATLAB在解决光学问题上的优势。
2. 光的传播仿真光的传播是光学研究中的重要内容,MATLAB可以通过数值模拟的方法来进行光的传播仿真。
以下是一些常见的光传播仿真的应用:•光线传播仿真:通过计算光线在不同介质中的折射、反射和衍射等规律,可以模拟光在复杂光学系统中的传播过程。
•光束传输仿真:通过建立传输矩阵或使用波前传输函数等方法,可以模拟光束在光学元件中的传输过程,如透镜、棱镜等。
•光纤传输仿真:通过数值模拟光在光纤中的传播过程,可以分析光纤的传输损耗、模式耦合和色散等问题。
MATLAB提供了许多函数和工具箱,如光学工具箱、光纤工具箱等,可以方便地进行光传播仿真和分析。
3. 光学成像仿真光学成像是光学研究中的重要应用之一,MATLAB可以用于模拟和分析光学成像过程。
以下是一些常见的光学成像仿真的应用:•几何光学成像仿真:根据几何光学理论,可以通过模拟光线的传播和聚焦过程来分析光学成像的特性,如像差、焦距和倍率等。
•衍射光学成像仿真:通过衍射理论和数值计算,可以模拟光的衍射和干涉效应对光学成像的影响,如衍射限制和分辨率等。
•光学投影仿真:通过模拟光束、透镜和光阑等光学元件的组合和调节,可以分析光学投影系统的成像质量和变换特性。
MATLAB提供了丰富的函数和工具箱,如图像处理工具箱、计算光学工具箱等,可以方便地进行光学成像仿真和分析。
4. 激光光学仿真激光是光学研究中的一个重要分支,MATLAB可以用于模拟和分析激光的特性和应用。
以下是一些常见的激光光学仿真的应用:•激光器仿真:通过建立激光器的数学模型和模拟激光的发射过程,可以分析激光器的输出特性和光束质量等。
matlab 透镜波函数计算

matlab 透镜波函数计算Matlab是一种强大的数学计算软件,它可以用来解决许多基础物理问题,包括计算透镜系统中的光学波函数。
在这篇文章中,我们将分步骤说明如何使用Matlab计算透镜波函数。
第一步:建立透镜系统模型为了计算透镜系统的波函数,我们需要先建立一个透镜系统的模型。
这可以通过使用矩阵运算来实现。
要建立一个透镜系统模型,需要考虑透镜的形状、尺寸和折射率,以及从光源引入的光线。
使用Matlab中的矩阵乘法计算得到反射和折射的光线方向。
第二步:计算反射和折射的干涉图案借助已有的透镜系统模型,我们可以计算反射和折射的光线干涉图案。
这可以通过使用波前重建算法来实现,该算法可以从一组反射或折射光线的相位信息中重建出波前完整的信号。
在Matlab中,这可以通过使用快速傅里叶变换(FFT)来实现,从而计算出干涉图案。
第三步:计算透镜的传递函数透镜的传递函数描述了它对入射光的操作,通常可以通过其光学参数计算得到。
对于一个透镜系统,传递函数可以被视为从透镜前表面到透镜后表面的所有光线路径的相位延迟之和。
在Matlab中,可以使用传递函数求和法来计算透镜的传递函数。
第四步:计算透镜系统的波函数通过将干涉图案和透镜传递函数结合起来,可以计算出透镜系统的波函数。
这可以通过将干涉图案与传递函数进行卷积来实现,以得到系统的波函数。
在Matlab中,可以使用卷积定理来计算这个卷积。
第五步:分析结果最后一步是对结果进行分析。
根据所需的应用程序,可以分析波函数的各种属性,包括光强度、相位、偏振等。
可以使用Matlab在各种坐标系中对结果进行可视化和分析。
总结在这篇文章中,我们介绍了使用Matlab计算透镜波函数的过程。
这种方法可以用来模拟和分析透镜系统中的光学现象,并为实际应用程序提供参考。
在实际操作中,需要注意计算精度和模型的合理性,并针对不同的应用程序适当地选择算法。
波前重构 matlab -回复

波前重构matlab -回复什么是波前重构?波前重构是一种通过对波前信息进行采样和重构来恢复传播自由度的光波形状和相位的技术。
它是一种在光学成像和相关领域中广泛应用的方法,旨在提高成像分辨率和减少成像质量损失。
通过重构波前,可以实现光的超分辨成像和衍射限制的突破,为光学成像技术的发展带来了显著的进展。
为什么需要波前重构?在传统的成像过程中,衍射限制是不可避免的,它限制了成像系统的分辨率。
在高分辨率成像任务中,如天文学观测、医学影像等领域,波前重构技术的应用可以突破衍射限制,提高成像质量和分辨率。
此外,波前重构还可以纠正由于介质非均匀性和系统误差引起的光波畸变,从而改善图像质量。
波前重构的原理是什么?波前重构的原理基于光的干涉和衍射理论。
光是一种电磁波,其传播过程可以用波动方程描述。
该方程描述了光波的传播和相位信息,其解即为波前。
波前重构通过对波前信息的采样和处理,可以恢复波前的相位和形状,从而实现图像的重建。
波前采样如何进行?波前采样是波前重构的第一步。
波前传播过程中的相位和幅度信息是波前采样的关键内容。
波前采样可以通过干涉和衍射等方法实现。
干涉法是一种常用的波前采样方法,它利用干涉仪和参考波来记录波前的相位信息。
干涉仪可以将待测波与参考波进行干涉,通过检测干涉图样,可以获得波前的相位分布信息。
衍射法是另一种常用的波前采样方法,它利用物体上的点光源经过光学系统形成的衍射花样来记录波前的相位信息。
衍射花样中的干涉和衍射效应包含了波前的相位和幅度信息。
波前重构如何进行?波前重构是在波前采样的基础上进行的。
波前重构的目标是通过采样得到的波前信息来恢复原始波前的相位和形状。
波前重构一般需要借助计算机和相应的数学算法来进行。
在重构过程中,可以利用插值、逆衍射、最小二乘法等方法来处理波前采样数据,以恢复波前的相位信息。
最终,通过重构得到的波前相位和形状信息可以用于光学成像系统的优化,从而实现超分辨率成像和图像质量的改善。
波前重构 matlab -回复

波前重构matlab -回复如何在MATLAB中进行波前重构。
波前重构是一种通过光束传播路径上的测量数据来恢复光波前形状并校正像差的方法。
在光学领域,波前重构技术被广泛应用于自适应光学、光学成像、激光雷达等领域。
在本文中,我们将讨论如何在MATLAB中进行波前重构。
第一步:准备工作在开始之前,我们需要确保已经安装了MATLAB软件,并且了解一些基本的图像处理知识。
此外,为了进行波前重构,我们还需要收集光束传播路径上的测量数据,并将其保存为适当格式的文件,例如文本文件或MATLAB数据文件。
第二步:导入和处理数据首先,我们需要导入保存的测量数据。
根据测量系统的不同,数据的格式可能会有所不同。
如果数据保存为文本文件,我们可以使用MATLAB中的`importdata`函数将其导入为一个矩阵。
如果数据保存为MATLAB数据文件,我们可以使用`load`命令将其加载为一个变量。
一旦我们导入了数据,我们可以对其进行处理。
通常情况下,测量数据是带有一定噪声的。
我们可以使用MATLAB中的滤波器函数(如`medfilt2`或`imgaussfilt`)来减少噪声的影响。
此外,我们还可以使用插值算法(如二维插值)来填充可能存在的缺失数据。
第三步:重构振幅和相位在波前重构中,我们通常关注两个主要的参数:振幅和相位。
振幅描述了光强的分布,而相位描述了光波的相位信息。
为了重构这两个参数,我们可以使用一系列的数学方法,如傅里叶变换、小波变换或最小二乘法。
对于振幅的重构,我们可以使用傅里叶变换或小波变换。
在MATLAB中,我们可以使用`fft2`函数来进行二维傅里叶变换。
通过对傅里叶变换结果取幅度谱,我们可以得到振幅信息。
对于相位的重构,最常用的方法是使用最小二乘法。
通过最小二乘法,我们可以拟合波前传播模型,并推断出真实的相位分布。
在MATLAB中,我们可以使用`lsqcurvefit`函数来进行最小二乘法拟合。
在拟合过程中,我们需要提供一个初始估计的相位分布,并定义拟合模型。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
有限元二维热传导波前法MATLAB程序•二维热传导有限元•使用高斯消去法解线性方程组的二维热传导有限元程序•波前法的基本概念与算法•使用波前法解线性方程组的二维热传导有限元程序•消元过程•波前法与高斯消去法的效率之比较•小结:波前法的过去、现在和未来波前法是求解线性方程组的一种方法,广泛用于有限元程序。
它最初由英国人(?)B.M. Irons于1970在“国际工程计算方法杂志”上发表。
30多年来,波前法有了不少变种。
本文所用算法,采于法国人Pascal JOLY所著《Mise en Oeuvre de la Méthode des Eléments Finis》。
这本书是我1993年在比利时一家书店买的,书中有一节"波前法",六页纸,解释了基本概念和算法,但没有程序,也没有细节讨论。
我曾花了两个半天的时间,在网上寻找波前法程序,或更详细的资料,没有找到(需要花钱才能看的文献不算)。
倒是看到不少中国人,也在寻找。
一些人说,波前法程序太难懂了。
通过自己编写程序,我同意这些人的说法,确实难。
我还真很少编如此耗费脑力的程序。
完工之后,我曾对朋友老王说,有了算法,编程序还这么难,当初想出算法的人,真是了不起。
现将我对波前法的理解和编程体会解说如下,供感兴趣的网友参考,也为填补网络上波前法空白。
二维热传导有限元波前法和有限元密不可分。
因而,在编写波前法程序之前,必须有个有限元程序。
为了简化问题,最好是能解算一个节点上只有一个自由度的问题的有限元程序,而且要尽可能地简单。
我手边现有的有限元程序都不符合这个要求。
就决定先开发一个解算二维热传导问题的MATLAB有限元程序。
二维热传导问题的微分方程是其中T 是温度,Kx 和Ky 分别是x 和y 方向上的热传导系数,q 是热源。
对于这样的比较经典的二阶微分方程,如何导出有限元表达式?这个问题,是有限元的首要问题!我相信,许许多多学过有限元的人,甚至每天都在用有限元的人,并不真的十分明了。
我自己曾经就是这样。
在我于2005年3月到巴西教书之前,我搞过20年有限元,其中有六年,还是在比利时一个专门开发有限元程序的公司里度过的。
但是,如果您那时问我,任给一个二阶偏微分方程,例如上述热传导方程,如何导出有限元表达?说老实话,不看书,我还真就不会!直到2006年,我教了一遍有限元后,才弄明白(惟教书才是最好的学习)。
其实简单极了:只需将那二阶偏微分方程,乘上一个任意标量函数,然后在某个有限单元上积分。
请看下列推导:即其中,Ωe 是单元面积;Φ 是任意标量函数。
注意在以上积分中,温度要遭受二阶偏导,这很不好。
有限元的精髓,在于通过分步积分,将其中一阶偏导转移到那个任意标量函数Φ 上,这样就可降低一阶温度偏导,改善对它的苛刻待遇。
这得用到您在高等数学最后一章里学过的散度定理(Theorem of divergence):其中,Г 是面积Ω的边界;(反)Δ 是梯度算子;F 和G 是任意两个矢量函数。
对于二维问题,上述散度定理可写为:将此散度定理应用于(2)式中的第一项积分,令得:将此积分结果带入(3)式,得到热传导偏微分方程的弱化表达(weak form):所谓“弱化”,是指对温度函数的可导阶数要求降低了。
在原热传导偏微分方程(1)中,温度函数必须是二阶可偏导函数,而在弱化表达(6)中,温度函数只要一阶偏导就行了。
有限单元法就是以偏微分方程的弱化表达式为出发点的。
现在,到了说明那个任意标量函数,Φ,是何方神圣的时候了。
有限单元法有各种各样的变种,而最常见的,应用最广泛的,是所谓迦辽金法(Galerkin),即将这个任意标量函数,等同于,有限元的插值函数。
迦辽金法的优点是可以最终形成对称劲度矩阵,从而具有较好的数值稳定性。
我们知道,在一个有限单元中,任意一点的值,例如温度,是用节点上的温度表达的。
对于一个四节点双线性单元来说,设四个节点的温度分别是T1,T2,T3,T4,则单元内任意一点的温度T 可表达为其中Ψ1,Ψ2,Ψ3,Ψ4,为插值函数,也称为形函数,定义如下:其中ξ 和η 称为形坐标,取值区间为[-1,1]。
基于式(7),对温度的偏导数可写为:将此二偏导数代入弱化表达式(6),该式就转化为以节点温度为变量的代数方程:到此,为得到原偏微分方程的有限元表达,我们只需将任意标量函数,Φ,依次取为四个插值函数,Ψ1-4,就得到四个代数方程:注意到式(9)-(12)中下标的规律,我们可将这四个方程合并写成矩阵的形式:使用下标表达,式(13)可进一步缩写为:式中对应于下标i = 1…4 的每一个值,下标j 取遍1…4。
式(14)就是热传导偏微分方程(1)的四节点双线性有限元表达,也是我们接下来编写有限元程序的出发点。
使用高斯消去法解线性方程组的二维热传导有限元程序这个程序是专为解一个特殊的热传导问题而设计的。
所解问题是:已知一个无限长圆筒,内径100毫米,外径200毫米,筒内壁表面温度1°C,外壁绝热,求圆筒截面上的温度分布。
圆筒材料各向均质,热传导系数为 1 (单位还得查一下,但也无所谓)。
问题的解答很简单:均布,截面各点温度都是1°C。
为什么?因为外部绝热,没有热量损失。
温度只能是均布。
而内壁温度为1°C,所以到处都是1°C。
因为问题的几何图形简单,有限元网格便容易自动生成。
在以下程序中,第12行至第51行,生成四节点单元的有限元网格。
控制变量有两个,Cdiv 和Tdiv。
前者定义沿圆周分成多少单元;后者定义沿径向即筒壁厚度方向分成多少单元。
如果Cdiv = 8,Tdiv = 2,则所生成有限元网格如下(由第52行子程序DrawFEM画出):第64行使用MATLAB命令syms 定义了两个符号变量ksi(即前面公式中的ξ),eta(η)。
在MATLAB中,可对符号变量进行代数运算,例如定义公式,求导,积分等。
第72行就利用代数运算定义了本文前面给出的四节点单元的形函数。
第76和77行分别对形函数关于ksi 和eta 求导。
第78至第99行,计算这些导数在高斯积分点的数值。
本程序中,每个单元有四个高斯积分点,也就是说,在ksi 和eta 两个方向上,各有二个高斯积分点。
第101至124行,根据式(14)计算单元劲度矩阵,Kelem,并将其装配入总劲度矩阵K。
本问题没有热源,所以在单元循环水平上,不需计算式(14)中的热源积分项。
第127至139行,施加边界条件。
圆筒外壁是绝热条件,即法向热流等于零。
在有限元中,这是自然满足的,所以式(14)中的边界热流积分项为零,不必考虑。
唯一需要考虑的,是圆筒内壁温度等于1°C 。
这种温度给定的边界条件,在数学上叫第一类边界条件。
在有限元技术中,有各种各样的方法施加第一类边界条件。
主要是考虑提高内存效率。
鉴于本程序的目的是进一步开发波前法,不需要仔细考虑如何更有效地施加这种温度给定的边界条件,因而所用的方法是最简单的一种:即将内壁边界节点的各行方程,全部换为T = Tin (Tin = 1°C)。
相应地,将这些行的主元素所占据的列,乘以Tin后,移到等号右边。
这样处理后,就得到待解的线性方程组:K x = F。
第141行,使用本人自编的高斯消去法函数,egauss,解出为未知量x,也就是个节点的温度,都等于1。
这一行,也可直接用MATLAB命令,x = K \ F, 取代。
我使用egauss的目的,是为下一步与波前法解方程比较效率。
程序一:使用高斯消去法解线性方程组的二维热传导有限元程序波前法的基本概念与算法有限元形成的线性方程组的系数矩阵,即刚度矩阵,是稀疏矩阵,也就是说,矩阵里含有许许多多的零元素。
有限元网格节点数目越巨大,非零元素与零元素的比值越小,刚度矩阵越稀疏。
用普通高斯消去法求解这样的线性方程组,完全不考虑矩阵的稀疏性,对大量的零元素也进行加减乘除,结果浪费了大量时间。
不仅如此,应用高斯消去法,因为需要将整个刚度矩阵存在计算机内存里,所需计算机内存量与有限元网格节点未知量总数成平方的关系。
以热传导问题为例。
一千个节点,光存刚度矩阵,就需内存1000 x 1000 x 8 / (1024 x 1024) = 7.8 Mb。
这还没问题。
但若要计算一万个节点的问题,就需要10 x 10 x 7.8 = 780 Mb 来存刚度矩阵。
内存为1 Gb的计算机已经不能计算这样的问题了,因为微软视窗等其它系统程序还需要内存。
您当然可以开始这样的计算。
微软视窗发现内存不够时,会自动启动虚拟内存,也就是把硬盘上的某一块地方,当作内存来使用。
您的计算仍然能进行。
但是,您一定看不见那最终的计算结果,除非几个月内不断电,计算机不出毛病。
原因在于,与内存相比,虚拟内存的存取时间可认为是无限长!在这种情况下,因为普通高斯消去法需要极其频繁地使用虚拟内存,它的解算时间也就无限地延长了。
但如果您在这样的计算机上运行ANSYS,或任何需要花钱买的有限元程序,就会发现,解算同样的问题,只需几分钟。
您甚至可以毫无困难地解算十万个节点的热传导问题。
秘密就在于,这些商业有限元软件,在求解线性方程组时,都尽可能地利用刚度矩阵的稀疏性。
波前法就是这样一种充分考虑了刚度矩阵的稀疏性求解方程的方法。
刚度矩阵为什么会稀疏?因为在有限元中,一个节点的影响,只限于它所连接的那些单元。
为什么?就是因为在前面,我们推导有限元时,在式(2)中,将热传导偏微分方程乘以的那个神奇函数Φ。
我们说过,Φ是任意标量函数。
既然是任意的,当然可以任意选取。
然而我们没有“任意”地、胡乱地选取,而是居心叵测地,让它恰恰等于有限元的插值函数!而这些插值函数,恰恰只在给定单元内部非零,在单元外边一律为零!换句话说,插值函数只是些局部函数。
我们让Φ等于插值函数,它也就具有了这种局部性。
正是Φ的这种局部性,使得一个节点的影响,只限于它所连接的单元。
有限元方法,之所以能够在计算力学领域里令人眼花缭乱的各种各样的计算方法中,独领风骚,傲视群雄,鹤立鸡群,至今几达50年之久,其全部奥妙,皆出于此!为进一步考察这些影响到底有多少,我们来看下面的例子。
使用前面的MATLAB 有限元程序,给Cdiv 的值输入8, Tdiv 输入 2 ,就会生成以下网格。
它将圆周分成8份,厚度分成2份。
图中括弧内是单元号码,其余数字为节点号码。
可以看出,第1节点只与第1和第8单元相连,其影响也就只限于这两个单元。
这里所说的影响,就是在刚度矩阵中,第1和第8单元的所有节点,即第1、2、5、4、22、23节点,要发生关系。
也就是说,在总刚度矩阵(高斯消去法中的K矩阵)中,相应的行与列上的元素非零。
例如在第1行当中,第1、2、5、4、22、23列的元素非零,其余元素为零。