24小时热门版块排行榜    

查看: 3524  |  回复: 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 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 什么时候开奖? +9 CrisMessi 2026-08-18 10/500 2026-08-23 12:03 by 丶昵称占用
[基金申请] 今天放榜吗? +15 布布和一二 2026-08-19 16/800 2026-08-23 09:55 by 张春生
[基金申请] 93BebMhtakh前后11位开头都是大写 +7 且听虎啸 2026-08-17 8/400 2026-08-22 21:55 by 医学老男孩
[基金申请] 只有每年这种时候来逛逛小木虫 +24 yaoyewhu2008 2026-08-20 26/1300 2026-08-22 17:43 by kammury
[基金申请] filecode,4个jtjc了 +13 ziyangfang 2026-08-19 16/800 2026-08-22 17:08 by WH3796
[基金申请] 今天基金会出结果吗?20260819 +16 kkkl_v 2026-08-19 17/850 2026-08-22 16:12 by 阿布Abu
[基金申请] 建议基金发布提前给出明确的时间点 +10 kulium 2026-08-21 13/650 2026-08-21 21:58 by alongwaytogo
[基金申请] 今日不放榜?网传国自然预计 8 月 27 日可查结果 +16 医学老男孩 2026-08-20 20/1000 2026-08-21 21:13 by Ldrop2023
[基金申请] 科研孤儿太难了 +17 我4大白菜 2026-08-20 18/900 2026-08-21 20:57 by zhangev
[基金申请] 感觉是下周放榜了 +7 angus9576 2026-08-17 12/600 2026-08-21 13:38 by weiyin
[基金申请] 我面上完蛋了 +7 且听虎啸 2026-08-20 8/400 2026-08-21 12:31 by 酷酷墨镜
[基金申请] 应该是下周三26日公布了吧? +4 哈哈蛤? 2026-08-21 4/200 2026-08-21 10:58 by Vivilian
[论文投稿] 投稿咨询 +5 wwm09 2026-08-17 7/350 2026-08-21 10:11 by 期刊论文帮手
[基金申请] 基金啊基金 +4 longfie172 2026-08-20 4/200 2026-08-21 08:58 by mark mao
[基金申请] 估计是周四 +3 archvillain 2026-08-18 3/150 2026-08-21 01:48 by jnhyjjm
[基金申请] 时间戳变了,能看出什么问题? +18 基诺咪客 2026-08-17 23/1150 2026-08-20 17:19 by Godzela
[基金申请] 重要消息,中午系统在维护 +11 yuleib84 2026-08-18 12/600 2026-08-20 11:09 by xskun
[基金申请] 朋友圈看到的 +6 wangzilk 2026-08-18 8/400 2026-08-19 10:55 by Haru815
[基金申请] 明天放榜? +5 Shxjjxjkx 2026-08-18 5/250 2026-08-18 18:14 by -大大大大大-
[基金申请] 今天维护系统维护 祝所有人 高中 +8 gjjjzhong 2026-08-18 9/450 2026-08-18 13:01 by 家与远方
信息提示
请填处理意见