Я изучил два связанных матричных ODE для задачи линейного квадратичного c отслеживания в оптимальном управлении, которые приведены ниже:
где
Я пытаюсь написать MATLAB, который решает дифференциальные уравнения одновременно. Вот что у меня есть:
function [dSdt dGdt] = mRiccati2(t, S, A, B, Q, R, G, r, h)
k = 1+floor(t/h);
S = reshape(S, size(A)); %Convert from "n^2"-by-1 to "n"-by-"n"
dSdt = A'*S + S*A - S*B*inv(R)*B'*S + Q; %Determine derivative
dGdt = -(A'- S*B*inv(R)*B')*G + Q*r(:,k);
dSdt = dSdt(:); %Convert from "n"-by-"n" to "n^2"-by-1
end
И я пытаюсь вызвать функцию как
[T S G] = ode45(@(t, S, G)mRiccati2(t, S, A, B, Q, R, G, r, h), [0:h:Tfinal], S0, G0);
К сожалению, я получаю эту ошибку:
Not enough input arguments.
Error in HW5 (line 24)
[T S G] = ode45(@(t, S, G)mRiccati2(t, S, A, B, Q, R, G, r, h), [0:h:Tfinal], S0, G0);
Error in odearguments (line 90)
f0 = feval(ode,t0,y0,args{:}); % ODE15I sets args{1} to yp0.
Error in ode45 (line 115)
odearguments(FcnHandlesUsed, solver_name, ode, tspan, y0, options, varargin);
Error in HW5 (line 24)
[T S G] = ode45(@(t, S, G)mRiccati2(t, S, A, B, Q, R, G, r, h), [0:h:Tfinal], S0, G0);
Есть ли общий способ правильно решить ODE со связанной матрицей с ode45
?