Mehrzeilige und mehrspaltige Tabelle
@MegBen: xlrd ist eine reine Python-Bibliothek. Damit kann es nicht zu fehlerhaften Referenzen kommen, wie das bei Deinen C++-Geschichten vielleicht möglich ist. Das Problem war, dass die get_sheet-Methode von Workbook eine interne Methode ist, die ein Sheet lädt, und sobald das Sheet einmal geladen ist, mit einer Fehlermeldung abbricht. Der offizielle Weg über sheet_by_index hat diese Nebenbedingungen nicht.
Hallo Leute, nochmals herzlichen Dank für die Hilfe.Habe momentan noch ein Problem, und zwar nachdem ich die Daten interpoliert habe, benutze ich sie für die weiteren Berechnungen.Nochmals zur Erinnerung,meine Funktion sieht so aus:
Weiter geht es mit der Berechnung von Wärmeübergang in einem Wärmetauscher, der aus der unterschiedlichen Anzahl der Zellen bestehen kann.Die Anzahl der Zellen in den unterschiedlichen Richtungen(x,y,z) wird als nDepth,nHeight,nWidth definiert. Wie es schon aus früheren Berechnungen klar ist, habe ich Luft- und Flüssigkeitsseite.Die Eintrittsdaten,wie Volumen(VdotAirCell oder VdotLiqCell) werden mit der Klasse 'operationData' abgelesen.Weiter geht es mit der Schleife, in der die Zellennummern berechnet werden.Un dann werden die Volumina in einzelnen Zellen berechnet.Hier sieht man,dass 'VdotAirCell' bitck-Funktion benutzt,die früher definiert wurde.(siehe oben).
Mein Problem ist,dass wenn ich mit mehreren Zellen berechne,macht er alles richtig.Ich vergleiche mit einem kompletten Wärmetauscher,der die gleiche Eigenschaften hat, aber die andere Funktion benutzt.Wenn ich aber nur eine Zelle habe,berechnet er absolut falsch.Ich weiß,dass es nicht so einfach ist, aber vielleicht hat jemand eine Idee,wie man so was löst?
Code: Alles auswählen
def readVdotAir(self, fileName):
sh = self._getWorkBook(fileName)
start_column_index ,start_row_index = 2,2
data_width, data_height = 6,6
end_column_index = start_column_index + data_height
end_row_index = start_row_index + data_width
self.cellwidth = array(sh.col_values(start_column_index-1,start_row_index,\
end_row_index))
self.cellheight = array(sh.row_values(start_row_index-1,start_column_index,\
end_column_index))
self.VdotAir = array([sh.row_values(i ,start_column_index, end_column_index)\
for i in xrange(start_row_index, end_row_index)])
#
x, y = meshgrid(self.cellheight, self.cellwidth)
self.bitck = Rbf(x, y, self.VdotAir)
Code: Alles auswählen
def calculateHeatTransfer(self, model, operationData):
VdotAirCell = operationData.VdotAir/(self.nWidth*self.nHeight)
VdotLiqCell = operationData.VdotLiq/(self.nDepth*self.nWidth)
tAirInCell = operationData.tAirIn
tLiqInCell = operationData.tLiqIn
jTeilung = 1./self.nWidth
kTeilung = 1./self.nWidth
cellOp = []
Q = 0.
for i in range(self.nDepth):
for j in range(self.nWidth):
jcell = (j + 0.5)*jTeilung
for k in range(self.nHeight):
kcell = (k + 0.5)*kTeilung
print 'kcell',kcell
print i,j,k, i*self.nHeight*self.nWidth + j*self.nHeight + k
# initialise operation data
cellOp.append(deepcopy(operationData))
# set boundary values for air
if (i - 1) < 0:
tAirIn = tAirInCell
VdotAirCell = operationData.bitck(kcell,jcell)/(self.nHeight*self.nWidth)
if VdotAirCell < 0.:
VdotAirCell = 0.
print 'VdotAirCell',VdotAirCell
Ich habe mittlerweiler golgendes probiert:wenn ich für den Wärmetauscher mit (nDepth = 1, nWidth = 1, nHeight = 1) statt
folgendes eingebe:
berechnet er richtig.4.4 ist der mittlere Volumenstrom.
Damit es ein wenig klarer ist, stelle ich meine Tabelle raus:
Im Fall (nDepth = 1, nWidth = 1, nHeight = 1) zeigt er mir VdotAirCell = 0.23790615307.Ich verstehe das nicht wie interpoliert er?
Wenn ich das hier betrachte:
ist mein jcell= (j + 0.5)*jTeilung= (0+0.5)*1/1=0.5 da jTeilung = 1./self.nWidth
und kcell = (k + 0.5)*kTeilung= (0+0.5)*1/1 =0.5 da kTeilung = 1./self.nWidth
ist Height = 0.5 und Width = 0.5 muss der Wert zwischen 1,498052619 1,888848955
1,591099366 1,172389006 liegen.
warum gibt er mir VdotAirCell = 0.23790615307 aus.Absolut unklar.
ich versuche die Tabelle im deutlichen Format zu speichern,die letzten zwei Zeilen rutschen nach rechts.
Code: Alles auswählen
VdotAirCell = operationData.bitck(jcell,kcell)/(self.nHeight*self.nWidth)
Code: Alles auswählen
VdotAirCell = 4.4
Damit es ein wenig klarer ist, stelle ich meine Tabelle raus:
Code: Alles auswählen
Width VdotAir
Height 0 0,2 0,4 0,6 0,8 1
0 4,308064365 4,922172892 5,154789758 4,950086916 4,549985906 4,615118628
0,2 4,736079399 5,192008457 4,391806436 4,401111111 5,164094433 4,661642001
0,4 4,875649518 4,549985906 1,498052619 1,888848955 4,680251351 4,987305614
0,6 4,912868217 4,540681231 1,591099366 1,172389006 4,522071882 4,940782241
0,8 4,6988607 5,201313131 4,308064365 4,261540991 5,089657035 4,810516796
1 4,615118628 4,6988607 4,847735494 5,219922481 5,005914964 4,41041578
Im Fall (nDepth = 1, nWidth = 1, nHeight = 1) zeigt er mir VdotAirCell = 0.23790615307.Ich verstehe das nicht wie interpoliert er?
Wenn ich das hier betrachte:
Code: Alles auswählen
for i in range(self.nDepth):
for j in range(self.nWidth):
jcell = (j + 0.5)*jTeilung
for k in range(self.nHeight):
kcell = (k + 0.5)*kTeilung
und kcell = (k + 0.5)*kTeilung= (0+0.5)*1/1 =0.5 da kTeilung = 1./self.nWidth
ist Height = 0.5 und Width = 0.5 muss der Wert zwischen 1,498052619 1,888848955
1,591099366 1,172389006 liegen.
warum gibt er mir VdotAirCell = 0.23790615307 aus.Absolut unklar.
ich versuche die Tabelle im deutlichen Format zu speichern,die letzten zwei Zeilen rutschen nach rechts.
Hallo Leute,ich bitte nochmal um die Hilfe. ich habe in meiner letzten Aufgabe immer noch kein Fehler gefunden.Ich habe kurze Ferien gahabt, aber das Problem muss ich noch lösen.Ich versuche es noch einmal,vielleicht kann mir jemand helfen. Mit def readVdotAir lese ich meine Daten aus der Excel-Tabelle ab:
Dann werden die interpolierten Daten durch Anzahl der Zellen dividiert:
(i-1) bedeutet hier nur das nur die Eintrittsdaten aus der Excel-Tabelle interpoliert werden müssen.
Was stimmt nicht?Kann man überhaupt mit Rbf interpolieren?
Danke für die HIlfe
Code: Alles auswählen
def readVdotAir(self, fileName):
sh = self._getWorkBook(fileName)
start_column_index ,start_row_index = 2,2
data_width, data_height = 6,6
end_column_index = start_column_index + data_height
end_row_index = start_row_index + data_width
self.cellwidth = array(sh.col_values(start_column_index-1,start_row_index,\
end_row_index))
self.cellheight = array(sh.row_values(start_row_index-1,start_column_index,\
end_column_index))
self.VdotAir = array([sh.row_values(i ,start_column_index, end_column_index)\
for i in xrange(start_row_index, end_row_index)])
#
x, y = meshgrid(self.cellheight, self.cellwidth)
print 'x,y',x,y
self.bitck = Rbf(x, y, self.VdotAir)
Code: Alles auswählen
if (i - 1) < 0:
tAirIn = tAirInCell
VdotAirCell = operationData.bitck(jcell,kcell)/(self.nHeight*self.nWidth)
Was stimmt nicht?Kann man überhaupt mit Rbf interpolieren?
Danke für die HIlfe
@anika_20: Ich denke das Problem was man als helfender hier hat, ist das es a) etwas umfangreicher ist sich hier einzuarbeiten, und b) Wissen jenseits von Python nötig ist um die Frage zu beantworten. Und zwar Wissen aus der Physik und auch mathematische Hintergründe.
BlackJack:Guten Morgen,
BlackJack welche Möglichkeiten gibt es außer Rbf innerhalb der Matrix zu interpolieren?In meinem Programm:
Meshgrid gibt mir Koordinatenmatrizen aus zwei oder mehr Koordinatenvektoren zurück und Rbf-interpoliert in dem Bereich.Aber welche Möglichkeiten gibt es noch in so einem Feld zu interpolieren?
Danke
BlackJack welche Möglichkeiten gibt es außer Rbf innerhalb der Matrix zu interpolieren?In meinem Programm:
Code: Alles auswählen
x, y = meshgrid(self.cellheight, self.cellwidth)
self.bitck = Rbf(x, y, self.VdotAir)
Danke
@anika_20: In dem Modul aus dem `Rbf()` kommt, gibt es auch noch andere Funktionen.