求讲这两个有限元解一维和二维传热问题的求解

img

img


求讲这两个有限元解一维和二维传热问题的求解,罚函数法什么的,有限元分析太烧脑了

该回答引用ChatGPT

问题1


这是一个一维传热问题,可以使用数值方法进行求解。其中,A(ф)表示热传导方程,Q(x)表示热源分布。边界条件为φ(0)=φ(100)=0。

罚函数法是一种用于处理约束条件的方法,它将约束条件转化为目标函数的一部分,以惩罚违反约束条件的解。在本问题中,我们将边界条件转化为罚函数,即

f(φ) = A(φ) + a[φ(0)^2 + φ(100)^2]

其中,a是罚因子。当a趋近于无穷大时,边界条件对解的影响将越来越大,因此,我们可以通过调整a的大小来控制解的边界误差。

为了求解问题,我们可以使用有限差分方法。将区间[0,100]离散为N个点,取步长h=100/(N-1),则有:

x[i] = (i-1)h, i = 1,2,...,N

φ[i] ≈ φ(x[i]), i = 1,2,...,N

将热传导方程离散化,得到:

φ[i-1] + (-2+Q[i]h^2)φ[i] + φ[i+1] = 0, i = 2,3,...,N-1
其中,Q[i]表示在x[i]处的热源分布。边界条件已经通过罚函数法转化为目标函数的一部分,因此我们不需要再考虑边界条件。

可以将上述方程写成矩阵形式:

Aφ = b

其中,A是一个(N-2)×(N-2)的三对角矩阵,具体形式为:

A[i,i] = -2+Q[i+1]h^2

A[i,i-1] = 1, i = 2,3,...,N-2

A[i,i+1] = 1, i = 1,2,...,N-3

b是一个(N-2)维的向量,具体形式为:

b[i] = 0, i = 1,2,...,N-2

可以使用迭代法求解该线性方程组,例如Jacobi迭代法、Gauss-Seidel迭代法、SOR迭代法等。在本问题中,我们选择SOR迭代法进行求解。

>具体步骤如下:

1、初始化φ[i]的值,通常可以设置为0。

2、进行SOR迭代,直到解收敛:

(a) 对于每个i = 2,3,...,N-1,计算新的φ[i]的值:
   φ[i] = (1-w)φ[i] + (w/α[i])(-φ[i-1] - (-2+Q[i]h^2)φ[i] - φ[i+1] - aφ[i])

 其中,w是松弛因子,一般取值为1.
(b) 计算解的范数:

   ||φ_new - φ_old|| = sqrt(Σ(φ_new[i] - φ_old[i])^2)

 其中,φ_new和φ_old分别表示新旧两次迭代的解,||·||表示向量的2-范数。

(c) 如果解的范数小于某个给定的阈值tol,则认为解已经收敛,退出迭代;否则,将φ_new赋值给φ_old,继续进行下一次迭代。

3、计算解的边界误差,确定最优的罚因子a:
(a) 计算边界误差:


   err = abs(φ[1]) + abs(φ[N])

 其中,abs表示绝对值函数。

(b) 如果err小于给定的阈值10^-6×|ф_max|,则认为边界误差已经足够小,退出求解;否则,增大罚因子a的值,重复步骤1和2,直到边界误差满足要求为止。

最终得到的φ(x)即为问题的解。

需要注意的是,在实际求解过程中,需要根据具体情况选择合适的参数,例如步长h、松弛因子w、阈值tol等。另外,由于矩阵A是一个稀疏矩阵,因此可以采用稀疏矩阵存储方式,以减少存储空间和计算时间。









问题2

为了导出该二维传热问题的矩阵形式,我们需要使用有限元方法来逼近弱形式。设Ω为问题的解域,Γ为其边界。我们首先将解域Ω离散化为n个单元Ωe,其中每个单元Ωe由一些节点组成,节点数为m。因此,总的节点数为N=nm。

令Φ(x,y)为问题的解,我们将其在每个单元Ωe上进行逼近:

Φ(x,y)≈N(x,y)T

其中N(x,y)是每个节点的形函数,T是N个未知温度值的向量。因此,我们需要找到每个单元Ωe上的形函数N(x,y)。

假设Ωe为一个四边形,其四个顶点分别为(x1,y1),(x2,y2),(x3,y3)和(x4,y4)。我们可以使用双线性形函数来逼近Φ(x,y),即:

Φ(x,y)≈a0 + a1x + a2y + a3xy

其中a0,a1,a2和a3是未知系数。我们可以使用Φ在每个顶点的值来确定这些系数,即:

a0 = Φ(x1,y1)
a1 = (Φ(x2,y2) - Φ(x1,y1))/(x2 - x1)
a2 = (Φ(x3,y3) - Φ(x1,y1))/(y3 - y1)
a3 = (Φ(x4,y4) - Φ(x2,y2) - Φ(x3,y3) + Φ(x1,y1))/(x2y3 - x3y2 - x1y3 + x3y1 + x1y2 - x2y1)

由此,我们可以得到每个单元Ωe上的形函数N(x,y)N1(x,y) = 1 - (x - x1)/(x2 - x1) - (y - y1)/(y3 - y1) + (x - x1)(y - y1)/((x2 - x1)(y3 - y1))
N2(x,y) = (x - x1)/(x2 - x1) - (x - x1)(y - y1)/((x2 - x1)(y3 - y1))
N3(x,y) = (y - y1)/(y3 - y1) - (x - x1)(y - y1)/((x2 - x1)(y3 - y1))
N4(x,y) = (x - x1)(y - y1)/((x2 - x1)(y3 - y1))

现在我们可以将弱形式离散化为矩阵形式。首先,我们将其写成一个形式:

a(Φ,δΦ) + b(Φ,δф) + c(ф,δф) = 0

其中a,b和c是算子,Φ和ф是未知函数,δΦ和δф是测试函数。我们使用形函数N(x,y)作为测试函数,即:

δΦ =N(x,y)

我们还需要将Φ和ф用形函数N(x,y)展开,即:

Φ(x,y) = ∑T_iN_i(x,y)

ф(x,y) = ∑q_iN_i(x,y)

代入弱形式并应用分部积分,我们得到以下矩阵形式:

[K]{T} + [B]{q} = {F}

其中,{T}和{q}是未知向量,[K]是导热矩阵,[B]是对流矩阵,{F}是热源向量。这些矩阵和向量的元素可以通过单元级的贡献来计算,即:

[K]_ij = ∑∫Ωe k(x,y)▽N_i(x,y)·▽N_j(x,y)[B]_ij = ∑∫Γe n(x,y)N_i(x,y)N_j(x,y)dГ

{F}_i = ∑∫Ωe Q(x,y)N_i(x,y)dΩ

其中,k(x,y)是热导率,n(x,y)是表面法向量,Q(x,y)是热源密度。

通过组装所有单元的贡献,我们可以得到整个系统的矩阵方程。这些方程可以使用数值方法求解,例如高斯消元或迭代法。最终,我们可以得到解向量{Φ}和{ф},从而确定问题的解。

“Devil组”引证GPT后的撰写:
一维传热问题的有限元求解:

  • 首先,将一维传热问题的微分方程 A(φ)=-d²φ/dx²+Q(x)=0,离散化成有限元形式,即

∫(0,100) A(φ)·v dx = ∫(0,100) Q(x)·v dx ,其中 v 是测试函数

  • 对 φ 进行线性插值,得到φ的近似值 φ_h(x) = Σ(N_i(x)·φ_i),其中 N_i(x) 是线性形状函数,φ_i 是φ在节点i处的近似值。
  • 将测试函数 v 替换为形状函数 N_j,得到离散方程:

K_ij·φ_j = F_i,其中

K_ij = ∫(0,100) A(N_i')·A(N_j') dx + α·N_i(0)·N_j(0) + α·N_i(100)·N_j(100)

F_i = ∫(0,100) Q(x)·N_i(x) dx - α·N_i(0)·φ_L - α·N_i(100)·φ_R

  • 其中,φ_L 和 φ_R 是左右边界的温度值。
  • 由于 A(φ) 是非线性的,需要使用 Newton-Raphson 方法进行迭代求解,直到收敛。
  • 现在需要确定 α 的值,使得边界误差小于10^-6 |φmax|。可以从一个较小的值开始,逐渐增大 α 直到达到收敛标准。

二维:
为了导出该问题的矩阵形式,我们需要进行以下步骤:

  • 1.将热通量 Q 替换为给定的边界条件,得到:
    Q(x,y)=-β[φ(x,y)-φ0] = -βφ(x,y) + βφ0
  • 2.将弱形式中的 φ 和 δφ 用基函数的线性组合表示:
    φ(x,y) = ∑ Ni(x,y)φi
    δφ(x,y) = ∑ Ni(x,y)δφi
  • 其中,Ni(x,y) 是定义在元素上的线性基函数。
  • 3.将线性基函数的展开形式代入到弱形式中,得到:
    ∑ δφi ∫Ω [ -▽^T*k▽Ni(x,y) Ni(x,y) + Q(x,y) Ni(x,y) ] dΩ

    ∑ δφi ∫Γq [ Ni(x,y) (q- βn^T Ni(x,y)) + βH Ni(x,y) (φi - φ0) ] dΓ = 0

  • 4.将上式中的积分换成基函数在每个节点处的值的乘积,并将这些基函数的值组成向量。此时,我们可以将上述方程表示成一个矩阵方程,即:
    [K]{φ} = {F}
  • 其中,[K] 是一个大小为 N × N 的矩阵,其中 N 是节点数。矩阵的第 i 行和第 j 列是:
    [K]ij = ∫Ω [ -▽^T*k▽Ni(x,y) Ni(x,y) + Q(x,y) Ni(x,y) ] dΩ
  • ∫Γq [ Ni(x,y) (q- βn^T Ni(x,y)) + βH Ni(x,y) Ni(x,y) (φi - φ0) ] dΓ

{φ} 是大小为 N 的向量,其中第 i 个分量是节点 i 上的温度值,即 φi。

{F} 是大小为 N 的向量,其中第 i 个分量是节点 i 上的荷载,即 F_i = ∑ Ni(x,y) [ q- βn^T Ni(x,y) + βH Ni(x,y) φ0 ]

这就是该弱形式的矩阵形式。

参考GPT和自己的思路:
一维传热问题:

将问题离散化为一系列节点,并使用有限元法来逼近解。假设每个元素上的解为二次多项式,将φ表示为

φ(x)=Σa_i N_i(x)

其中 N_i(x) 是钦定函数,a_i 是节点 i 上的解的近似值。将上式代入控制方程中,然后对每个元素进行积分,得到

∫(∂N_i/∂x)(∂N_j/∂x)dΩ a_j+∫Q(x)N_i(x)dΩ=0

其中Q(x)是热源的密度。将这些元素的方程组装起来,我们得到线性代数方程组

Ku=f

其中 K 是系统刚度矩阵,u 是所有节点上的解的向量,f 是热源向量。我们需要在这个方程中增加边界条件。在罚函数法中,我们可以将边界条件表示为

φ(0)=0,φ(100)=0

作为一个约束条件,并惩罚任何不符合此条件的解。我们将其表示为

∫α(φ(0)N_i(0)+φ(100)N_i(100))^2dΩ

我们可以将这个表达式添加到方程中的右侧,即

Ku=f+αc

其中 c 是罚函数的向量,它对不符合边界条件的节点进行惩罚。现在我们需要确定罚函数的值 α,使得边界误差小于给定的值。我们可以计算边界节点的解的最大值,并将其乘以给定的误差容差。然后,我们可以用罚函数来惩罚不符合此条件的节点,直到误差满足要求。

二维传热问题:

我们使用相似的有限元方法来解决二维传热问题。我们需要将 φ 和 kφ 表示为二次多项式,并对元素进行积分。我们可以将 φ 的近似值表示为

φ(x,y)=Σa_ij N_i(x)N_j(y)

其中 N_i(x) 和 N_j(y) 是钦定函数,a_ij 是节点 i,j 上的解的近似值。将上式代入控制方程中,对每个元素进行积分,得到

∫∫k∇N_i⋅∇N_jdΩ a_ij-β/2∫∫N_iN_jdΓ=∫∫Q(x,y)N_i(x)N_j(y)dΩ

其中 Q(x,y) 是热源密度,dΓ 表示边界的积分元素,β 是对流系数,T_o 是周围介质的温度。我们将这些元素的方程组装起来,得到线性代数方程组

Ka=f

其中 K 是系统刚度矩阵,u 是所有节点上的 a_ij 的向量,f 是右手边的载荷向量。具体来说,对于一个单元,其刚度矩阵的元素为

K_ij=∫∫k∇N_i⋅∇N_jdΩ

载荷向量的元素为

f_i=∫∫Q(x,y)N_i(x)N_j(y)dΩ

以及边界元素的贡献

K_ij=−β/2∫∫N_iN_jdΓ

其中 i 和 j 都在边界上。需要注意的是,载荷向量的积分是对单元内部进行的,而边界贡献是对单元的边界进行的。

然后,我们需要应用边界条件。在这个问题中,边界条件是指定 φ 的值或梯度。边界条件可能有多种形式,例如指定某些边界上的值,或者指定某些边界上的梯度。在本问题中,我们将应用第二种形式的边界条件,即指定边界上的梯度。对于这种类型的边界条件,我们可以使用罚函数法来实现。具体来说,我们将边界条件转化为以下形式:

∇φ⋅n=g

其中 n 是法向量,g 是所需的梯度。我们将这个条件表示为

φ=φ_b+λ(∇φ⋅n-g)

其中 φ_b 是边界上的已知值,λ 是罚因子。我们可以将罚函数加到控制方程的右手边,得到线性代数方程组

(K+λB)a=f+λb

其中 B 是边界刚度矩阵,b 是边界载荷向量。边界刚度矩阵的元素为

B_ij=∫∫N_iN_jdΓ

边界载荷向量的元素为

b_i=φ_bg_i∫∫N_idΓ

最后,我们可以使用标准的线性代数求解器(例如高斯消元法或共轭梯度法)来求解线性方程组,得到节点上的解的近似值 a_ij。然后,我们可以使用节点的解来计算任何感兴趣的物理量,例如热通量和热流线。

该回答引用GPTᴼᴾᴱᴺᴬᴵ
有限元法(Finite Element Method, FEM)是一种计算数值解的数学方法,它可以用来求解各种物理场问题,其中包括传热问题。有限元法的基本思路是将一个复杂的物理问题离散化为一个由有限个节点组成的简单问题,然后在每个节点上通过求解代数方程来获得该点处的物理量,从而得到整个物理问题的数值解。本文将介绍如何使用有限元法求解一维和二维传热问题,并使用罚函数法来处理边界条件。
·
一维传热问题

考虑一维传热问题,假设在一个长度为L的棒子内,温度沿x方向变化,初始时棒子两端的温度分别为$T_{1}$和$T_{2}$,我们想要计算随着时间的推移,温度分布会如何变化。
·
首先,我们需要将棒子离散化,即将其分成N个小段,每个小段的长度为$h=L/N$。假设在每个小段上温度变化是线性的,我们可以通过求解线性代数方程组来得到每个小段上的温度值,从而得到整个棒子的温度分布。令$x_{i}=ih$表示第i个小段的中心位置,则第i个小段的温度值为$T_{i}$。
·
根据热传导定律,可以得到每个小段的热传导方程:

$$\frac{\partial T}{\partial t} = \frac{k}{\rho c}\frac{\partial^{2} T}{\partial x^{2}}$$

其中,k是热传导系数,$\rho$是密度,c是比热容。将上式离散化,得到:

$$\frac{T_{i}^{n+1} - T_{i}^{n}}{\Delta t} = \frac{k}{\rho c}\frac{T_{i+1}^{n} - 2T_{i}^{n} + T_{i-1}^{n}}{h^{2}}$$

其中,$\Delta t$是时间步长,n表示当前的时间步数。将上式移项,得到:

$$-aT_{i-1}^{n+1} + (1+2a)T_{i}^{n+1} - aT_{i+1}^{n+1} = T_{i}^{n}$$

其中,$a=k\Delta t/(\rho c h^{2})$,表示离散化后的热传导系数。将上式表示成矩阵形式,得到:

$$[A][T^{n+1}] = [T^{n}]$$

其中,[A]是一个(N-1)×(N-1)的矩阵,表示离散化后的系数矩阵;$[T^{n+1}]$和$[T^{n}]$都是(N-1)×1的向量,分别表示下一个时间步和当前时间步的温度分布。
·
具体求解这个线性方程组可以采用迭代法,例如Jacobi迭代法、Gauss-Seidel迭代法、SOR迭代法等。这里以Jacobi迭代法为例:

首先将方程组表示为$[A][T^{n+1}] = [T^{n}]$,则Jacobi迭代法的基本思想是将上式中的$T_{i}^{n+1}$用当前迭代步中其他节点的温度值$T_{j}^{n}$代替,即:

$$T_{i}^{n+1} = \frac{1}{a_{ii}}(T_{1}^{n}a_{i1}+T_{2}^{n}a_{i2}+...+T_{i-1}^{n}a_{i,i-1}+T_{i+1}^{n}a_{i,i+1}+...+T_{N-1}^{n}a_{i,N-1})$$

对于每个节点$i$,都需要进行一次上述计算,这样就得到了下一个时间步的温度分布$[T^{n+1}]$。
·
迭代过程中需要设置迭代终止条件,一般是设置一个最大迭代次数或者判断迭代误差是否达到一定精度,如果满足终止条件则停止迭代,否则继续进行迭代计算。
·
对于二维传热问题,可以采用类似的方法进行离散化和求解,只需要将矩阵和向量的维度相应调整即可。