24小时热门版块排行榜    

查看: 2906  |  回复: 21
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

ybnav

银虫 (小有名气)

[交流] 【求助】向各位大侠求助matlab求解微分方程组遇到的一个问题 已有7人参与

向各位大侠求助matlab求解微分方程组遇到的一个问题:
假设有以下的微分方程组

u'(t)=-a*f1(t)*y(t);
v'(t)=-b*v(t)+a*f1(t)*y(t);
w'(t)=b*v(t);
x'(t)=-a*f2(t)*v(t)+a*f1(t)*y(t)+a*f3(t)*y(t)+c*y(t);
y'(t)= a*f2(t)*v(t) - a*f1(t)*y(t) - a*f3(t)*y(t) - c*y(t);

其中  f1(t)=0 if u(t)=0
                 =1 if u(t)>0;
         f2(t)=0 if x(t)=0
                 =1 if x(t)>0;
          f3(t)=0 if v(t)=0
                 =1 if v(t)>0;
          a=1;b=0.1;c=0.5;
且u(0)=1000;v(0)=1;w(0)=0;x(0)=200;y(0)=0.现在要得到各函数随t的变化曲线,如果微分方程组中没有f1(t),f2(t),f2(t)这三个方程,那么在matlab中可以直接用ode来得到,但是现在有这三个方程,我就没办法了,试了好几种方法都没用,想请教各位高手,在matlab下怎么才能求解这个方程?

[ Last edited by ybnav on 2011-3-11 at 22:27 ]
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ybnav

银虫 (小有名气)

引用回帖:
Originally posted by xiegangmai at 2011-03-11 15:42:54:
把你的函数贴出来,我稍改改就可以求解了。

或者参考:http://muchong.com/bbs/viewthread.php?tid=2764636###

把微分方程写成分段函数的形式即可。

我在matlab里是这样做的:
如果不考虑f1(t)、f2(t)、f3(t),令它们的值都等于1
函数
function dydt=xyz(t,y)


dydt=[  -y(5)
        -0.1*y(2)+y(5)
         0.1*y(2)
        -y(2)+y(5)+y(5)+0.5*y(5)
         y(2)-y(5)-y(5)-0.5*y(5)
     ];


脚本
clear all
close all

clc

tspan = [0 60];
y0 = [1000;1;0;200;0];

[t,Y]=ode45(@xyz,tspan,y0);
plot(t,Y(:,1),'r-','LineWidth',1.5);
hold on;
plot(t,Y(:,2),'g-','LineWidth',1.5);
hold on;
plot(t,Y(:,3),'b.','LineWidth',1.5);
hold on;
plot(t,Y(:,4),'g.','LineWidth',1.5);
hold on;
plot(t,Y(:,5),'r-.','LineWidth',1.5);


axis([0 60 0 1000])
legend('Y(1)','Y(2)','Y(3)','Y(4)','Y(5)')
grid on

这是没有加上f1(t)、f2(t)、f3(t)这三个的情况,如果加上这三个函数,应该怎么改呢?
13楼2011-03-11 22:37:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 22 个回答

xiegangmai

版主 (职业作家)

我没头衔

优秀版主优秀版主优秀版主


小木虫(金币+0.5):给个红包,谢谢回帖交流
引用回帖:
Originally posted by ybnav at 2011-03-11 13:18:24:
向各位大侠求助matlab求解微分方程组遇到的一个问题:
假设有以下的微分方程组

u'(t)=-a*f1(t)*z(t);
v'(t)=-b*v(t)+a*f1(t)*z(t);
w'(t)=b*v(t);
x'(t)=-a*f2(t)*v(t)+a*f1(t)*y(t)+a*f3(t)*y(t)+c*y(t); ...

把你的函数贴出来,我稍改改就可以求解了。

或者参考:http://muchong.com/bbs/viewthread.php?tid=2764636###

把微分方程写成分段函数的形式即可。
明德厚学、求是创新
2楼2011-03-11 15:42:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ybnav

银虫 (小有名气)

引用回帖:
Originally posted by xiegangmai at 2011-03-11 15:42:54:
把你的函数贴出来,我稍改改就可以求解了。

或者参考:http://muchong.com/bbs/viewthread.php?tid=2764636###

把微分方程写成分段函数的形式即可。

就是这个微分方程组
u'(t)=-*f1(t)*y(t);
v'(t)=-0.1*v(t)+*f1(t)*y(t);
w'(t)=0.1*v(t);
x'(t)=-f2(t)*v(t)+f1(t)*y(t)+f3(t)*y(t)+0.5*y(t);
y'(t)= f2(t)*v(t) -f1(t)*y(t) -f3(t)*y(t) -0.5*y(t);

其中  f1(t)=0 if u(t)=0
                =1 if u(t)>0;
         f2(t)=0 if x(t)=0
                 =1 if x(t)>0;
          f3(t)=0 if v(t)=0
                 =1 if v(t)>0;
且u(0)=1000;v(0)=1;w(0)=0;x(0)=200;y(0)=0.

只要求在matlab中画出u(t)、v(t)、w(t)、x(t)、y(t)在t的某一段区间内,比如[0,60]的曲线图,还是没想出来改怎么办,同学说可能需要迭代,我也不知道怎么办,万分感谢版主同志!

[ Last edited by ybnav on 2011-3-11 at 22:28 ]
3楼2011-03-11 17:31:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ybnav

银虫 (小有名气)

引用回帖:
Originally posted by xiegangmai at 2011-03-11 15:42:54:
把你的函数贴出来,我稍改改就可以求解了。

或者参考:http://muchong.com/bbs/viewthread.php?tid=2764636###

把微分方程写成分段函数的形式即可。

刚方程写错了,应该是

就是这个微分方程组
u'(t)=-f1(t)*y(t);
v'(t)=-0.1*v(t)+f1(t)*y(t);
w'(t)=0.1*v(t);
x'(t)=-f2(t)*v(t)+f1(t)*y(t)+f3(t)*y(t)+0.5*y(t);
y'(t)= f2(t)*v(t) -f1(t)*y(t) -f3(t)*y(t) -0.5*y(t);

其中  f1(t)=0 if u(t)=0
                =1 if u(t)>0;
         f2(t)=0 if x(t)=0
                 =1 if x(t)>0;
          f3(t)=0 if v(t)=0
                 =1 if v(t)>0;
且u(0)=1000;v(0)=1;w(0)=0;x(0)=200;y(0)=0.

只要求在matlab中画出u(t)、v(t)、w(t)、x(t)、y(t)在t的某一段区间内,比如[0,60]的曲线图,还是没想出来改怎么办,同学说可能需要迭代,我也不知道怎么办,万分感谢版主同志!

[ Last edited by ybnav on 2011-3-11 at 22:31 ]
4楼2011-03-11 17:33:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见