Search All of the Math Forum:

Views expressed in these public forums are not endorsed by NCTM or The Math Forum.

Notice: We are no longer accepting new posts, but the forums will continue to be readable.

Topic: Solving Matrix Riccati
Replies: 3   Last Post: Apr 6, 2013 12:51 PM

 Messages: [ Previous | Next ]
 Bart Posts: 3 Registered: 4/10/13
Re: Solving Matrix Riccati
Posted: Apr 6, 2013 12:51 PM

"Jeremy" wrote in message <kjnm7c\$282\$1@newscl01ah.mathworks.com>...
> I'm new to MATLAB and trying to use ODE45 to find the coefficients of the matrix Riccati equation for a controls problem.
>
> I'm not sure what I'm doing wrong.
>
> I've defined my Riccati equation in a function 'regulator'
>
> %Define matrices
> function dS=regulator(t,S)
>
> A=[0 1;0 -2.972];
> B=[0;390];
> Q=[(1/(pi^2)) 0;0 30];
> R=1;
>
> dS=-1*(A'*S+S*A-S*B*(R^-1)*B'*S+Q);
>
> end
>
> Then I'm just going straight to ODE45, doing something like this:
>
> [t,S]=ode45('regulator',[0 5],[0 0;0 0])
>
> looking for a solution to matrix S.
>
> Can I solve like this or do I have to multiply out all the terms of S? Assuming S is
>
> S = [s11(t) s12(t) ; s12(t) s22(t)];
>
> Any help would be appreciated.

Jeremy: as far as I know, the ODE function only accepts vectors as input. So you will have to reshape your matrix S into a vector.

This should work:
function [dP] = fun_ric(t,Pin)
%fun_ric

% reshape input
P = reshape(Pin,2,2);

% system matrices
A=[0 1;0 -2.972];
B=[0;390];
Q=[(1/(pi^2)) 0;0 30];
R=1;
Ri = R^-1;

% Ricatti equation:
dPt = A'*P+P*A+Q-P*B*Ri*B'*P;

% reshape
dP = reshape(dPt,4,1);
end

%% Test ricatti
clear all, close all, clc

%% ode params
P0 = zeros(2);
tspan = [0 2];

%% simulate
[t, P] = ode45('fun_ric',tspan,P0);

% P matrix (comparable with: P=care(A,B,Q,R))
Ptot = reshape(P(end,:),2,2)

figure(1)
plot(t,P)

If you compare the outcome of 'care' it will be the same as for Ptot when you simulate long enough (100 sec).

Date Subject Author
4/5/13 Guest
4/5/13 Nasser Abbasi
4/6/13 Jeremy
4/6/13 Bart