TypeError: model () отсутствует 2 обязательных позиционных аргумента - PullRequest
1 голос
/ 06 июля 2019

Мне нужно решить эти три ODEВот код, который я использую.

Когда я компилирую, я получаю следующее сообщение об ошибке:

TypeError: model () отсутствует 2 обязательных позиционных аргумента: 'T' и 't'

Я не знаю, что происходит, поскольку T и T упоминаются в функции модели.

Кто-нибудь может мне помочь с этим?

import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt


v0 = 10.0 #L/min, vazão volumétrica de entrada (CSTR)
V = 100.0 #L, volume do reator (CSTR)
k = 0.14*10**(-5) #L/mol.min, constante de velocidade da reação (aprox: independente da temperatura)
Na0 = 500.0 #mol, concentração de A na entrada do reator (CSTR)
DeltaH_r = -5.9*10**(-5) #cal/mol
CpA = 40.0 #cal/mol.K
CpB = 18.0 #cal/mol.K
Tent = 50.0+273.15 #K, temperatura na entrada no reator

def model(Na, Nb, T, t):
    dNadt = (Na0 / V) * v0 - (Na / V) * v0 + (- k * (Na / V)**2) * V
    dNbdt = -(Nb / V) * v0 + 0.5 * (k * (Na / V)**2) * V
    dTempdt = ((-DeltaH_r) * (- k * (Na / V) * V) - Cp_A * V * v0 * (T - Tent)) / (Na * CpA + Nb *CpB)
    return [dNadt, dNbdt, dTempdt]


t = np.linspace(0,20)

Chutes = [500.0, 0.1, 300.0] #Chute inicial


Y = odeint(model, Chutes, t)

Ответы [ 2 ]

0 голосов
/ 07 июля 2019

Я думаю, что получил ответ.

Я не уверен, почему, но когда я "соединил" Na, Nb и T в одном единственном векторе (я назвал его z), это сработало.

def model(z, t):
    Na, Nb, T = z
    dNadt = (Na0 / V) * v0 - (z[0] / V) * v0 + (- k * (z[0] / V)) * V
    dNbdt = (-z[1] / V) * v0 + 0.5 * (k * (z[0] / V)) * V
    dTdt = ((-DeltaH_r) * (-k * (z[0] / V)) * V - CpA * (z[0] / V) * v0 * (z[2] - Tent)) / (z[0] * CpA + z[1] * CpB)
    return [dNadt,dNbdt,dTdt]
0 голосов
/ 07 июля 2019

Я никогда не использовал его, но я проверил пример в документации для scipy.integrate.odeint , и я думаю, что вы должны добавить args=(val1, val2) со значениями, которые будут назначены T и t

Y = odeint(model, Chutes, t, args=(val1, val2))

, так что, наконец, он будет использовать model с

Na = Chutes
Nb = t
T = val1
t = val2 
...