首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Matlab或计算法求解耦合微分方程

用Matlab或计算法求解耦合微分方程
EN

Stack Overflow用户
提问于 2013-01-04 19:24:43
回答 2查看 11.1K关注 0票数 0

用Mat-lab或计算法求解耦合非线性微分方程

代码语言:javascript
复制
equation 1:   x'(t) = -a* x(t) /(x(t) + y(t))
equation 2:   y'(t) = -b* y(t) /(x(t) + y(t))

我尝试过mathematica,但得到了一个非常复杂的解决方案。

代码语言:javascript
复制
Solve[{x'[t] == -a* x[t] /(x[t] + y[t]), y'[t] == -b* y[t] /(x[t] + y[t])}, {x, y}, t]

我如何绘制它?

我的初始条件是

代码语言:javascript
复制
 x(0) = xo
 y(0) = yo

此外,a和b也是常量。

在插入a和b的值之后,我必须绘制x和y的wrt。( a= 2,b =5表示)

EN

回答 2

Stack Overflow用户

发布于 2013-01-04 23:00:39

在这种情况下需要注意的事情有很多:

  1. 您需要创建一个同时包含a和b的函数:

函数dy =soProblem(t,y,a,b) dy=-a*y(1)/(y(1)+y(2));-b*y(2)/(y(1)+y(2));end

  • 调用标准的ode函数:

A= 2;b= 5;tend = 10;x0 = 1;y0 = 2;T,Y= ode45(@(t,y)soProblem(t,y,a,b),0 tend,x0 y0);plot (T,Y)

  • 意识到你手上可能有一个stiff equation

  • 很享受识别理想函数调用的乐趣:

T15,Y15 = ode15s(@(t,y)soProblem(t,y,a,b),0 tend,x0 y0);T23t,Y23t = ode23t(@(t,y)soProblem(t,y,a,b),0 tend,x0 y0);T23tb,Y23tb = ode23tb(@(t,y)soProblem(t,y,a,b),0 tend,x0 y0);%note数学不收敛(或至少永远不收敛)图(T,Y,T15,Y15,T23t,Y23t,T23tb,Y23tb)

  • Understand为什么数学成为不稳定的
票数 6
EN

Stack Overflow用户

发布于 2013-01-04 19:37:10

在mathematica中:尝试ndsolve

在matlab中:

创建函数文件yourfunction.m:

代码语言:javascript
复制
function [Y_prime]=yourfunction(t, Y)
    Y_prime=[-2*Y(1)./(Y(1) + Y(2)) -5*Y(2)./(Y(1) + Y(2))];
end

然后

代码语言:javascript
复制
[T,Y] = ode45(yourfunction,[0 t_end],[x0 y0]);
plot(T,Y(:,1));
hold on
plot(T,Y(:,2));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14156236

复制
相关文章

相似问题

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