[Wissenschaftlich-technische Berechnung nach Python] Numerische Lösung der eindimensionalen instationären Wärmeleitungsgleichung nach der Crank-Nicholson-Methode (implizite Methode) und der FTCS-Methode (positive Lösungsmethode), parabolische partielle Differentialgleichung

Einführung

Atomschwingungsenergie (Gitterschwingungsenergie) wird durch den Temperaturgradienten im Material transportiert. Dies ist Wärmeleitung [1]. Infolgedessen ändert sich die Temperatur der Substanz im Laufe der Zeit und ändert sich schließlich nicht im Laufe der Zeit. Es hat einen stabilen Zustand erreicht. Wärmeleitung ist ein weit verbreitetes Phänomen im Alltag, und ihre technische Anwendung (Wärmeübertragungstechnik) ist eine der Grundlagen, die das heutige Leben unterstützen.

Nichtstationäre Wärmeleitungsgleichungen, die Temperaturschwankungen beschreiben, werden als parabolische partielle Differentialgleichungen klassifiziert. ** Elementare numerische Lösungen umfassen die zentrale Differenzmethode für den Raum und die explizite Methode (FTCS), die Vorwärtsdifferenzen für die Zeitentwicklung verwendet [2]. Die FTCS-Methode ist leicht zu verstehen und zu implementieren, aber die [numerische Stabilität] der Differentialgleichung (https://ja.wikipedia.org/wiki/%E6%95%B0%E5%80%A4%E7%9A% 84% E5% AE% 89% E5% AE% 9A% E6% 80% A7 # .E6.95.B0.E5.80.A4.E5.BE.AE.E5.88.86.E6.96.B9.E7 .A8.8B.E5.BC.8F.E3.81.A7.E3.81.AE.E5.AE.89.E5.AE.9A.E6.80.A7) ist nicht hoch. ** ** **

** [Crank-Nicholson-Methode](https://ja.wikipedia.org/wiki/%E5%B7%AE%E5%88%86%E6%B3%95#.E3.82.AF.E3.83 .A9.E3.83.B3.E3.82.AF.E3.83.BB.E3.83.8B.E3.82.B3.E3.83.AB.E3.82.BD.E3.83.B3. E6.B3.95) [2] ist eine der impliziten Methoden mit ausgezeichneter numerischer Stabilität (bedingungslose Stabilität). Es ist notwendig, simultane lineare Gleichungen zu lösen, um die Zeitentwicklung zu berechnen, und es ist schwieriger zu implementieren als die FTCS-Methode, aber zusätzlich zur Stabilität ist der Fehler in Bezug auf die Zeitentwicklung gering und nützlich zum Lösen parabolischer partieller Differentialgleichungen. Es ist eine der Methoden. ** ** **

** Hier wird die eindimensionale instationäre Wärmeleitungsgleichung nach der Crank-Nicholson-Methode gelöst. ** ** **

Inhalt

Interne Wärmeerzeugung $ q (x, t) $, thermische Gleichung gemäß der Temperatur $ T (x, t) $ eines Objekts mit einer konstanten thermischen Diffusionsrate $ D $,

$ \frac{\partial T(x,t)}{\partial t} = D \frac{\partial^2 T(x,t)}{\partial x^2} +q(x,t)$

D = \frac{\kappa} {\rho\  C_V}

$ T (x, 0) = 20 $ (Anfangsbedingung) $ T (0, t) = 0 $ (Randbedingung) $ T (100, t) = 50 $ (Randbedingung)

Zu

(1) Lösen Sie nach der Kurbel-Nicholson-Methode. Hier ist $ \ kappa $ die Wärmeleitfähigkeit, $ \ rho $ die Dichte und $ C_v $ die spezifische volumenspezifische Wärme.

(2) Lösen Sie nach der FTCS-Methode.

Berechnungscode

(1) Crank-Nicholson-Methode

Treue Umsetzung. ** Ich verwende die linalg.solve-Methode von numpy, um eine eindimensionale simultane Gleichung zu lösen. ** ** **


"""
Eindimensionale instationäre Wärmeleitung
Kurbel-Nicholson-Methode
"""

%matplotlib notebook
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np


Nx =100 #Gitterpunktzahl in x-Richtung
Nt =5000#Anzahl der Gitterpunkte in t-Richtung
Lx =0.01
Lt =1.5
delta_x=Lx/Nx
delta_t=Lt/Nt
r=delta_t/(delta_x**2)
print("r=",r)

uu = np.zeros([Nx,Nt])  #Funktion gesucht werden


#Anfangsbedingungen
#for i in range(1,Nx-1):
uu[:,0] = 20   #Anfangsbedingungen

#Randbedingung
for i in range(Nt):
    uu[0,i] = 0  
    uu[-1,i] = 50

p=np.ones([Nx,Nt])
for i in range(Nx):
    p[i,:] =4e-6

#print("stability=",p[0,0]*r)
q=np.zeros([Nx,Nt])

alpha=np.ones([Nx,Nt])
for i in range(Nx):
    alpha[i,:]= r*p[i,:]/2

#Maine
for j in range(Nt-1):

    Amat=np.zeros([Nx-2,Nx-2])  #Erzeugung einer Koeffizientenmatrix simultaner linearer Gleichungen
    for i in range(Nx-2):
        Amat[i,i] = 1/alpha[i,j] +2
        if i >=1 :
            Amat[i-1,i] = -1
        if i <= Nx-4 :
                Amat[i+1,i] = -1

    
    bvec=np.zeros([Nx-2]) # Ax=Erzeugung des b-Vektors von b
    for i in range(Nx-2):
        bvec[i] =  uu[i,j]+ (1/alpha[i+1,j] - 2)*uu[i+1,j]+uu[i+2,j]+q[i+1,j]
    bvec[0] += uu[0,j+1]
    bvec[Nx-3] += uu[-1,j+1]
    
    uvec = np.linalg.solve(Amat ,bvec) #Löse simultane lineare Gleichungen
    for i in range(Nx-2):
        uu[i+1,j+1]=uvec[i]
        
#zur Visualisierung
x=list(range(Nx))
y=list(range(Nt))

X, Y = np.meshgrid(x,y)

def functz(u):
    z=u[X,Y]
    return z

Z = functz(uu)
fig = plt.figure()
ax = Axes3D(fig)
ax.plot_wireframe(X,Y,Z, color='r')
ax.set_xlabel('t')
ax.set_ylabel('x')
ax.set_zlabel('T')

plt.show()

スクリーンショット 2017-08-24 19.41.20.png

Auftragung der Lösung.


Als nächstes betrachten wir den Zustand des Erreichens des thermischen Gleichgewichts mit Animation.


%matplotlib nbagg 
from matplotlib.animation import ArtistAnimation #Importieren Sie Methoden zum Erstellen von Animationen

fig = plt.figure()

anim = [] #Eine Liste zum Speichern der Daten des für die Animation gezeichneten Para-Para-Diagramms
for i in range(Nt):
    T=list(uu[:,i])
    x=list(range(Nx))
    if i % int(Nt*0.02) ==0: 
        im=plt.plot(x,T, '-', color='red',markersize=10, linewidth = 2, aa=True)
        anim.append(im)

anim = ArtistAnimation(fig, anim) #Animationserstellung
plt.xlabel('x')
plt.ylabel('t')

fig.show() 

anim.save("t.gif", writer='imagemagick')   #Animation.Speichern Sie es als GIF und erstellen Sie eine GIF-Animationsdatei.



t.gif

Mit der Zeit nähert sich die Temperatur konstant (stationärer Zustand).

(2) FTCS-Methode

"""
Eindimensionale instationäre Wärmeleitung
FTCS-Methode
"""

#%matplotlib nbagg
#matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import ArtistAnimation #Importieren Sie Methoden zum Erstellen von Animationen

#Konstante
L = 0.01
D= 4e-6 #Wärmediffusionsrate
N=100 #Anzahl der Schritte
del_L= L/N #Raumschrittgröße
del_t=  0.0001#Zeitschrittbreite
dum = del_t/1000

print("stability=",D*del_t/(del_L**2))

T_low = 0.0
T_mid = 20.0
T_high=50.0

#Illustriert
t1 = 0.01
t2 = 0.1
t3 = 0.4
t4 = 1.0
t5 = 10.0 
t_end = t5 +dum 

#
T = np.empty(N+1)
T[0] = T_high
T[N] = T_low
T[1:N] = T_mid

Tp = np.empty(N+1)
Tp[0] = T_high
Tp[N] = T_low

#Maine

t = 0.0
c =  del_t*D/(del_L**2)

while t < t_end :
    #Temperaturberechnung
   # for i in range(1,N):
    #   Tp[i] = T[i] + c*(T[i+1]+T[i-1]-2*T[i])
    Tp[1:N] = T[1:N] + c*(T[0:N-1]+T[2:N+1]-2*T[1:N])

    T, Tp = Tp, T
    t += del_t
    
    #Zeichnen Sie mit dem ausgewählten t
    
    if np.abs(t-t1) < dum :
        plt.plot(T, label='t = t1')
        
    if np.abs(t-t2) < dum :
        plt.plot(T, label='t = t2')
    if np.abs(t-t3) < dum :
        plt.plot(T, label='t = t3')    
    if np.abs(t-t4) < dum: 
        plt.plot(T, label='t = t4')
    if np.abs(t-t5) < dum :
        plt.plot(T, label='t = t5')

plt.xlabel('x', fontsize=24)
plt.ylabel('T', fontsize=24)
plt.legend(loc='best')


plt.show()

t.png

Ein Diagramm des Temperaturprofils, das mehrmals ausgewählt wurde.


Verweise

[1] Zur Ableitung der Wärmeleitungsgleichung Qiita-Artikel: "Ableitung der Wärmeleitungsgleichung" Ist höflich und leicht zu verstehen.

[2] Guo Shigeru Yamazaki, ["Einführung in die numerische Lösung partiell differenzierter Gleichungen"](https://www.google.co.id/search?q=%E5%B1%B1%E5%B4%8E+%E5% 81% 8F% E5% BE% AE% E5% 88% 86 & oq =% E5% B1% B1% E5% B4% 8E +% E5% 81% 8F% E5% BE% AE% E5% 88% 86 & aqs = Chrom. 69i57j0l5.2548j0j7 & sourceid = chrome & ie = UTF-8), Morikita Publishing Co., Ltd., 1993.


Nachtrag

  1. Zweidimensionale Wärmeleitungsgleichungen können auch mit der Crank-Nicholson-Methode gelöst werden, aber die Häufigkeit, mit der simultane lineare Gleichungen gelöst werden, nimmt zu. ** Unter der Annahme, dass die Anzahl der räumlichen Gitter $ Ns $ und das Zeitgitter $ Nt $ beträgt, ist es notwendig, ungefähr $ Nt \ mal Ns ^ N $ simultane lineare Gleichungen zu lösen, um die dimensionale Wärmeleitungsgleichung $ Ns $ zu lösen. Mit zunehmender Anzahl von Dimensionen steigen die Berechnungskosten der impliziten Methode nach der Crank-Nicholson-Methode erheblich. ** Eine der Methoden zur Reduzierung der Berechnungskosten ist ** Implizite Methode für alternierende Richtungen (ADI-Methode) **.

  2. Zusätzlich zur Wärmeleitungsgleichung ist Diffusionsgleichung ein Beispiel, das in der Physik parabolischer partieller Differentialgleichungen vorkommt. % A1% E6% 95% A3% E6% 96% B9% E7% A8% 8B% E5% BC% 8F & oq =% E6% 8B% A1% E6% 95% A3% E6% 96% B9% E7% A8% 8B% E5% BC% 8F & aqs = chrome..69i57j69i61l2.193j0j7 & sourceid = chrome & ie = UTF-8) und zeitabhängig [Schledinger-Gleichung](https://ja.wikipedia.org/wiki/%E3%82%B7% E3% 83% A5% E3% 83% AC% E3% 83% BC% E3% 83% 87% E3% 82% A3% E3% 83% B3% E3% 82% AC% E3% 83% BC% E6% 96% B9% E7% A8% 8B% E5% BC% 8F) und so weiter.

Recommended Posts

[Wissenschaftlich-technische Berechnung nach Python] Numerische Lösung der eindimensionalen instationären Wärmeleitungsgleichung nach der Crank-Nicholson-Methode (implizite Methode) und der FTCS-Methode (positive Lösungsmethode), parabolische partielle Differentialgleichung
[Wissenschaftlich-technische Berechnung nach Python] Numerische Lösung von 1-dimensionalen und 2-dimensionalen Wellengleichungen nach der FTCS-Methode (explizite Methode), doppelt gekrümmte partielle Differentialgleichungen
[Wissenschaftlich-technische Berechnung nach Python] Numerische Lösung der zweidimensionalen Laplace-Poisson-Gleichung für die elektrostatische Position nach der Jacobi-Methode, elliptische partielle Differentialgleichung, Randwertproblem
[Wissenschaftlich-technische Berechnung nach Python] Numerische Lösung des Problems des eindimensionalen harmonischen Oszillators nach der Speed-Berle-Methode
[Wissenschaftlich-technische Berechnung mit Python] Numerische Lösung der gewöhnlichen Differentialgleichung zweiter Ordnung, Anfangswertproblem, numerische Berechnung
[Wissenschaftlich-technische Berechnung nach Python] Numerische Lösung des Eigenwertproblems der Matrix durch Potenzmultiplikation, numerische lineare Algebra
[Wissenschaftlich-technische Berechnung mit Python] Lösen der gewöhnlichen Differentialgleichung zweiter Ordnung nach der Numerov-Methode, numerische Berechnung
[Wissenschaftlich-technische Berechnung von Python] Numerische Berechnung zur Ermittlung des Ableitungswerts (Differential)
[Wissenschaftlich-technische Berechnung mit Python] Analytische Lösungssympathie zur Lösung von Gleichungen
[Wissenschaftlich-technische Berechnung nach Python] Lösen der eindimensionalen Newton-Gleichung nach der Runge-Kutta-Methode 4. Ordnung
[Wissenschaftlich-technische Berechnung nach Python] Vergleich der Konvergenzgeschwindigkeiten der SOR-Methode, der Gauß-Seidel-Methode und der Jacobi-Methode für die Laplace-Gleichung, die partielle Differentialgleichung und das Randwertproblem
[Python] Numerische Berechnung der zweidimensionalen Wärmediffusionsgleichung mit der ADI-Methode (implizite Methode mit alternativer Richtung)
[Wissenschaftlich-technische Berechnung mit Python] Numerische Lösung gewöhnlicher Differentialgleichungen erster Ordnung, Anfangswertproblem, numerische Berechnung
[Wissenschaftlich-technische Berechnung mit Python] Summenberechnung, numerische Berechnung
[Wissenschaftlich-technische Berechnung von Python] Anpassung durch nichtlineare Funktion, Zustandsgleichung, scipy
[Wissenschaftlich-technische Berechnung von Python] Zeichnungsanimation der parabolischen Bewegung mit Locus, Matplotlib
[Wissenschaftlich-technische Berechnung mit Python] Lagrange-Interpolation, numerische Berechnung
[Wissenschaftlich-technische Berechnung von Python] Lösen der eindimensionalen Schrödinger-Gleichung im stationären Zustand durch Schießmethode (1), Potential vom Well-Typ, Quantenmechanik
[Wissenschaftlich-technische Berechnung von Python] Lösen der eindimensionalen Schrödinger-Gleichung im stationären Zustand durch Aufnahmemethode (2), harmonisches Oszillatorpotential, Quantenmechanik
[Wissenschaftlich-technische Berechnung mit Python] Liste der Matrizen, die in Hinpan in der numerischen linearen Algebra vorkommen
[Wissenschaftliche und technische Berechnung von Python] Zeichnung fraktaler Figuren [Shelpinsky-Dreieck, Bernsley-Farn, fraktaler Baum]
Python - Differentialgleichung Numerische Lösung Euler-Methode & Zentrale Differenzmethode & Rungekutta-Methode
[Numerische Berechnungsmethode, Python] Lösen gewöhnlicher Differentialgleichungen mit der Eular-Methode
[Wissenschaftlich-technische Berechnung von Python] Grundlegende Operation des Arrays, numpy
[Wissenschaftlich-technische Berechnung mit Python] Monte-Carlo-Integration, numerische Berechnung, Numpy
[Wissenschaftlich-technische Berechnung nach Python] Monte-Carlo-Simulation nach der Metropolenmethode der Thermodynamik des 2D-Anstiegsspinsystems
Wissenschaftlich-technische Berechnung mit Python] Zeichnen und Visualisieren von 3D-Isoplanes und deren Querschnittsansichten mit Mayavi
[Wissenschaftlich-technische Berechnung nach Python] Numerische Integration, Trapezgesetz / Simpson-Gesetz, numerische Berechnung, scipy
[Wissenschaftlich-technische Berechnung mit Python] Lösen simultaner linearer Gleichungen, numerische Berechnung, Numpy
[Wissenschaftlich-technische Berechnung mit Python] 2D-Random-Walk (Drunken-Walk-Problem), numerische Berechnung
[Wissenschaftlich-technische Berechnung nach Python] (voreingenommenes) Differential, mathematische Formel, Sympy
Numerische Berechnung partieller Differentialgleichungen mit Singularität (am Beispiel der thermischen Gleichungen vom Hardy-Hénon-Typ)
[Wissenschaftlich-technische Berechnung mit Python] Berechnung des Matrixprodukts mit @ operator, python3.5 oder höher, numpy
[Wissenschaftlich-technische Berechnung mit Python] Lösen gewöhnlicher Differentialgleichungen, mathematischer Formeln, Sympy
[Wissenschaftlich-technische Berechnung von Python] Zeichnung von 3D-gekrümmter Oberfläche, Oberfläche, Drahtrahmen, Visualisierung, Matplotlib