24小时热门版块排行榜    

查看: 2904  |  回复: 21

ybnav

银虫 (小有名气)

引用回帖:
Originally posted by change0618 at 2011-03-11 20:03:41:
z(t)  是个啥玩意

不好意思 是y(t)
11楼2011-03-11 22:29:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ybnav

银虫 (小有名气)

引用回帖:
Originally posted by zzg_gm at 2011-03-11 20:33:49:
这要用If语句判断,确定一些量的值然后用dsolve函数求解!要是想画图,可将求解出的函数表达式用plot命令画出(因为是一个个函数画图,只是二维的,所以用plot,而不是plot3),!你再试试,命令的格式一般的书上都有 ...

您的意思是不是要分段来做?求出各函数等于0的那个点?
12楼2011-03-11 22:31:03
已阅   回复此楼   关注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的回帖

change0618

铁杆木虫 (著名写手)

方丈大师

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
xiegangmai(金币+2): 谢谢应助! 2011-03-11 23:43:01
我觉得你这个方程的主要问题有:
在t=24.52之后x就开始小于0了,也就是说x=0时t在24.52-24.53之间,但是又出不来真实值。
假设在某t时x=0了,则f2(t)=0了,dxdt=-a*f2*v+a*f1*y+a*f3*y+c*y 却转向变成了正的,x又开始变正了,那f2(t)就有等于1了,此时dx/dt确实负的,x又开始降低变负.于是病态了
14楼2011-03-11 23:39:52
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xiegangmai

版主 (职业作家)

我没头衔

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


小木虫(金币+0.5):给个红包,谢谢回帖交流
引用回帖:
Originally posted by ybnav at 2011-03-11 22:37:59:
我在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 ...

如楼上分析的,到24后就算不下去了。
CODE:
function ybnav

clc
clear

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

figure
[ 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

figure
tspan = [ 0 24 ];
[ t, Y ] = ode45( @xyz1, 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



function dydt = xyz( t, y )

dydt = zeros( 5, 1 );
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 )
     ];

function dydt = xyz1( t, y )

dydt = zeros( 5, 1 );
dydt = [  -y( 5 ) * 0 * ( y( 1 ) == 0 ) + -y( 5 ) * 1 * ( y( 1 ) > 0 )
        -0.1 * y( 2 ) + y( 5 ) * 0 * ( y( 1 ) == 0 ) + y( 5 ) * 1 * ( y( 1 ) > 0 )
         0.1 * y( 2 )
        - y( 2 ) * 0 * ( y( 4 ) == 0 ) - y( 2 ) * 1 * ( y( 4 ) > 0 ) + y( 5 ) * 0 * ( y( 1 ) == 0 ) + y( 5 ) * 1 * ( y( 1 ) > 0 )  + y( 5 )  * 0 * ( y( 2 ) == 0 ) + y( 5 ) * 1 * ( y( 2 ) > 0 )+ 0.5 * y( 5 )
         y( 2 ) - y( 5 ) - y( 5 ) - 0.5 * y( 5 )
     ];

明德厚学、求是创新
15楼2011-03-11 23:43:47
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ybnav

银虫 (小有名气)

感谢两位,这是一篇文献上的,我想还原一下,因为我一篇论文里正好也可以用上,我再好好检查检查方程,看看是哪里的问题,非常感谢!
16楼2011-03-12 00:08:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

信彼南山

木虫 (著名写手)


xiegangmai(金币+1): 鼓励讨论交流!用Simulink是可以解的,也简便,但也需要方程不奇异。 2011-03-12 13:27:23
simulink一下试试
17楼2011-03-12 11:01:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

信彼南山

木虫 (著名写手)

★ ★ ★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
xiegangmai(金币+5): 谢谢应助!辛苦了! 2011-03-12 16:56:10
simulink做了一下



18楼2011-03-12 15:17:23
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

信彼南山

木虫 (著名写手)

f1和f2一直都是1
f3有变化
19楼2011-03-12 15:18:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ybnav

银虫 (小有名气)

只会简单的matlab操作,simulink还没接触过,要好好学习学习,感谢信彼南山大力相助
20楼2011-03-12 23:09:43
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 ybnav 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见