| 查看: 1181 | 回复: 10 | |||
| 当前主题已经存档。 | |||
monitor2885至尊木虫 (职业作家)
队长
|
[交流]
【求助】简单的ode45程序修改
|
||
|
function abc clear all;clc global y u u=[1;2;3;4;5]; t=0:4; [t,y]=ode45(@fun,t,[0 2]); plot(y) function dydt=fun(t,y) global u v=u*2; dydt=zeros(2,1); dydt(1)=y(2); dydt(2)=v*y(1)-2*v*y(2); 哪里错了呢?怎么改?谢谢 |
» 猜你喜欢
假如你的研究生提出不合理要求
已经有4人回复
论文终于录用啦!满足毕业条件了
已经有27人回复
所感
已经有3人回复
要不要辞职读博?
已经有7人回复
不自信的我
已经有11人回复
北核录用
已经有3人回复
实验室接单子
已经有3人回复
磺酰氟产物,毕不了业了!
已经有8人回复
求助:我三月中下旬出站,青基依托单位怎么办?
已经有10人回复
26申博(荧光探针方向,有机合成)
已经有4人回复

change0618
铁杆木虫 (著名写手)
方丈大师
- 应助: 44 (小学生)
- 金币: 17724.5
- 红花: 17
- 帖子: 2413
- 在线: 546.7小时
- 虫号: 496517
- 注册: 2008-01-19
- 专业: 化学反应工程
★
monitor2885(金币+5):帮忙看下面一个 2010-03-17 21:33
kuhailangyu(金币+1):欢迎积极参与 2010-03-18 16:24
monitor2885(金币+5):帮忙看下面一个 2010-03-17 21:33
kuhailangyu(金币+1):欢迎积极参与 2010-03-18 16:24
|
function abc clear all clc u=[1;2;3;4;5]; tspan=0:1:4; tt=[];yy=[]; y0=[0 2]; for i=1:length(tspan)-1 [t,y]=ode45(@fun,[tspan(i),tspan(i+1)],y0,[],u(i)); tt=[tt;t];yy=[yy;y]; y0=y(end,: ); end figure(1) plot(tt,yy) function dydt=fun(t,y,u) v=u*2; dydt=[y(2); v*y(1)-2*v*y(2)]; |
2楼2010-03-17 19:45:45
monitor2885
至尊木虫 (职业作家)
队长
- 应助: 6 (幼儿园)
- 贵宾: 0.339
- 金币: 38693.5
- 散金: 147
- 红花: 22
- 帖子: 4942
- 在线: 2166小时
- 虫号: 701577
- 注册: 2009-02-15
- 性别: GG
- 专业: 生态系统生态学
|
比如,现在2个参数,即u和v,下面哪里不对呢? clear all;clc global yy u=[1;5;15;20;25]; v=[6;12;18;24;30]; tspan=0:1:4; tt=[];yy=[]; y0=[0 2]; for i=1:length(tspan)-1 [t,y]=ode45(@fun,[tspan(i),tspan(i+1)],y0,[],(u(i),v(i))); tt=[tt;t]; yy=[yy;y]; y0=y(end, ;end figure;plot(tt,yy) function dydt=fun(t,y,u,v) dydt=zeros(2,1); dydt(1)=u+y(2); dydt(2)=v*y(1)-2*v*y(2); [ Last edited by monitor2885 on 2010-3-17 at 21:34 ] |

3楼2010-03-17 21:33:30
change0618
铁杆木虫 (著名写手)
方丈大师
- 应助: 44 (小学生)
- 金币: 17724.5
- 红花: 17
- 帖子: 2413
- 在线: 546.7小时
- 虫号: 496517
- 注册: 2008-01-19
- 专业: 化学反应工程
4楼2010-03-17 23:04:14
monitor2885
至尊木虫 (职业作家)
队长
- 应助: 6 (幼儿园)
- 贵宾: 0.339
- 金币: 38693.5
- 散金: 147
- 红花: 22
- 帖子: 4942
- 在线: 2166小时
- 虫号: 701577
- 注册: 2009-02-15
- 性别: GG
- 专业: 生态系统生态学
|
global yy u v u=[1;5;15;20;25]; v=[6;12;18;24;30]; tspan=0:1:4; tt=[];yy=[]; y0=[0 2]; for i=1:length(tspan)-1 [t,y]=ode45(@fun,[tspan(i),tspan(i+1)],y0,[],u(i),v(i)); tt=[tt;t]; yy=[yy;y]; y0=y(end, ;end figure;plot(tt,yy) function dydt=fun(t,y) global u v r=u+2; s=v-2; dydt=zeros(2,1); dydt(1)=r+y(2); dydt(2)=s*y(1)-2*s*y(2); 还是不对,再改改谢谢 |

5楼2010-03-18 14:28:35
change0618
铁杆木虫 (著名写手)
方丈大师
- 应助: 44 (小学生)
- 金币: 17724.5
- 红花: 17
- 帖子: 2413
- 在线: 546.7小时
- 虫号: 496517
- 注册: 2008-01-19
- 专业: 化学反应工程
★
kuhailangyu(金币+1):欢迎积极参与 2010-03-18 16:24
monitor2885(金币+5):global yy之后,我发现yy有208个,为何不是5个呢? 2010-03-18 19:43
kuhailangyu(金币+1):欢迎积极参与 2010-03-18 16:24
monitor2885(金币+5):global yy之后,我发现yy有208个,为何不是5个呢? 2010-03-18 19:43
|
function abc clear all clc u=[1;5;15;20;25]; v=[6;12;18;24;30]; tspan=0:1:4; tt=[];yy=[]; y0=[0 2]; for i=1:length(tspan)-1 [t,y]=ode45(@fun,[tspan(i),tspan(i+1)],y0,[],u(i),v(i)); tt=[tt;t]; yy=[yy;y]; y0=y(end,: ); end plot(tt,yy) function dydt=fun(t,y,u,v) r=u+2; s=v-2; dydt=[r+y(2); s*y(1)-2*s*y(2)]; |
6楼2010-03-18 15:38:18
7楼2010-03-18 16:14:52
monitor2885
至尊木虫 (职业作家)
队长
- 应助: 6 (幼儿园)
- 贵宾: 0.339
- 金币: 38693.5
- 散金: 147
- 红花: 22
- 帖子: 4942
- 在线: 2166小时
- 虫号: 701577
- 注册: 2009-02-15
- 性别: GG
- 专业: 生态系统生态学
|
global yy之后,我发现yy有208个,为何不是5个呢?我知道ode45是变步长,但是如果写成ode45(@fun,tspan,y0),就会有5个yy,而不是208个。为什么 比如说,下面的简单程序:y就是5个 global y tspan=0:1:4; y0=[0 2]; [t,y]=ode45(@fun,tspan,y0); function dydt=fun(t,y) dydt=zeros(2,1); dydt(1)=y(2); dydt(2)=y(1)-2*y(2); [ Last edited by monitor2885 on 2010-3-18 at 19:48 ] |

8楼2010-03-18 19:45:31
change0618
铁杆木虫 (著名写手)
方丈大师
- 应助: 44 (小学生)
- 金币: 17724.5
- 红花: 17
- 帖子: 2413
- 在线: 546.7小时
- 虫号: 496517
- 注册: 2008-01-19
- 专业: 化学反应工程
★
adu886886(金币+1):谢谢提供意见 2010-03-19 08:29
monitor2885(金币+5):[t,y]=ode45(@fun,[tspan(i):1:tspan(i+1)],y0,[],u(i),v(i)); 还是208个点呀 2010-03-19 13:09
adu886886(金币+1):谢谢提供意见 2010-03-19 08:29
monitor2885(金币+5):[t,y]=ode45(@fun,[tspan(i):1:tspan(i+1)],y0,[],u(i),v(i)); 还是208个点呀 2010-03-19 13:09
|
tspan=0:1:4; [t,y]=ode45(@fun,tspan,y0); 这两句会令t=[0 1 2 3 4],并将其对应的值赋给y,所以y只有5个; 而[t,y]=ode45(@fun,[tspan(i),tspan(i+1)],y0,[],u(i),v(i)); 此句中的[tspan(i),tspan(i+1)],只给定了一个区间, t的元素个数一般取其计算过程中的个数 如果你只想取五个值,那就用tspan(i):tspan(i+1), 你画图的话会看到五个点,但实际上是8个点,中间三个有重复 如果想彻底只有5个,你可以自己抠掉。 当然还有其他方法抽取那五个点的y值。 程序肯定是计算了很多很多个点,但是具体你要取几个,那在于你的意图了。 |
9楼2010-03-18 21:46:37
monitor2885
至尊木虫 (职业作家)
队长
- 应助: 6 (幼儿园)
- 贵宾: 0.339
- 金币: 38693.5
- 散金: 147
- 红花: 22
- 帖子: 4942
- 在线: 2166小时
- 虫号: 701577
- 注册: 2009-02-15
- 性别: GG
- 专业: 生态系统生态学

10楼2010-03-19 13:09:54












回复此楼
;