Seite 1 von 1

Mit For-Loops indizieren und Nullvektor ändern

Verfasst: Montag 18. Januar 2021, 17:54
von skertIP
Nabend,

ich habe ein Problem mit dem For Loop. Ist es möglich den zum indizieren eines Nullektors zu nutzen und dann über if-Bedingungen die Nullen zu ersetzen?

Bei mir klappt das nur für i=1, dannach bleibt der Vektor =0.

Danke für die Hilfe!

Re: Mit For-Loops indizieren und Nullvektor ändern

Verfasst: Montag 18. Januar 2021, 17:56
von Sirius3
Ich verstehe Deine Frage nicht. Kannst Du Code posten und die zugehörige Fehlermeldung, oder beschreiben, wie das Ergebnis von Deiner Erwartung abweicht?

Re: Mit For-Loops indizieren und Nullvektor ändern

Verfasst: Montag 18. Januar 2021, 18:08
von skertIP
kann ich machen, obs dir weiterhilft weiß ich nicht:D
hier der Ausschnitt. Weitere Werte (wie Ta) sind aus einer Zeitreihe:

Ti = np.ones_like(laengeT) * Ti_soll
Ti_n = np.zeros(len(laengeT))
Qp_bedarf_ges = np.zeros(len(laengeT))
Ti_verlust = np.zeros(len(laengeT))

for i in range(1, len(Delta_T), 1):
Qp_trans = Qp_haus * (Ti - Ta)
Qp_vent = (Ti - Ta) * (Vr * n_viertelst * (1 - eta_wärmerückgewinnung) * (cp_luft * rho_luft))

Qp_bedarf_ges = Qp_bedarf_ges + (Qp_trans + Qp_vent[i] - Qp_sol - Qp_innen) * 0.25

if Qp_bedarf_ges[i] > 0 and Qp_bedarf_ges[i] >= P_Heiz:
Qp_bedarf_ges[i] = Qp_bedarf_ges[i] - P_Heiz * 0.25
P_Heiz_v[i] = P_Heiz * 0.25
Ti_n[i] = Ti[i] - (Qp_bedarf_ges[i] / (Vr * rho_luft * cp_luft))
print(Ti_n[i])

if Qp_bedarf_ges[i] > 0 and Qp_bedarf_ges[i] < P_Heiz:
Qp_bedarf_ges[i] = 0
P_Heiz_v[i] = Qp_bedarf_ges[i]
Ti_n[i] = Ti[i] - (Qp_bedarf_ges[i] / (Vr * rho_luft * cp_luft))

else:
Qp_bedarf_ges[i] = 0
Ti_n[i] = Ti[i]

print(Qp_bedarf_ges)

#--- Das Problem ist jetzt, dass Qp_bedarf bis auf den ersten Wert weiterhin aus Nullen besteht.

Re: Mit For-Loops indizieren und Nullvektor ändern

Verfasst: Montag 18. Januar 2021, 18:55
von Sirius3
Ein Variable `Qp_bedarf` gibt es gar nicht. Wenn Du `Qp_bedarf_ges` meinst, dann scheint wohl dieser Wert nie größer als P_Heiz zu sein, was irgendwie auch klar ist, denn egal ob Qp_bedarf_ges-Wert größer als P_Heiz ist, oder kleiner, Qp_bedarf_ges wird immer auf 0 gesetzt.
Das innerhalb der for-Schleife

Code: Alles auswählen

    if Qp_bedarf_ges[i] > 0 and Qp_bedarf_ges[i] < P_Heiz:
        Qp_bedarf_ges[i] = 0
        P_Heiz_v[i] = Qp_bedarf_ges[i]
        Ti_n[i] = Ti[i] - (Qp_bedarf_ges[i] / (Vr * rho_luft * cp_luft))
    else:
        Qp_bedarf_ges[i] = 0
        Ti_n[i] = Ti[i]
kann man das Qp_bedarf_ges = 0 auch außerhalb des if schreiben. Das selbe gilt auch für Ti_n, denn 0 geteilt durch irgendwas bleibt 0.
Die for-Schleife vereinfacht sich also zu

Code: Alles auswählen

for i in range(1, len(Delta_T), 1):
    Ti_n[i] = Ti[i]
    Qp_bedarf_ges[i] = 0
Was Du wirklich ausrechnen willst, kann man bei dem Code wirklich nicht sagen.

Warum benutzt Du ones_like aber nicht zeros_like?