You are on page 1of 10

# Nonlinear Paramter Estimation via

fmincon in MATLAB

Xueyang Feng
Dept. of Energy, Environmental & Chemical
Engineering
fengx@seas.wustl.edu

Parameter Estimation
References
(e.g. literature)

Mathematic
Model

References
(e.g. literature)

Mathematic
Model

v.s.
Known
Parameters

Unknown
Parameters
Simulated
Results

Parameter
estimation

v.s.
Forward problem

Experimental
Results

Simulated
Results

Inverse problem

Experimental
Results

## Parameter estimation for linear systems

y = Ax + b
y, x are the vector of dependent and independent variables,
A, b are parameters to be estimated
For example, y=1+2sin(2t)
regress command in MATLAB

## Parameter estimation for nonlinear systems

y = f (parameters, x)
f is the nonlinear function of the estimated paramters
For example, y=1+2sin(3 t)
fmincon , nlinfit, etc. in MATLAB

Bioreactor model
dX
X
dt
dP
YP / X X
dt
dS
1

X X
dt
YX / S

max S
KS S

## Five parameters to be estimated:

YP/X, YX/S, max, Ks, and S(0)
Initial conditions:
X(0) = 0.05 g/L; P(0) = 0 g/L;

Experimental data
t
0.0
3.0
6.0
9.0
12.0
15.0
18.0
21.0
24.0
27.1

X
0.51
0.15
0.42
0.56
0.33
0.09
1.01
1.60
2.62
3.73

P
0.28
0.47
0.21
0.61
0.12
0.09
0.16
0.34
0.52
1.13

S
14.86
14.93
14.30
14.00
13.80
12.00
11.11
6.00
3.50
0.70

## We will use fmincon to

find the parameters

fmincon in MATLAB

## ceq, and c describes the nonlinear equalities/inequalities

among parameters
A and b describes the linear inequalities among
parameters
Aeq and beq describes the linear equalities among
parameters

[x fval] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

Estimated
parameters

## Errors of predicted Function that you Initial guess of

and observed
want to minimize, the parameters
results
i.e. the error

Boundaries of
the parameters

solver

## The Error Function

function [error,ypred] = reactor_model(beta)
global yobs
global t

## Input the observed data

%reactor model
S0=beta(5);
y0=[0.05 0 S0];
tspan=t; %we want y at every t
[t,y]=ode45(@ff,tspan,y0);

## function dy = ff(t,y) %function that computes

the dydt
umax=beta(1);
Ks=beta(2);
Ypx=beta(3);
Yxs=beta(4);
X=y(1);
P=y(2);
S=y(3);
u=umax.*S./(Ks+S);
dy(1)=u.*X;
dy(2)=Ypx.*u.*X;
dy(3)=-1/Yxs.*u.*X-u.*X;
dy=dy';
end
y1=y(:,1); y2=y(:,2); y3=y(:,3);
ypred=[y1; y2; y3];
error=sum((ypred-yobs).^2);
end

## The ODEs that describe

bioreactor behaviors

## The fmincon Function

%Use fmincon to find the parameters in reactor
model
clear
clc
t=data(:,1);
X=data(:,2);
P=data(:,3);
S=data(:,4);

x=t;
global yobs
global t
yobs=[X;P;S];
umax=0.1;
Ks=10;
Ypx=0.11;
Yxs=0.45;
S0=14.86;
beta0(1)=umax; %initial guess
beta0(2)=Ks; %initial guess
beta0(3)=Ypx; %initial guess
beta0(4)=Yxs; %initial guess
beta0(5)=S0; %initial guess

parameters

## The fmincon Function (continued)

%fmincon
fun=@reactor_model;
A=[];
b=[];
Aeq=[];
beq=[];
lb=zeros(5,1);
ub=lb+20;
nonlcon=[];
x0=beta0;%lb+rand.*(ub-lb);
options=optimset('Algorithm','interior-point');

## Settings to run fmincon

[param, fval] =
fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

## %get the predicted resutls

[error,ypred]=reactor_model(param);

Run the
model again to
A: Randomly perturb the initial
guess

n=length(t);
Xpred=ypred(1:n);
Ppred=ypred(n+1:2*n);
Spred=ypred(2*n+1:3*n);

## get the predicted results

figure(1)
set(gca, 'fontsize',14,'fontweight','bold');
hold on
plot(x,Xpred,'-r','linewidth',2.5);
plot(x,Ppred,'-g','linewidth',2.5)
plot(x,Spred,'-b','linewidth',2.5)
plot(x,X,'r+','markersize',10);
plot(x,P,'go','markersize',10)
plot(x,S,'bx','markersize',10)
xlabel('time')
ylabel('y')
legend('X g/L','P g/L','S g/L')

results

param =
0.2248
14.9987

3.8128

fval =
4.3559

## max = 0.2248 (1/h)

Ks = 3.8128 (g/L)
Ypx = 0.2606 (g/g)
Yxs = 0.3029 (g/g)
S0 = 14.9987 (g/L)

0.2606

0.3029

## Estimating confidence intervals of parameters via fmincon

Which one makes sense? Numbers in the brackets are the 95% confidence interval of
max
max = 0.2248 [0.1700 0.2797] (1/h)
Or
max = 0.2248 [-0.1064 0.2874] (1/h)

## Estimation of max is reliable

max cannot be accurately estimated

## How to estimate the confidence intervals of parameters?

bootstrap method: randomly resample the experimental observations; and for
each new set of sampled experimental observations, use fmincon to find a new set
of parameters.
Monte Carlo method: randomly perturb the experimental observations within the
measurement errors (i.e. standard derivation); and for each new set of perturbed
experimental observations, use fmincon to find a new set of parameters.