Programmazione Python > Calcolo scientifico

Errore Programma Python

(1/1)

cext104:
Salve a tutti!
Sto uscendo pazzo, perché non riesco a capire dove sbaglio in questo programma..
Quando entro nel caso 'Non ideale' e seleziono il modello di Van Laar ad esempio, mi da errore dicendo "ZeroDivisionError: float division by zero", solo che non capisco dove sbaglio. Le formule credo siano scritte bene perché le ho controllate molte volte.. spero qualcuno di voi possa aiutarmi.
Vi allego il codice sotto:

import math
import time

def inizializzazione():

    global P,y1,A1,B1,C1,A2,B2,C2,A12,A21,y2,T1s,T2s,T,y_1,y_2,x1,x2,p,h,P1s,P2s
    P = float(input("Inserisci la Pressione: "))
    while True:
        y1 = float(input("Inserisci composizione y1: "))
        if y1>=0 and y1<=1:
            break
        else:
            print("La composizione deve variare tra 0 e 1!")
    A1 = float(input("Inserisci coefficiente di Antoine A per il primo componente: "))
    B1 = float(input("Inserisci coefficiente di Antoine B per il primo componente: "))
    C1 = float(input("Inserisci coefficiente di Antoine C per il primo componente: "))
    A2 = float(input("Inserisci coefficiente di Antoine A per il secondo componente: "))
    B2 = float(input("Inserisci coefficiente di Antoine B per il secondo componente: "))
    C2 = float(input("Inserisci coefficiente di Antoine C per il secondo componente: "))
    A12 = float(input("Inserisci coefficiente A12: "))
    A21 = float(input("Inserisci coefficiente A21: "))



    y2 = 1 - y1
    T1s = (B1/(A1-math.log(P,2.718))-C1)
    T2s = (B2/(A2-math.log(P,2.718))-C2)
    T = y1 * T1s + y2 * T2s
    y_1 = 1
    y_2 = 1
    x1 = 0
    x2 = 0
    p = 0
    h = 0
    P1s = 0
    P2s = 0

def ideale():
    i = 0
    global P1s,P2s,x1,x2,T,y1,y_1,y2,y_2,A1,B1,C1,A2,B2,C2

    while i<30:
        P1s = math.exp(A1-(B1/(C1+T)))
        P2s = math.exp(A2-(B2/(C2+T)))
        x1 = (P*y1)/(P1s)
        x2 = 1-x1
        P1s = P*((y1/y_1)+(y2/y_2)*(P1s/P2s))
        T = (B1/(A1-math.log(P1s,2.718))-C1)
        i = i+1
    print("La dew T è: ", T)
    print("La composizione di rugiada x1 è :", x1)


def nonideale(selettore):

    global P1s, P2s, x1, x2, T, y1, y_1, y2, y_2, A1, B1, C1, A2, B2, C2, A12, A21, P
    i = 0



    while i<30:
        if (selettore == "1"):
            y_1 = math.exp(pow((A12 / (1 + ((A12 * x1) / (A21 * x2)))), 2))

            y_2 = math.exp(pow(A21 / (1 + ((A21 * x2) / (A12 * x1))), 2))

        if (selettore == "2"):
            y_1 = math.exp(pow((x2), 2)) * (A12 + 2 * (A12 - A21) * x1)

            y_2 = math.exp(pow((x1), 2)) * (A21 + 2 * (A12 - A21) * x2)


    P1s = math.exp(A1 - (B1 / (C1 + T)))
    P2s = math.exp(A2 - (B2 / (C2 + T)))
    T = (B1/(A1 - math.log(P1s,2.718))-C1)

    x1 = (P*y1)/(P1s*y_1)
    x2 = 1 - x1
    P1s = P * ((y1/y_1)+(y2/y_2)*(P1s/P2s))

    i = i + 1



    print("La dew T è: ", T)
    print("La composizione di rugiada x1 è: ", x1)


inizializzazione()
z=input("Ideale: 0\nNon ideale: 1\n")
if(z=="0"):
    ideale()
else:
    x=(input("Quale modello vuoi utilizzare? \n Van Laar: 1 \n Margules: 2 \n"))
    nonideale(x)


time.sleep(2000)
--- Termina codice ---


nuzzopippo:

--- Citazione da: cext104 - Luglio 26, 2020, 21:27 ---...
Sto uscendo pazzo, perché non riesco a capire dove sbaglio in questo programma.. ...

--- Termina citazione ---

In inizializzazione :

    x1 = 0
    x2 = 0

--- Termina codice ---

Tali valori non vengono "variati" dall'input, nel caso "Van Laar (1)" hai :
... (A12 * x1) / (A21 * x2) ...
--- Termina codice ---

"A21 * 0 = 0" , quindi stai tentando di dividere un numero per Zero ... non è che un programma sottilizzi sul fatto che, in effetti, stai facendo "zero diviso zero" ;)

P.S. Ben venuto :)

cext104:
Grazie mille per la risposta, ma se non inizializzo la variabile x1 ad esempio, quando va a fare il calcolo mi dice che non riconosce x1

nuzzopippo:

--- Citazione da: cext104 - Luglio 27, 2020, 09:38 ---Grazie mille per la risposta, ma se non inizializzo la variabile x1 ad esempio, quando va a fare il calcolo mi dice che non riconosce x1

--- Termina citazione ---

La qual cosa non esclude che avresti ugualmente errore per utilizzo di variabile non definita
>>> print(a)
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    print(a)
NameError: name 'a' is not defined
>>>
--- Termina codice ---

Devi tener presente le possibili casistiche di insussistenza e prevederle nell'algoritmo da applicare, le operazioni così come da Te poste non funzionerebbero nemmeno in caso di calcolo manuale in caso delle x non definite o nulle.

cext104:
Vabene allora cerco di studiarlo e impostarlo meglio, per poterlo rendere funzionale al 100%

Navigazione

[0] Indice dei post

Vai alla versione completa