A reacção $A+B \to C$ em fase líquida ocorre num reactor batch isotérmico.

Dados: a) Concentração em função do tempo partindo de $C_{Ao}=C_{Bo}=0,2\ M$

In [1]:
t=[0,2,5,10,20,30,40,60,80,100] # (min)
CA=[0.2,0.175,0.15,0.123,0.093,0.077,0.065,0.051,0.044,0.039]  # (M)

b) Velocidade inicial para diferentes valores de concentração inicial

In [2]:
CAo=[0.2,0.3,0.12,0.08,0.3,0.3,0.2,0.1] # (M)
CBo=[0.2,0.3,0.12,0.08,0.15,0.1,0.25,0.2] # (M)
rAo=[0.86,2.4,0.24,0.09,0.84,0.45,1.22,0.43] #  (mol l-1 h-1)

${\bf Objectivo}$: Calcular ordem global, ordens parciais em A e em B e constante de velocidade.

$(-r_A)=kC_A^{\alpha}C_B^{\beta}$

Pela análise dos dados vê-se que a metodologia a tomar é a seguinte:

1) Método integral – ordem global (?)

2) Método diferencial – n, α e β

3) Mínimos quadrados – α, β e k

Método Integral, testar n=1,2 e 3 à tabela a)

Uma vez que $C_A=C_B$ porque a estéquiometria é 1:1 e os valores iniciais são iguais, a velocidade da reacção pode ser vista para este ensaio como $(-r_A)=kC_A^n\qquad n=\alpha+\beta$

n=1 $ln\frac{C_{Ao}}{C_A}=kt$

n=2 $\frac{1}{C_A}-\frac{1}{C_{Ao}}=kt$

n=3 $\frac{1}{C_A^2}-\frac{1}{C_{Ao}^2}=kt$

In [3]:
%pylab
%matplotlib inline
from scipy import stats
from numpy import *
figure(figsize=(14,5))
y=zeros(len(CA)*3)
y.resize((len(CA),3))
for i in range(len(CA)):
    y[i,0]=log(CA[0]/CA[i])
    y[i][1]=1/CA[i]-1/CA[0]
    y[i][2]=1/CA[i]**2-1/CA[0]**2

def graf(oo,s,r):
    yr=zeros(len(CA))
    for j in range(len(t)):
        yr[j]=oo+s*t[j]
    plot(t,yr)
    annotate('n=%.1f'%i,xy=(20,0.8*yr[9]))
    annotate('$R^2$=%.3f'%r,xy=(20,0.7*yr[9]))

    
slope=zeros(3)
intercept=zeros(3)
r_value=zeros(3)
p_value=zeros(3)
std_err=zeros(3)
for i in range(3):
    slope[i], intercept[i], r_value[i], p_value[i], std_err[i] = stats.linregress(t,y[:,i])
    subplot(1,3,i+1)
    plot(t,y[:,i],'o--')
    graf(intercept[i],slope[i],r_value[i])
Using matplotlib backend: MacOSX
Populating the interactive namespace from numpy and matplotlib

As figuras mostram que nenhuma das relações é verificada, por isso a ordem não é inteira e a reacção não é elementar.

A ordem deve ser 1<n<2.

Temos de utilizar o método das velocidades iniciais da tabela b).

Como os primeiros 4 ensaios $C_{Ao}=C_{Bo}$ podemos utilizar o mesmo método anterior e dizer que $(-r_A)=kC_A^n\qquad n=\alpha+\beta$ e linearizar

$ln(-r_A)_o=ln\ k + n\ ln\ C_{Ao}$

In [4]:
figure(figsize=(3,3))
y=zeros(4)
x=zeros(4)
for i in range(4):
    x[i]=log(CAo[i])
    y[i]=log(rAo[i])

def graf(oo,s,r):
    yr=zeros(4)
    for j in range(4):
        yr[j]=oo+s*x[j]
    plot(x,yr)
    annotate('n=%.1f'%s,xy=(-2,0.8*yr[3]))
    annotate('$R^2$=%.3f'%r,xy=(-2,0.7*yr[3]))
    annotate('$ln\ k$=%.4f'%oo,xy=(-2,0.6*yr[3]))

slope, intercept, r_value, p_value, std_err = stats.linregress(x,y)

plot(x,y,'o--')
graf(intercept,slope,r_value)

Falta agora determinar $\alpha\ ou\ \beta$ uma vez que já sabemos que $n=\alpha+\beta=2,5$

Para os pontos da tabela b) em que $C_{Ao}\neq C_{Bo}$ isto é para os pontos 5 a 8.

$(-r_A)_o=kC_{Ao}^{\alpha}C_{Bo}^{\beta}=kC_{Ao}^{\alpha}C_{Bo}^{n-\alpha}=kC_{Bo}^n\frac{C_{Ao}}{C_{Bo}}^{\alpha}$ que lineariza

$ln\frac{(-r_A)_o}{C_{Bo}^{2,5}}=ln\ k + \alpha\ ln\frac{C_{Ao}}{C_{Bo}}$

In [5]:
for i in range(4):
    y[i]=log(rAo[i+4]/CBo[i+4]**2.5)
    x[i]=log(CAo[i+4]/CBo[i+4])

def graf(oo,s,r):
    yr=zeros(4)
    for j in range(4):
        yr[j]=oo+s*x[j]
    plot(x,yr)
    annotate('$\\alpha$=%.1f'%s,xy=(0.5,4))
    annotate('$R^2$=%.3f'%r,xy=(0.5,3.75))
    annotate('$ln\ k$=%.4f'%oo,xy=(0.5,3.5))

slope, intercept, r_value, p_value, std_err = stats.linregress(x,y)

plot(x,y,'o')
graf(intercept,slope,r_value)
print "k=",exp(intercept)
k= 48.2138874282

Logo $\alpha=1\ e\ \beta=2,5-1=1,5$.

Por outro lado, k=48,21 $M^{-1,5}\ min^{-1}$

A velocidade é então

$(-r_A)=48,2\ C_A\ C_B^{1,5}$

Outros métodos

Linearização da velocidade inicial

Os ensaios da tabela b) podem ser descritos por

$(-r_A)_o=kC_{Ao}^{\alpha}C_{Bo}^{\beta}$

Esta equação pode ser linearizada

$ln(-r_A)_o=ln\ k+\alpha\ ln\ C_{Ao}+\beta\ ln\ C_{Bo}$

Pelo método dos mínimos quadrados é possível chegar às seguintes 3 equações para todos os pontos da tabela b)

$\quad ln\ k \qquad\qquad \alpha \qquad\qquad\qquad\qquad \beta$

In [6]:
y=zeros(3*3)
y.resize(3,3)
x=zeros(3)
for i in range(len(CAo)):
    y[0,0]+=1
    y[0,1]+=log(CAo[i])
    y[0,2]+=log(CBo[i])
    y[1,1]+=log(CAo[i])**2
    y[1,2]+=log(CAo[i])*log(CBo[i])
    y[2,2]+=log(CBo[i])**2
    x[0]+=log(rAo[i])
    x[1]+=log(CAo[i])*log(rAo[i])
    x[2]+=log(CBo[i])*log(rAo[i])
y[1,0]=y[0,1]
y[2,0]=y[0,2]
y[2,1]=y[1,2]
lnk,a,b=linalg.inv(y).dot(x.T)
print "k=%.3f a=%.2f b=%.2f"%(exp(lnk),a,b)
k=47.613 a=0.99 b=1.50

A velocidade é então

$(-r_A)=47,6\ C_A\ C_B^{1,5}$

Tendo uma expressão diferencial é possível agora obter um modelo integrado e confirmar o modelo e obter uma constante de velocidade pela tabela a)

$-\frac{dC_A}{dt}=k\ C_A^{2,5}$ integra como $\frac{1}{C_A^{1,5}}- \frac{1}{C_{Ao}^{1,5}}=1,5\ k\ t$

In [7]:
y=zeros(len(t))
for i in range(len(t)):
    y[i]=1/CA[i]**1.5-1/CA[0]**1.5

def graf(oo,s,r):
    yr=zeros(len(t))
    for j in range(len(t)):
        yr[j]=oo+s*t[j]
    plot(t,yr)
    
    annotate('$R^2$=%.3f'%r,xy=(20,90))
    annotate('$k$=%.4f'%(s/1.5),xy=(20,100))

slope, intercept, r_value, p_value, std_err = stats.linregress(t,y)

plot(t,y,'o')
graf(intercept,slope,r_value)

Da figura pode-se concluir que a ordem global é 2,5.

O valor de k obtido, diz que a experiência a) deve ter sido feita a uma temperatura inferior à de b).