[Wissenschaftlich-technische Berechnung von Python] Anpassung durch nichtlineare Funktion, Zustandsgleichung, scipy

Mit der Curvefit-Methode von scipy.optimize werden XY-Daten mit einer nichtlinearen Funktion versehen, um den optimalen Anpassungsparameter zu erhalten.

Zweck: Bereiten Sie die Daten zu Materialvolumen (V) und Druck (P) als XY-Daten vor. Es drückt die Beziehung zwischen dem Volumen und dem Druck einer Festkörpergleichung aus (https://ja.wikipedia.org/wiki/%E7%8A%B6%E6%85%8B%E6%96%B9%E7%A8) Weit verbreitet als eine von% 8B% E5% BC% 8F_ (% E7% 86% B1% E5% 8A% 9B% E5% AD% A6)) Birken-Managan-Zustandsgleichung 3. Ordnung Finden Sie die Anpassungsparameter durch Anpassen an (: //en.wikipedia.org/wiki/Birch%E2%80%93Murnaghan_equation_of_state). Diese Gleichung hat die folgende Form:


P(V)=\frac{3}{2}K_0[(\frac{V}{V_0})^{-7/3}-(\frac{V}{V_0})^{-5/3}][1+\frac{3}{4}(K_d-4)((\frac{V}{V_0})^{-2/3}-1)]

$ K_0, V_0, K_d $ sind die Anpassungsparameter. Die X-Achse ist V und die y-Achse ist P.

** Je nach Problem kann der optimale Anpassungsparameter für jede Funktionsform erhalten werden, indem die Spezifikation der Anpassungsfunktionsform im Code geändert wird. Natürlich ist auch eine lineare Anpassung möglich. Es ist ein vielseitiger Code, außer in besonderen Situationen. ** **.

import numpy as np
import scipy.optimize
import matplotlib.pylab as plt

"""
Kurvenanpassung mit nichtlinearer Funktion
Beispiel:Passen Sie die Beziehung zwischen Druck und Volumen an eine kubische Birch-Managan-Gleichung an
"""



x_list=[] # x_Liste definieren(Erstellen Sie eine leere Liste)
y_list=[] # y_Liste definieren(Erstellen Sie eine leere Liste)

f=open('EoS.dat','rt') #R die Datei, die die Daten enthält, die Sie zeichnen möchten(Lesen) t(Text)Einlesemodus

##Lesen Sie die Daten, x_Liste und y_Speichern Sie den Wert in der Liste
for line in f:
    data = line[:-1].split(' ')
    x_list.append(float(data[0]))
    y_list.append(float(data[1]))
##
plt.plot(x_list, y_list, 'o',label='Raw data')

#Anpassen der Anpassungsfunktion
def fitfunc(V, V0, K0, K0d ):
    return (3.0/2.0)*K0*((V/V0)**(-7.0/3.0)-(V/V0)**(-5.0/3.0))*(1.0+(3.0/4.0)*(K0d-4.0)*((V/V0)**(-2.0/3.0)-1.0))


para_ini =[200.0, 100.0, 4.0] #Ausgangsbedingungen für Anpassungsparameter


para_opt, cov = scipy.optimize.curve_fit(fitfunc, x_list, y_list, para_ini)#Anpassungsparameter optimieren

#Anzeige der erhaltenen Anpassungsparameter
print ("Fitted V0 =", str(para_opt[0]), "(Å^3)")
print ("Fitted K0 =", str(para_opt[1]), "(GPa)")
print ("Fitted K0' =", str(para_opt[2]))

##
# for plot
V0=para_opt[0]
K0=para_opt[1]
K0d=para_opt[2]

V1 = np.arange(min(x_list) - 1, max(x_list) + 1, 0.1)
y_fit = (3.0/2.0)*K0*((V1/V0)**(-7/3)-(V1/V0)**(-5.0/3.0))*(1.0+(3.0/4.0)*(K0d-4.0)*((V1/V0)**(-2.0/3.0)-1.0))

plt.plot(V1, y_fit, color='RED',linewidth=2.0, label='Fitted curve')

plt.xticks(fontsize=18)
plt.yticks(fontsize=18)
plt.grid(True)
plt.title("Curve fitting for eqaution of states")
plt.legend(loc='upper right')
plt.xlabel('Volume (Å^3)', fontsize=18)
plt.ylabel('Pressure (GPa)', fontsize=18)

plt.show()

Ergebnis

Fitted V0 = 163.627068001 (Å^3) Fitted K0 = 225.52189108 (GPa) Fitted K0' = 4.06160382625

t.png


[Anhang] Inhalt der verwendeten EoS.dat-Datei

164.26 0.0 
156.05 11.9 
147.83 27.9 
146.19 31.7 
144.55 35.7 
142.91 39.9 
141.26 44.4 
139.62 49.2 
137.98 54.2 
136.34 59.5 
134.69 65.1 
133.05 71.0 
131.41 77.3 
129.77 83.9 
128.12 90.9 
126.48 98.3 
124.84 106.2
123.20 114.4
121.55 123.2
119.91 132.5
118.27 142.3
116.62 152.6
114.98 163.6
113.34 175.2
111.70 187.5
110.05 200.6

Recommended Posts

[Wissenschaftlich-technische Berechnung von Python] Anpassung durch nichtlineare Funktion, Zustandsgleichung, scipy
[Wissenschaftlich-technische Berechnung mit Python] Analytische Lösungssympathie zur Lösung von Gleichungen
[Wissenschaftlich-technische Berechnung mit Python] Spline-Interpolation dritter Ordnung, scipy
[Wissenschaftlich-technische Berechnung von Python] Grundlegende Operation des Arrays, numpy
[Wissenschaftlich-technische Berechnung mit Python] Summenberechnung, numerische Berechnung
[Wissenschaftlich-technische Berechnung nach Python] Numerische Integration, Trapezgesetz / Simpson-Gesetz, numerische Berechnung, scipy
[Wissenschaftlich-technische Berechnung von Python] 1-dimensionale 3D-diskrete Hochgeschwindigkeits-Fourier-Transformation, scipy
[Wissenschaftlich-technische Berechnung durch Python] Liste der Verwendung von (speziellen) Funktionen, die in der Physik unter Verwendung von scipy verwendet werden
[Wissenschaftlich-technische Berechnung mit Python] Histogramm, Visualisierung, Matplotlib
[Wissenschaftlich-technische Berechnung mit Python] Lagrange-Interpolation, numerische Berechnung
[Wissenschaftlich-technische Berechnung mit Python] Berechnung des Matrixprodukts mit @ operator, python3.5 oder höher, numpy
[Wissenschaftlich-technische Berechnung mit Python] Lösen (verallgemeinerter) Eigenwertprobleme mit numpy / scipy mithilfe von Bibliotheken
[Wissenschaftlich-technische Berechnung von Python] Zeichnungsanimation der parabolischen Bewegung mit Locus, Matplotlib
[Wissenschaftlich-technische Berechnung von Python] Numerische Berechnung zur Ermittlung des Ableitungswerts (Differential)
[Wissenschaftlich-technische Berechnung von Python] Zeichnung von 3D-gekrümmter Oberfläche, Oberfläche, Drahtrahmen, Visualisierung, Matplotlib
[Wissenschaftlich-technische Berechnung nach Python] Lösen der eindimensionalen Newton-Gleichung nach der Runge-Kutta-Methode 4. Ordnung
[Wissenschaftlich-technische Berechnung mit Python] Logistisches Diagramm, Visualisierung, Matplotlib
[Wissenschaftlich-technische Berechnung mit Python] Polarkoordinatendiagramm, Visualisierung, Matplotlib
[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 mit Python] Plot, Visualisierung, Matplotlib von 2D-Daten, die aus einer Datei gelesen wurden
[Wissenschaftlich-technische Berechnung mit Python] Zeichnen, Visualisieren, Matplotlib von 2D-Konturlinien (Farbkonturen) usw.
[Wissenschaftlich-technische Berechnung mit Python] Monte-Carlo-Integration, numerische Berechnung, Numpy
[Wissenschaftlich-technische Berechnung durch Python] Erzeugung ungleichmäßiger Zufallszahlen mit gegebener Wahrscheinlichkeitsdichtefunktion, Monte-Carlo-Simulation
[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] Numerische Lösung der gewöhnlichen Differentialgleichung zweiter Ordnung, Anfangswertproblem, numerische Berechnung
[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]
[Wissenschaftlich-technische Berechnung nach Python] Numerische Lösung des Problems des eindimensionalen harmonischen Oszillators nach der Speed-Berle-Methode
[Wissenschaftlich-technische Berechnung nach Python] Numerische Lösung des Eigenwertproblems der Matrix durch Potenzmultiplikation, numerische lineare Algebra
[Wissenschaftlich-technische Berechnung mit Python] Beispiel für die Visualisierung von Vektorfeld, elektrostatischem Magnetfeld, Matplotlib
[Wissenschaftlich-technische Berechnung mit Python] 2D-Random-Walk (Drunken-Walk-Problem), numerische Berechnung
[Wissenschaftlich-technische Berechnung nach Python] Monte-Carlo-Simulation nach der Metropolenmethode der Thermodynamik des 2D-Anstiegsspinsystems
[Wissenschaftlich-technische Berechnung mit Python] Lösen gewöhnlicher Differentialgleichungen, mathematischer Formeln, Sympy
[Steuerungstechnik] Berechnung von Übertragungsfunktionen und Zustandsraummodellen durch Python
[Wissenschaftlich-technische Berechnung nach Python] Ableitung analytischer Lösungen für quadratische und kubische Gleichungen, mathematische Formeln, Sympy
[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 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 durch Python] Lösung des Randwertproblems gewöhnlicher Differentialgleichungen im Matrixformat, numerische Berechnung
[Wissenschaftlich-technische Berechnung mit Python] Lösen der gewöhnlichen Differentialgleichung zweiter Ordnung nach der Numerov-Methode, numerische Berechnung
Berechnung der technischen Indikatoren durch TA-Lib und Pandas
[Wissenschaftlich-technische Berechnung mit Python] Zeichnen, visualisieren, matplotlib 2D-Daten mit Fehlerleiste
[Wissenschaftlich-technische Berechnung nach Python] Lösen der Schledinger-Gleichung im stationären Zustand im dreidimensionalen isotropen Oszillatorpotential nach der Matrixmethode, Randwertproblem, Quantenmechanik
[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
Übertragungsfunktion / Zustandsraummodell des Feder- / Masse- / Dämpfersystems und Simulation von Python
[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 von Python] Wellen "Stöhnen" und Gruppengeschwindigkeit, Wellenüberlagerung, Visualisierung, Physik der High School
[Python] Wert des Funktionsobjekts (?)
[Python] Der Ursprung des Namens der Python-Funktion
Berechnung der Ähnlichkeit durch MinHash
Nichtlineare Funktionsmodellierung in Python
[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
Vergleich der Berechnungsgeschwindigkeit durch Implementierung von Python mpmath (willkürliche Genauigkeitsberechnung) (Hinweis)