首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MATLAB ode45耦合矩阵ODE

MATLAB ode45耦合矩阵ODE
EN

Stack Overflow用户
提问于 2020-03-08 14:26:10
回答 1查看 228关注 0票数 1

我已经学习了最优控制中线性二次跟踪问题的两个耦合矩阵ODE,它们是:

哪里

我正在试着写一个能同时解微分方程的MATLAB。这是我到目前为止所知道的:

代码语言:javascript
复制
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

我试着像这样调用这个函数

代码语言:javascript
复制
[T S G] = ode45(@(t, S, G)mRiccati2(t, S, A, B, Q, R, G, r, h), [0:h:Tfinal], S0, G0);

不幸的是,我得到了这个错误:

代码语言:javascript
复制
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);

有没有用ode45正确解决耦合矩阵常微分方程的一般方法?

EN

回答 1

Stack Overflow用户

发布于 2020-03-09 00:15:05

Matlab使许多小事情变得更容易得到好的结果,但它不是智能的。你需要使你的问题适应Matlab的接口,没有自动检测。因此,您提供给ode45的函数需要为状态使用一个平面数组,并为导数返回一个平面数组。你已经找到了如何进行转换的答案,你只需要把它进行到最后。

代码语言:javascript
复制
function dXdt = mRiccati2(t, X, A, B, Q, R, r, h)
    k = 1+floor(t/h);
    n = size(A(1,:))
    X = reshape(X, [n+1,n]); %Convert from flat to matrix, first the rows of S, then G
    S = X(1:n,:);
    G = X(n+1,:);
    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);
    dXdt = [ dSdt(:) dGdt(:) ]; %Convert from matrix objects to flat arrays
end

然后,相应地调用积分器,根据初始矩阵将初始数据构建为平面数组

代码语言:javascript
复制
[T X] = ode45(@(t, X)mRiccati2(t, X, A, B, Q, R, r, h), [0:h:Tfinal], [S0(:) G0(:) ]);

要使用结果,您需要以与在导数函数中相同的方式从X的行重新构造矩阵。你可以用它来创建显式的助手函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60585024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档