Optimierung der Simulationskurve

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Calu
User
Beiträge: 2
Registriert: Freitag 25. Januar 2019, 14:35

Liebe Forumsmitglieder,

Ich habe eine kurze Simualtion zur Wärmeentwicklung in einem Batteriegehäuse verfasst.
Die Simualtion ergänzt einen praktisch durchgeführten Versuch zum gleichen Thema.

Letztendlich gibt mir die Simulation eine Temperaturkurve aus. Zu dem gleichen Sachverhalt
habe ich eine gemessene Temperaturkurve. Simulations- und Messkurve unterscheiden sich
aber voneinander.
(Hier jetzt das Problem)
Die Simulation soll also dahingehend optmiert werden, dass die Simulationskurve
der Messkurve möglichst gleich wird. Als Parameter gibt es in der Simulation dazu zwei Werte die
variiert werden können. Kennt jemand ein entsprechendes Tool zur Optimierung, oder hat ein
ähnliches Problem schoneinmal gelöst?

Vielen Dank

Im folgenden einfach mal der Quelltext (falls jemand merkt er möchte das Programm durchlaufen
lassen, kann ich die nötige Exceltablle schicken)


#Import libraries
import pandas
import numpy as np
import matplotlib.pyplot as plt

##################################################################
#Data
##################################################################
print('Neuer Durchlauf')
### import exel Datas/ Messreihen ###############################

data = pandas.read_csv('MessreihenzusammenfassungAufwaermungPython.csv', header=0, usecols=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], sep=';', decimal=',' )


######################################################################
# Parameter und Kennwerte
######################################################################


### Heat Conductance #########################

kpp=0.22 #heat conductance of Polyprobylen ISO22007 [W/mK]
#https://www.kern.de/de/technisches-date ... h?n=1502_1

kfil=0.3 #heat conductance of 3d printing filament(Bio-Polymer Lignin) [W/mK]
#https://www.extrudr.com/de/produkte/cat ... atur_2286/
#Muss noch recheriert werden

kalu=160. #heat conductance of extruded aluminum (AlMgSio,5) [W/mK]
#Formeln und Tabellen Bauphysik, 4. Auflage S.37

kbat=0.5 #Wärmeleitfähigkeit der Batterie/ Sand [W/mK]
#Formeln und Tabellen Bauphysik, 4. Auflage S.36


### heat capacity ###################################

cppp= 1.70 #heat capacicty of Polyprobylen ISO22007 [J/kgK]
#https://www.kern.de/de/technisches-date ... h?n=1502_1

cpfil= 1.5 #heat capacicty of 3d printing filament (Bio-Polymer Lignin) [J/kgK]
#https://www.extrudr.com/de/produkte/cat ... atur_2286/
#

cpalu=879. # heat capacity of extruded aluminum (AlMgSio,5) [J/kgK]
# https://norel.de/norel/downloads/3rippenkk.pdf

cpbat=1000. # Wärmespeicherkapaziztät der Batterie/ Sandstein [J/kgK]
#835 #https://de.wikibooks.org/wiki/Tabellens ... t%C3%A4ten
#Formeln und Tabellen Bauphysik, 4. Auflage S.36
### Mass ###########################################

mbat= 25. # Batteriemasse/ Sandmasse [kg]


### Heat Transfer Coefficient 3d Gehäuse ######################

hfili=5 # Wärmedurchgangsk. im Gehäuseinneren [W/m²K]
# VDI Wärmeatlas, Auflage 1988

hfila=5 # Wärmedurchgangsk.außerhalb des Gehäuses [W/m²K]
# VDI Wärmeatlas, Auflage 1988

### Thickness ###########################################

dsand=0.22/2 #Dicke der Sandschicht (aus der Mitte der Batterie) [m]

dalu= 2./1000 #Wandstärke Aluminiumgehäuse [m]

dfil=2.5/1000 #Wandstärke 3d Gehäuse [m]



### Oberflächen ########################################################

Abat= 2*(0.222*0.22+0.22*0.3+0.222*0.3) #7/8, Oberfläche der Alubatterie [m²]


Afil= 0.68 #Oberfläche des 3d geruckten Gehäuses aus Fusion 360 [m²]


##################################################################
#Calculation
##################################################################


####################################################################
print('1: Versuch 3d Gehäuse Pv=130W und 30°C')
####################################################################

Pel130=131 #Verlustleistung bei 50 A Entladestrom [W], gemessene Verlustleistung des Veruchs

Ta1=data.values[0,1]+273.15 # Umgebungstemperatur bzw. Batterieinnentemp. im Versuch [K]
Tb0=Ta1
Ta=273.15+30

Rges=(dsand/kbat)+(dalu/kalu)+(1/hfili)+(dfil/kfil)+(1/hfila) # Wärmewiederstand vom Batterieinnerin bis zum Zwischenraum von Batterie und Gehäuse[m²K/W]


#initial values
i=1
n=810
ts=10 # length of time steps [s]
Tb=np.zeros(n+1)
Tb[0]=Tb0



thetab=np.zeros(n+1)
thetab[0]=Tb[0]-273.15


while i<=n:
#if i>=68: #Zeitpunkt der Entladung
# Pel130=0
Tb=Tb[i-1]+((Pel130-(Afil/Rges)*(Tb[i-1]-Ta))*(ts/(cpbat*mbat)))
thetab=Tb-273.15
i = 1+i

plt.plot(np.linspace(0,n+1,n+1), data.values[0:n+1,1], '.r', label='Tbat_Mess')
plt.plot(np.linspace(0,n+1,n+1), thetab, '.b', label='Tbat_Sim')
plt.ylabel('Temperatur in °C')
plt.xlabel ('Zeit in 10 sek. schritten')
plt.axvline(68*6, color='k', linestyle='--', label='Entladung' )
plt.axhline(60, color='k', linestyle='-.', label='Temperaturobergrenze' )
plt.legend(loc='best')
plt.suptitle('3d Gehäuse Pv=130W und 30°C')
plt.savefig('Erw._3dG. Pv=130W und 30°C.png')
plt.show()
ArtooDetoo
User
Beiträge: 60
Registriert: Dienstag 4. Dezember 2018, 16:57

Es gibt auf jeden Fall Tools, die eine Art Parameteroptimierung durchführen können. Vielleicht reicht es hier auch einfach aus in zwei verschachtelten Schleifen einfach einige Wertkombinationen für beide Parameter durchzugehen, für jede eine Simulation laufen lassen und das Ergebnis zu speichern. Dann kannst du am Ende vergleichen, welche die optimale Parameterkonfiguration ist.

Der Code lässt sich übrigens einfacher lesen, wenn du die Code-Tags des Forums nutzt.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Konstanten schreibt man KOMPLETT_GROSS. Abkürzungen vermeiden, was soll dfil oder abat heißen?
Der Code ist auch zu lang, um ihn am Stück lesen zu können. Benutze Funktionen für verschiedene Berechnungen. Du nutzt numpy gar nicht, sondern rechnest jeden Wert einzeln aus, da wäre also eine Liste sinnvoller für TB und Theta
Calu
User
Beiträge: 2
Registriert: Freitag 25. Januar 2019, 14:35

Vielen dank für die Rückmeldungen,
ich habe das Problem mit scipy optimize lösen können
Antworten