34487 Homework (2nd set, due 6/16)

Problem 1:  Redo- examples 4.2.4 and 4.2.5 from the Davis and Davis reaction engineering book.  The analysis below should help... a lot!

Problem 2:  Fit the data in figure one of the “Mumenthaler et al. “ paper using “Model 1”.  Can you get the result in the paper?

Problem 3:  Solve problem 6 in chapter 4 of the Davis and Davis book.

Lineweaver versus nonlinear fit for simple Monod kinetics

rateexp = vmax c[t]/( km + c[t])

rate = ((vmax c(t))/(c(t)+km))

What does this give in terms of the concentration as a function of time?

DSolve[{ D[c[t],t] + rateexp==0,c[0]==c0}, c[t],t]

The “ProductLog” is another special mathematical function.

ans = c[t]/.%[[1]]

Let’s make a data set.

data1 = N[Table[{i/10, ans/.{vmax->10, km->5, c0->10,t->i/10}},{i,1,30}]]

Here the concentration decreases smoothly in time -- but we didn’t wait until c->0

ListPlot[data1,AxesLabel->{"time, s","concentration (mol/l)"}]

Find the rate of reaction by taking a derivative... the difference between adjacent points.

ratedata2 = Table[{(data1[[i,2]]+data1[[i+1,2]])/2 , -(data1[[i+1,2]]-data1[[i,2]])/.1},{i,1,29}]

The initial rate is highest and then decreases.

data2plot=ListPlot[ratedata2,AxesLabel->{"concentration (mol/l)","rate"}]

lineweaverdata2= 1/ratedata2

Here is the Lineweaver plot for these data

ListPlot[lineweaverdata2,AxesLabel->{"1/c","1/rate"},PlotStyle->Red]

We can fit this easily

Fit[1/ratedata2,{1,x},x]

Which is essentially perfect since we started with  vmax = 10, km = 5

Plot[%,{x,0,5}]

Show[%,%%%]

The fit is perfect

Get a nonlinear fit of the same data

kays =FindFit[ratedata2,Vmax S/(Km + S),{Vmax,Km},S]

Plot[Vmax S/(Km + S)/.{Vmax->10,Km->5},{S,0,9}, PlotStyle->Green]

Plot[Vmax S/(Km + S)/.{Vmax->10,Km->5`},{S,0,9}, PlotStyle->Green]

ListPlot[ratedata2]

Likewise, the fit is perfect.

Show[%124,%127]

With noise in data

Ok.  what if we have noise in the original data

data3 = N[Table[{i/10, (ans/.{vmax->10, km->5, c0->10,t->i/10})+(RandomReal[]-.5)/1.5},{i,1,30}]]

ListPlot[data3,AxesLabel->{"time, s","concentration (mol/l)"}]

Find the rates

ratedata3 = Table[{(data3[[i,2]]+data3[[i+1,2]])/2 , -(data3[[i+1,2]]-data3[[i,2]])/.1},{i,1,29}]

The noise is amplified!

data3plot=ListPlot[ratedata3,AxesLabel->{"concentration (mol/l)","rate"}]

We see that it would be folly to expect to be able to do anything with these data.  If we try...

lineweaverdata3= 1/ratedata3

It looks worse!

ListPlot[lineweaverdata3,AxesLabel->{"1/c","1/rate"}]

The slope is the wrong sign!

Fit[1/ratedata3,{1,x},x]

For the nonlinear plot, just use the rates...

kays =FindFit[ratedata3,Vmax S/(Km + S),{Vmax,Km},S]

Plot[Vmax S/(Km + S)/.kays,{S,0,9}, PlotStyle->Green]

ListPlot[ratedata3]

Show[%,%%]

This is not acceptable, but better than the linearized, Lineweaver plot!

Back to the raw data..

ListPlot[data3]

With a little guidance we can fit the km and vmax

kays =FindFit[data3,{(km ProductLog[((10 (E^((10/km)-((t vmax)/km))))/km)]),{1<km<10,4<vmax<10}},{vmax,km},t]

They come out ... not so bad!

km ProductLog[((10 (E^((10/km)-((t vmax)/km))))/km)]/.kays

Plot[ km ProductLog[((10 (E^((10/km)-((t vmax)/km))))/km)]/.kays,{t,0,3},PlotRange->{0,10}]

Show[%,%167]