## How to solve differential equations with parameters using fmincon to find out optimized parameters

### kkng (view profile)

on 18 Jun 2014
Latest activity Commented on by kkng

on 19 Jun 2014

### Jason Nicholson (view profile)

Hello, I need to find out the optimized two parameter(a and b) to make minimum of (f2+f1-0.576). What I have is the differential equations of f1,f2,and f3.
for example, f1'=3*a/b*f2*f1+16*(f3-f1) f2'=-3*a/b*f2*f1+(f3-f1) f3'= 5*a/b*f1+(f2+f3) f1(0)=f2(0)=f3(0)=1 and f2(1)+f1(1)=0.576 for 0<-x<-1. The ranges of parameters are 0<-a<-10 and 100<-b<-1000.
And I want to use fmincon to optimize a and b to make minimum of (f2(1)+f1(1)-0.576). I can solve the differential equations with the fixed a and b. But I don't know how to find out the optimized a and b. My fmincon equation is, [x,f]=fmincon (@myfun,...)
F=myfun (x,a,b) F=f2(1)+f1(1)-0.576
In F equation, there is no a or b, so I can not set the initial,Ub, or Lb for a and b in fmincon. Actually, I don't know how to solve the differential equations with ode45 without a and b now. Can anyone help me to solve the equation? Thank you in advance.

### Jason Nicholson (view profile)

on 19 Jun 2014
Edited by Jason Nicholson

### Jason Nicholson (view profile)

on 19 Jun 2014

You need two functions:
1. Function to compute derivative. Mine is called "derivative."
2. Function to compute objective function. Mine is called "objectiveFunction."
Once you have the objective function, call fmincon. I do this in runOptimization. Note that
a = 3.2737
b = 3.2530
runOptimization.m
ab0 = [1; 1]; % initial guess
A = [ 1 0; % a<100
-1 0; % a>0
0 1; % b<22
0 -1];% b>0
b = [100*(1-eps); % a<100
0-eps; % a>0
22*(1-eps); % b<22
0-eps]; % b>0
ab = fmincon(@objectiveFunction, ab0, A, b);
a = ab(1);
b = ab(2);
derivative.m
function df = derivative(x, f, ab)
a = ab(1);
b = ab(2);
df = zeros(3,1);
df(1)=3*a/b*f(2)*f(1)+16*(f(3)-f(1));
df(2)=-3*a/b*f(2)*f(1)+(f(3)-f(1));
df(3)= 5*a/b*f(1)+(f(2)+f(3));
end % end function, derivative
objectiveFunction.m
function cost = objectiveFunction(ab)
f0 = [1;1;1];
[~, f] = ode113(@(t,f) derivative(t, f, ab), [0 1], f0);
cost = f(2, end) + f(1, end) - 0.576;
end % end function, objectiveFunction

kkng

### kkng (view profile)

on 19 Jun 2014
I really appreciate you! I have one more question. The answer you gave me is obtained using 'interior-point' as Algorithm. But if I change algorithm to 'sqp', the answer is [0.5291;1.4709]. Or with 'active-set', it says 'No active inequalities' and gave me [1;1]. How can I know which algorithm is most suitable? Thank you!
Jason Nicholson

### Jason Nicholson (view profile)

on 19 Jun 2014
To be honest, I don't know. What I do know is you can check to see if it gives you the lowest "cost" in the objective function. You can also read the help on the different algorithms available. Some of the algorithms do not use a gradient. Some do. Some can handle discontinuous cost functions. Good luck.
kkng

### kkng (view profile)

on 19 Jun 2014
Thank you, Jason!!