Presentation is loading. Please wait.

Presentation is loading. Please wait.

4/12/2015 1 Example by Xueyang Feng: Nov 16th Parameter fitting for ODEs using fmincon function X = FMINCON(FUN,X0,A,B,Aeq,Beq) minimizes FUN subject to.

Similar presentations


Presentation on theme: "4/12/2015 1 Example by Xueyang Feng: Nov 16th Parameter fitting for ODEs using fmincon function X = FMINCON(FUN,X0,A,B,Aeq,Beq) minimizes FUN subject to."— Presentation transcript:

1 4/12/2015 1 Example by Xueyang Feng: Nov 16th Parameter fitting for ODEs using fmincon function X = FMINCON(FUN,X0,A,B,Aeq,Beq) minimizes FUN subject to the linear equalities Aeq*X = Beq as well as A*X <= B. (Set A=[] and B=[] if no inequalities exist.) Inverse problem (from experimental data to model construction) Part 2

2 d) Parameter fitting using nlinfit Inverse problem Unlike forward problems, inverse problems require experimental data, and an iterative solution. Because inverse problems require solving the forward problem numerous time, the ode45 solver will be nested within a nonlinear regression routine called “nlinfit.” The syntax is: [param, r, J, COVB, mse] = nlinfit(X, y, fun, beta0); returns the fitted coefficients param, the residuals r, the Jacobian J of function fun, the estimated covariance matrix COVB for the fitted coefficients, and an estimate MSE of the variance of the error term. X is a matrix of n rows of the independent variable y is n-by-1 vector of the observed data fun is a function handle to a separate m-file to a function of this form: yhat = fun(b,X) where yhat is an n-by-1 vector of the predicted responses, and b is a vector of the parameter values. beta0 is the initial guesses of the parameters.

3 Example 1: Model fitting ODE equation Based on experimental data, find y 0 and k. data =xlsread('exp_data.xls'); %read data from excel yo=100; k=0.6; beta0(1)=yo; beta0(2)=k; x=data(:,1); yobs=data(:,2); [param,resids,J,COVB,mse] = nlinfit(x,yobs,'forderinv',beta0); rmse=sqrt(mse); %root mean square error = SS/(n-p) %R is the correlation matrix for the parameters, sigma is the standard error vector [R,sigma]=corrcov(COVB); %confidence intervals for parameters ci=nlparci(param,resids,J); %computed Cpredicted by solving ode45 once with the estimated parameters ypred=forderinv(param,x); %mean of the residuals meanr=mean(resids);

4 figure hold on h1(1)=plot(x,ypred,'-','linewidth',3); %predicted y values h1(2)=plot(x,yobs,'square', 'Markerfacecolor', 'r'); legend(h1,'ypred','yobs') xlabel('time (min)') ylabel('y') %residual scatter plot figure hold on plot(x, resids, 'square','Markerfacecolor', 'b'); YLine = [0 0]; XLine = [0 max(x)]; plot (XLine, YLine,'R'); %plot a straight red line at zero ylabel('Observed y - Predicted y') xlabel('time (min)‘) Function with ode45 function y = forderinv(param,t) %first-order reaction equation tspan=t; %we want y at every t [t,y]=ode45(@ff, tspan, param(1)); %param(1) is y(0) function dy = ff(t, y) %function that computes the dydt dy(1)= -param(2)*y(1); end

5 One ODE Time y 0107.2637 0.10101102.9394 0.2020292.71275 0.90909175.15614 1.01010170.4741 1.11111169.83605 1.21212157.00548 1.31313160.03961 1.61616254.01795 1.71717256.79646 1.81818253.81866 1.91919249.67512 2.02020242.0459 2.12121240.42633 2.52525341.06735 2.62626339.48581 2.72727334.28254 2.82828330.3689 2.92929331.69877 3.23232325.20435 3.33333327.20177 3.43434319.71342 3.53535426.31708 3.93939423.20818 4.04040415.5449 4.34343419.08923 4.44444416.08262 4.54545519.26572 4.64646523.76179 4.74747511.85451 4.8484857.628606 4.9494957.998508 Time y 5.0505058.541471 5.45454512.46344 5.5555566.944696 5.65656615.90549 5.7575765.717727 5.8585869.637526 5.9595964.531673 6.0606065.446719 6.1616167.203193 6.2626267.02317 6.66666716.22408 6.7676775.286706 6.86868711.7421 6.969697-4.34103 7.0707079.103846 417395 7.5757589.998128 7.6767686.737791 7.7777787.460489 8.1818184.723043 8.2828288.394924 8.383838-0.45654 8.4848480.910225 8.8888897.662295 8.989899-0.04558 9.0909092.102022 9.1919191.454657 9.2929294.797709 9.3939399.16223 9.494949-5.94742 9.5959612.27148 9.696975.956534 103.329466 Raw data File name: exp_data.xls

6 /s/s Y p/s =Y x/s *Y p/x S X P Three ODES for batch fermentation

7 Three ODEs parameter fitting tXPS 00.05015 2.70.0825550.01953314.86978 5.40.1362590.05175514.65496 8.10.2247630.10485814.30095 140.6677680.37066112.52893 20.52.1511081.2606656.595568 24.13.6524642.1614780.590144 File name: HW217.xls

8 clear all %clear all variables global y0 data =xlsread('HW217.xls'); %initial conditions y0=[0.05 0 15]; %initial guess Umax=0.1; Ks=10; Ypx=0.11; Yxs=0.45; beta0(1)=Umax; beta0(2)=Ks; beta0(3)=Ypx; beta0(4)=Yxs; %Measured data x=data(:,1); yobsX=data(:,2); yobsP=data(:,3); yobsS=data(:,4); yobs=[yobsX; yobsP; yobsS]; %nlinfit returns parameters, residuals, Jacobian (sensitivity coefficient matrix), %covariance matrix, and mean square error. ode45 is solved many times %iteratively [param,resids,J,COVB,mse] = nlinfit(x, yobs,'forderinv2', beta0); Fitting four parameters Script

9 rmse=sqrt(mse); %root mean square error = SS/(n-p) n=size(x); nn=n(1); %confidence intervals for parameters ci=nlparci(param,resids,J); %computed Cpredicted by solving ode45 once with the estimated parameters ypred=forderinv2(param,x); ypredX=ypred(1:nn); ypredP=ypred(nn+1:2*nn); ypredS=ypred(2*nn+1:3*nn); %mean of the residuals meanr=mean(resids); Script

10 figure hold on plot(x, ypredX, x, ypredP, x, ypredS); %predicted y values plot(x, yobsX, 'r+', x, yobsP, 'ro', x, yobsS, 'rx'); xlabel('time (min)') ylabel('y') %residual scatter plot x3=[x; x; x]; figure hold on plot(x3, resids, 'square', 'Markerfacecolor', 'b'); YLine = [0 0]; XLine = [0 max(x)]; plot (XLine, YLine,'R'); %plot a straight red line at zero ylabel('Observed y - Predicted y') xlabel('time (min)‘) Script

11 function y = forderinv2(param,t) %first-order reaction equation global y0; tspan=t; %we want y at every t [t,y]=ode45(@ff,tspan,y0); %param(1) is y(0) function dy = ff(t,y) %function that computes the dydt dy(1)= param(1)*y(3)/(param(2)+y(3))*y(1); %biomass dy(2)= param(1)*param(3)*y(3)/(param(2)+y(3))*y(1); %product dy(3)= -1/param(4)*dy(1)-1/(param(3)*param(4))*dy(2); %substrate dy=dy'; end % after the ode45, rearrange the n-by-3 y matrix into a 3n-by-1 matrix % and send that back to nlinfit. y1=y(:,1); y2=y(:,2); y3=y(:,3); y=[y1; y2; y3]; end Function and sub-function

12 3. Simulink  Blocks  Blocks: generate, modify, combine, and display signals  Typical blocks  Continuous: Linear, continuous-time system elements (integrators, transfer functions, state-space models, etc.)  Discrete: Linear, discrete-time system elements (integrators, transfer functions, state-space models, etc.)  Functions & Tables: User-defined functions and tables for interpolating function values  Math: Mathematical operators (sum, gain, dot product, etc.)  Nonlinear: Nonlinear operators (coulomb/viscous friction, switches, relays, etc.)  Signals: Blocks for controlling/monitoring signals  Sinks: Used to output or display signals (displays, scopes, graphs, etc.)  Sources: Used to generate various signals (step, ramp, sinusoidal, etc.)  Lines  transfer signals from one block to another Basic elements

13 3. Simulink The graphic interfaces Matlab Simulink Type “simulink” in the command window

14 Tutorial example 4/12/2015 x = sin (t) simout

15 Simulink example 2 Creep compliance of a wheat protein film Using formaldehyde cross-linker  Creep compliance of a wheat protein film (determination of retardation time and free dashpot viscosity in the Jefferys model) Where J is the strain, J 1 is the retarded compliance (Pa -1 ); λ ret =µ 1 /G 1 is retardation time (s); µ 0 is the free dashpot viscosity (Pa s); t is the time.  The recovery of the compliance is following the equation (t >t 1 ): Where t1 is the time the stress was released.

16 4. Simulink examples Creep compliance of a wheat protein film Parameters: J 1 = a = 0.38 Mpa -1 ; λ ret = b = 510.6 s; µ 0 = c = 260800 Mpa s Simulink model

17 4. Simulink examples Creep compliance of a wheat protein film Simulation result

18 4. Simulink example Agitation Heater Aeration Products Biomass Heater Ethanol Biomass Regular fermenter Ethanol fermenter Fermentation system

19 4. Simulink examples Ethanol production kinetics Where: η is the toxic power, Pmax is the maximum product concentration at which the growth is completely inhibited Growth kinetics Substance consumption Product production

20 a. Using blocks to construct the model 4. Simulink examples Using S-function to construct the model (you may also writing the programs for simulink function)

21 Special help session November 28 (Monday, 6~9pm) I will be in Sever 201 computer Lab to answer your modeling questions. 4/12/2015 21

22 Introduction to Optimization The maximizing or minimizing of a given function subject to some type of constraints. Make your processes as effective as possible

23 To find the minimum of a multidimensional function in [-1.2, 1]: The plot of the function can be generated by the following code: [x, y]=meshgrid ([-2:0.1:2]); z=100*(y-x.^2).^2+(1-x).^2; mesh(x, y, z); grid on The function of ex2c is written as follow: function f=ex2c(x) f=100*(x(2)-x(1)^2)^2+(1-x(1))^2; The function of ex2cMinimum is written as follow: function ex2cMinimum fminsearch(@ex2c, [-1.2,1]); Example 1 (fminsearch) c) Introduction to Optimization clear clc [x, y]=meshgrid ([-2:0.1:2]); z=100*(y-x.^2).^2+(1-x).^2; mesh(x, y, z); grid on a=fminsearch(@ex2c, [-1.2,1]); x=a(1) y=a(2) z=100*(y-x.^2).^2+(1-x).^2

24 %=========================================== % Michaelis & Menten Model Fit. % File name "SimpleMMplot.m". %=========================================== clear clf global S V; % experiemntal data S=[0 1 2 3 4 5 6 7 8]; V=[0 0.08 0.15 0.18 0.2 0.21 0.215 0.216 0.216]; v0=[1; 1]; a=fminsearch('two_var',v0); %least square errors Km=a(1); Vmax=a(2); Vmodel=Vmax*S./(Km+S); plot(S,V,'ro', S, Vmodel) xlabel('Concentrations') ylabel('rate') legend('Data','Predict') function sumsqe= two_var(aa) global S V; Km =aa(1); Vmax =aa(2); Vmodel=Vmax*S./(Km+S); err=V-Vmodel; err2=err.*err; sumsqe=sum(err2); return Using fmin for curve fitting Example 2

25 Example 3 Find values of x that minimize Find values of x that minimize starting at the point x = [10; 10; 10] and subject to the constraints X = FMINCON(FUN, X0, A, B, Aeq, Beq, LB, UB) minimizes FUN subject to the linear equalities Aeq*X = Beq as well as A*X <= B. (Set A=[] and B=[] if no inequalities exist.)

26 %file name example1 clc;close all;clear all; int_guess=[10;10;10];% INITIAL GUESS FOR U'S A=[-1 -2 -2;1 2 2]; % equality constraints B=[0 72]; [u]=fmincon(@eg_1, int_guess, A, B) % CALL FOR OPTIMIZER Use fmincon for optimization FMINCON attempts to solve problems of the form: min F(X) subject to: A*X <= B, Aeq*X = Beq (linear constraints) C(X) <= 0, Ceq(X) = 0 (nonlinear constraints) LB <= X <= UB (bounds) %file name eg_1.m function [err]=eg_1(u) x1=u(1); x2=u(2); x3=u(3); err=-x1*x2*x3;

27 Example 4 (dynamic optimization) Consider the batch reactor with following reaction Consider the batch reactor with following reaction ABC Find the temperature, at which the product B is maximum Mathematical Representation of the system is as :

28 clc;close all;clear all; warning off int_guess=300;% INITIAL GUESS FOR U'S LB=298; % LOWER BOUND OF U UB=398;% UPPER BOUND ON U [u,FVAL]=fmincon(@reactor_problem,int_guess,[],[],[],[],LB,UB,[]); % CALL FOR OPTIMIZER PROBABLY NOT TO CHANGE BE USER [err]=reactor_problem(u); load data_for_system plot(t,Y(:,1),'k') hold on plot(t,Y(:,2),'m') legend('opt c_A','opt c_B') u T=335.3244 FVAL = -0.6058

29 function [err]=reactor_problem(u) A=[1 0]; %initial condition [t,Y]=ode15s(@reactor_ODE,[0 1], A,[],u); %tspan=1 err= - Y(end,2); %make the maximum B save data_for_system t Y %just for plotting function [YPRIME]=reactor_ODE(t,x,u) YPRIME=zeros(2,1); T=u; k1=4000*exp(-2500/T); k2=620000*exp(-5000/T); YPRIME(1)=-k1*(x(1))^2; YPRIME(2)=(k1*x(1)^2)-k2*x(2); Maximize B ODE calculation

30 Using MATLAB for solving more complicated dynamic models (Optional) 4/12/2015 30

31 For example, For example, solve complicated dynamic model in the bioprocess Many biological systems are dynamic and heterogeneous! Therefore, structured and segregated models have to be used.

32 Definitions Ordinary Differential Equation (ODE): The dependent variable is a function of only one independent variable. Partial Differential Equation (PDE): The dependent variable is a function of more than one dependent variable. Boundary-value problems are those where space conditions are not known; Initial-value problems are those dynamic condition are not known.

33 Finite-Difference Methods are often used to solve boundary-value problems. In these techniques, finite differences are substituted for the derivatives in the original equation, transforming a linear differential equation into a set of simultaneous algebraic equations. Boundary-value problems Dirichlet boundary conditions are those where a fixed value of a variable is known at a particular location. Neumann boundary conditions are those where a derivative is known at a particular location.

34 Final equation

35 4/12/2015 35 Marine pollution by oil compounds Oil transport and degradation in the porous sediment

36 How to solve PDEs using the finite difference method? a: one injection unit Find the time and space dependent change of C i,j The change of Contaminant concentrations in the porous environment

37 4/12/2015 function ydot=rhs2d2(t, y) global dx D ii jj Km Vmax for j=1:jj for i=1:ii vv=vv+1; yy(i,j) = y(vv); end for j=2:jj-1 for i=2:ii-1 R=-Vmax*yy(i,j)/(Km+yy(i,j)); Dffu1=(yy(i+1,j)-2*yy(i,j)+yy(i-1,j))/(dx*dx); Dffu2=(1/(dx*(i-1)))*(yy(i+1,j)-yy(i-1,j))/2/dx; Dffu3=(yy(i,j+1)-2*yy(i,j)+yy(i,j-1))/(dx*dx); dot(i,j) = D*(Dffu1+Dffu2+Dffu3)+R; bb = ii*(j-1)+i; ydot(bb) = dot(i,j); end ydot=ydot'; Sample codes for PDE problem. You can change PDE problem to many mini ODE problem, then you solve them at the same time.

38 Solving Reaction Engineering Problems with MATLAB By Lian He Solve PDE dynamic equations and nonlinear equilibrium equations

39 Example 1 Porous Catalyst Porous Catalyst The spherical catalysts are exposed to reactants at the initial time point. Given the information about the diffusion coefficient De, reaction rate, etc., we want to know the reactant concentration profile. (We assume that the reactant concentration in the catalyst is only a function of time and distance to the center for simplicity. ) R

40 Solution Dimensionless form Dimensionless form PDE Thiele Module Initial condition u(0, x)=0 Boundary conditions u(t, 1)=S surf

41 MATLAB tool: pdepe Syntax Syntax sol = pdepe(m, @pdefun, @icfun, @bcfun, xmesh, tspan, options) function [pl, ql, pr, qr]=pdebound(xl, ul, xr, ur, t) pr=ur-1; qr=0; pl=0; ql=1; end function u0=icfun(x) u0=0; end function [c, f, s] = pdefun(x, t, u, DuDx) c=1; f=φ^(-2)*DuDx; s=-u/(1+u/beta); end

42 Results

43 clc; clear all; x=0:0.02:1; %radius range t=0:0.04:8; %timespan u=pdepe(2,@pdefun,@icfun,@bcfun,x,t);%m=2 %Show the concentration profile as a function of time for k=1:length(t) plot(x,u(k,:),'linewidth',2); xlabel('distance from the center'); ylabel('substrate concentration'); pause(.2) end figure(2) %3D plot mesh(x,t,u); xlabel('x'); ylabel('t'); zlabel('u'); axis([0 1 0 8 0 1]); function [pl, ql, pr, qr]=bcfun(xl, ul, xr, ur, t) pr=ur-1; qr=0; pl=0; ql=1; end function u0=icfun(x) u0=0; end function[c,f,s]=pdefun(x,t,u,DuDx) De=3*10^-4; Ss=1*10^-4; Km=0.1*Ss; R=0.001; umax=0.5; Mt=R*sqrt(umax/Km/De); beta=Km/Ss; c=1; f=Mt^(-2)*DuDx; s=-u/(1+u/beta); end Main script Three Functions

44 Example 2

45 Solution Speciesn j0 njnj H2OH2O11-2X 1 CO 2 0X 1 -X 2 CO02X 2 CH 4 0X3X3 H2H2 02(X 1 -X 3 ) sum11+X 1 +X 2 -X 3 #ReactionMolar Extent 1 C+2H 2 O=CO 2 +2H 2 X1X1 2 C+CO 2 =2CO X2X2 3 C+2H 2 =CH 4 X3X3

46 Nonlinear equations You can use MATLAB tool-fsolve to solve the problem

47 clear all; clc; %initial guess of molar extent x0=[0.3 0.3 0.3]; %set the intial values T=600; %creat different vectors for recording temperature, molar extent and molar %fraction t=zeros(101,1); X=zeros(101,3); yH2O=zeros(101,1); yCO2=zeros(101,1); yCO=zeros(101,1); yCH4=zeros(101,1); yH2=zeros(101,1); for i=1:101 %find the solution [x,fval] = fsolve(@nlfunc,x0,[],T); %record the results t(i)=T; X(i,:)=x; %caculate the molar fraction of each species yH2O(i)=(1-2*x(1))/(1+x(1)+x(2)-x(3)); yCO2(i)=(x(1)-x(2))/(1+x(1)+x(2)-x(3)); yCO(i)=2*x(2)/(1+x(1)+x(2)-x(3)); yCH4(i)=x(3)/(1+x(1)+x(2)-x(3)); yH2(i)=2*(x(1)-x(3))/(1+x(1)+x(2)-x(3)); %change values for the next loops T=T+10; end %plotting subplot(2,2,[1 3]); plot(t,X(:,1),'o',t,X(:,2),'*',t,X(:,3),'.'); legend('C+H_2O=>CO_2+2H_2','C+CO_2=>2CO','C+2H_2=>CH_4'); xlabel('Temperature (K)'); ylabel('molar extent'); axis([600 1600 0 0.6]); subplot(2,2,[2 4]); plot(t,yH2O,'o',t,yCO2,'-o',t,yCO,'.',t,yCH4,'*',t,yH2,'^'); legend('H_2O','CO_2','CO','CH_4','H_2'); xlabel('Temperature (K)'); ylabel('molar fraction'); axis([600 1600 0 0.6]); Main script

48 function F = nlfunc(x,T) %coefficient values K1=9.73*10^(-12)*exp(-10835/T+36.36); K2=9.92*10^(-22)*exp(-20740/T+69.60); K3=8.00*10^8*exp(8973/T-30.11); %three column vectors F=zeros(1,3); %functions F(1)=4*(x(1)-x(3))^2*(x(1)-x(2))-K1*(1-2*x(1))^2*(1+x(1)+x(2)-x(3)); F(2)=4*x(2)^2-K2*(x(1)-x(2))*(1+x(1)+x(2)-x(3)); F(3)=x(3)*(1+x(1)+x(2)-x(3))-4*K3*(x(1)-x(3))^2; end Fsolve function to solve nonlinear equation

49 Results


Download ppt "4/12/2015 1 Example by Xueyang Feng: Nov 16th Parameter fitting for ODEs using fmincon function X = FMINCON(FUN,X0,A,B,Aeq,Beq) minimizes FUN subject to."

Similar presentations


Ads by Google