学习模式上的记录之数值计算篇-显式和隐式

本文探讨了显式和隐式方程的区别,涉及数学求解策略,显式用于动力学问题的直接求解,而隐式涉及牛顿迭代法适用于静力学问题。文章还详细解释了在CFD中的应用,包括显格式差分方程和隐格式CN格式,以及它们在稳定性和计算效率上的对比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前理解的是,未知数(所要求解的变量)分布在等式的两边就是隐式,在一边就是显式,但是跟X哥讨论的时候,X哥说‘表达成时间项,应该算是显式了’,想再求证一下,就把显式和隐式表达总结在这里。
查到这个博文有这么讲的:
“*所谓显式和隐式,是指求解方法的不同,即数学上的出发点不一样。并不是说显式只能求动力学问题,隐式只能求静力学问题,只是求解策略不通。

显式求解是对时间进行差分,不存在迭代和收敛问题,最小时间步取决于最小单元的尺寸。过多和过小的时间步往往导致求解时间非常漫长,但总能给出一个计算结果。解题费用非常昂贵。因此在建模划分网格时要非常注意。

隐式求解和时间无关,采用的是牛顿迭代法(线性问题就直接求解线性代数方程组),因此存在一个迭代收敛问题,不收敛就的不到结果。

两者求解问题所耗时间的长短理论上无法比较。实际应用中一般感觉来说显式耗时多些。由于两者解题的出发点,所以一般来说显式用于求解和时间相关的动力学问题。隐式用来求解和时间无关的静力学问题。但也不是绝对的。比如,用隐式求解时,为了克服迭代不收敛,改用显式算,但是要多给点时间,这样虽然克服了不收敛的问题,但是求解的时间费用也是相当客观的。另外,隐式也可以求解动力学问题。*”
参见:https://www.yisu.com/zixun/108221.html
复习一下泰勒定理:

其实是这么个引入逻辑:
显/隐方程→显/隐函数→显/隐式→显/隐式方法
这里先提醒一下,注意函数三要素:定义域、值域、对应法则。尤其注意对应,函数表示每个输入值对应唯一输出值。

首先说隐式方程,隐式方程是形同 f(x1, x2, …, xn)=0 的关系,其中***f***是多元函数。
再说隐函数,隐函数就是由隐式方程所隐含定义的函数,比如 y=sqrt(1-x2) 是由 x2+y2-1=0 确定的函数。那么相应的,显函数就是可以直接用含自变量的算式表示的函数,也就是通常说的函数,如 ***y=cos⁡(x)***。
第三说显格式和隐格式,我们以计算流体力学中的方程为例。
对一个偏微分方程,采用有限差分来近似得到差分方程,如热传导方程:
在这里插入图片描述

用一阶前差代替 ∂T/∂x ,得:

在这里插入图片描述
上角标n代表不同时间,下角标i代表不同位置。
用中心差分代替(∂2T)/(∂x2),得:
在这里插入图片描述

从而可以得到:

在这里插入图片描述
因此,我们可以用有限差分来表示该偏微分方程:
在这里插入图片描述

这个方程就是差分方程。
进入正题:
显格式
整合式1,得:

在这里插入图片描述
通过该差分方程,只要知道初始时刻不同位置的值,就可以利用初值不断进行推进求解,从而得到不同时刻的解
显然,每一个差分方程都只含一个未知数,因此可以直接求解,将这种格式的差分方程成为显格式,可见是类似于显函数的定义的。
隐格式
整合式1,把空间差分写成n和n+1时刻的平均,得:
在这里插入图片描述

上述格式叫C-N格式
该格式包含了三个未知数(n+1时刻对应的三个值),因此不能单数求解,而是需要将该方程所有点的表达式联合起来求解。
将上式进行整理,把未知数写在左端,把已知数写在右端,得:
在这里插入图片描述
为简化书写,令:
在这里插入图片描述
则方程可以简化为:

在这里插入图片描述

依次在网格 2-6 应用格式:
在这里插入图片描述

在这里插入图片描述

边界上的约束条件给定T1, T7,因此5个方程,5个未知数,可以写成矩阵的形式:
在这里插入图片描述

采用Tomas方法求解上面的三对角阵即可。

显然,隐格式的求解比较复杂,那为什么还要用?
这是因为在显式方法中,需要给定一个合适的Δt,如果Δt过大,推进求解就会不稳定,可能出现数值达到无穷大或者对负数开根号等无法计算的情况,因此会选取较小的Δt,导致网格点增多,总计算时间延长。
隐式方法对Δt就没有这样的要求。
感谢下面的知乎作者,上面很详细的计算过程参见:https://zhuanlan.zhihu.com/p/136564204

### 基于MATLAB的ATC-C模式实现 #### 高级热循环曲线法(ATC)简介 高级热循环曲线法(Advanced Thermal Cycle, ATC)是一种用于焊接模拟中的高效算法,能够在不重建模型的情况下提高计算速度精度。该方法通过对温度场的时间历程进行简化处理来减少计算量,从而著提升求解效率[^1]。 #### MATLAB环境下ATC-C模式的具体实现 为了在MATLAB环境中实现ATC-C模式,可以按照如下方进行: ##### 1. 数据预处理阶段 读取并解析输入文件,提取必要的几何参数、材料属性以及边界条件等信息。这部分工作可以通过编写脚本来完成自动化操作。 ```matlab % 加载数据 data = load('input.mat'); % 输入文件名可根据实际情况调整 geometry = data.geometry; materialProperties = data.materials; boundaryConditions = data.bcs; ``` ##### 2. 构建有限元网格 利用MATLAB内置工具箱或其他第三方库创建适合当前问题规模的离散化结构体。 ```matlab model = createFEMesh(geometry); ``` ##### 3. 初始化物理场变量 定义初始状态下的温度分布以及其他可能影响仿真的因素。 ```matlab initialTemperature = zeros(size(model.nodes)); for i=1:length(materialProperties) initialTemperature(find(isMember(model.elements(:,4),i))) ... = materialProperties(i).T0; end ``` ##### 4. 设置时间步长及相关控制参数 根据实际应用场景设定合适的时间增量Δt及其他必要选项。 ```matlab timeStepSize = 0.1; % 单位秒 totalSimulationTime = 60*60; % 总持续时间为一个小时 numSteps = round(totalSimulationTime/timeStepSize)+1; ``` ##### 5. 主循环迭代过程 采用的数值积分方推进整个系统的演化直至达到预定终点时刻为止;期间需不断更新节点处的状态向量,并记录重要事件的发生情况以便后续分析之用。 ```matlab temperatureHistory = cell(numSteps,1); currentTemp = initialTemperature; for stepIndex=1:numSteps [~,~,newTemps] = solveHeatEquation(currentTemp,... timeStepSize,... model,... boundaryConditions); currentTemp = newTemps; temperatureHistory{stepIndex} = currentTemp; end ``` ##### 6. 后处理与可视化展示 最后一步是对所得结果进行全面评估——绘制图表、生成动画序列或者导出至外部存储介质供进一步研究探讨。 ```matlab figure(); plot(temperatureHistory,'LineWidth',2); xlabel('Time Step'); ylabel('Temperature (\circ C)'); title('Evolution of Temperature Over Time Using ATC Methodology'); legend({'Node 1','Node 2'},'Location','BestOutside'); grid on; saveas(gcf,'outputPlot.png'); ``` #### 应用实例说明 假设有一个具体的工程项目涉及到了大型钢结构件之间的连接部位,在制造过程中需要对其进行多次加热冷却交替作用以形成牢固可靠的接合面。此时就可以借助上述流程建立起相应的计算机辅助设计平台来进行前期论证测试,进而指导现场施工人员合理安排工序顺序,最终确保产品质量达标的同时尽可能缩短工期降低成本开支。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值