"Jeremy" wrote in message <email@example.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)
If you compare the outcome of 'care' it will be the same as for Ptot when you simulate long enough (100 sec).