首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >微分方程Matlab

微分方程Matlab
EN

Stack Overflow用户
提问于 2013-04-13 00:02:24
回答 1查看 177关注 0票数 1

我对matlab不是很熟悉。我使用ode45求解形式为dS(t)/dt = F(S(t)) (给定S(0))的第一个微分方程。然后,我有第二个微分方程要解,它是dX(t)/dt = G(X(t),S(t)) (X(0)给定)。如何使用S上的结果来求解X上的方程?

我想要解S(和G)的值S(1)和G(1)。我的第一个想法是相当“天真”的。我首先创建一个函数,它给出了0,1中t的值S(t):

代码语言:javascript
复制
function dS=equation1(t,S)
dS=F(S);
end

function S=solve1(S0,t)
if t==0
  S=S0;
else
[~,V]=ode45(@equation1,[0 t],S0);
S=V(end,:)
end

然后我创建第二个函数来求解第二个方程:

代码语言:javascript
复制
function dX=equation2(t,X)
dX=G(X,solve1(t));
end

function G=solve2(X0,t)
[~,V]=ode45(@equation2,[0 t],X0);
end

最后,G(1)=solve2(X0,1)和S(1)=solve1(S0,1)。但我觉得有一种更好的方法!感谢您的帮助!

EN

回答 1

Stack Overflow用户

发布于 2013-04-13 01:41:35

这基本上是将微分方程扩展为包含更多参数,这可以非常简单地完成。因此,如果S:

代码语言:javascript
复制
ds[1] = s[1] - s[2];
ds[2] = 3*s[1] + 0.5*s[2];

现在假设X是二阶微分方程。扩展的X还将包含S(在此表示为x3和x4):

代码语言:javascript
复制
dx[1] = a1*x[1] + b1*x[2] + c1*x[3] + d1*x[4]
dx[2] = a2*x[1] + b2*x[2] + c2*x[3] + d2*x[4]
dx[3] = x[3] - x[4];
dx[4] = 3*x[3] + 0.5*x[4];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15975969

复制
相关文章

相似问题

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