24小时热门版块排行榜    

查看: 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);

哪里错了呢?怎么改?谢谢
回复此楼

» 猜你喜欢

Retirement
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

change0618

铁杆木虫 (著名写手)

方丈大师


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
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

monitor2885

至尊木虫 (职业作家)

队长

引用回帖:
Originally posted by change0618 at 2010-03-17 19:45:45:
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];
     ...

比如,现在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 ]
Retirement
3楼2010-03-17 21:33:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

change0618

铁杆木虫 (著名写手)

方丈大师

★ ★
monitor2885(金币+5):继续发金币,谢谢哥们帮忙解决问题 2010-03-18 14:29
kuhailangyu(金币+2):欢迎积极参与 2010-03-18 16:24
[t,y]=ode45(@fun,[tspan(i),tspan(i+1)],y0,[],      (u(i),v(i))      );
改成
[t,y]=ode45(@fun,[tspan(i),tspan(i+1)],y0,[],      u(i),v(i)        );


global yy  可以去掉
4楼2010-03-17 23:04:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

monitor2885

至尊木虫 (职业作家)

队长

引用回帖:
Originally posted by change0618 at 2010-03-17 23:04:14:
[t,y]=ode45(@fun,[tspan(i),tspan(i+1)],y0,[],      (u(i),v(i))      );
改成
[t,y]=ode45(@fun,[tspan(i),tspan(i+1)],y0,[],      u(i),v(i)        );


global yy  可以去掉

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);

还是不对,再改改谢谢
Retirement
5楼2010-03-18 14:28:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

change0618

铁杆木虫 (著名写手)

方丈大师


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
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

张轩中

铜虫 (小有名气)

??? function abc
    |
Error: Function definitions are not permitted at the prompt or in scripts.
7楼2010-03-18 16:14:52
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

monitor2885

至尊木虫 (职业作家)

队长

引用回帖:
Originally posted by change0618 at 2010-03-18 15:38:18:
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));
...

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 ]
Retirement
8楼2010-03-18 19:45:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

change0618

铁杆木虫 (著名写手)

方丈大师


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
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

monitor2885

至尊木虫 (职业作家)

队长

引用回帖:
Originally posted by change0618 at 2010-03-18 21:46:37:
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,y]=ode45(@fun,[tspan(i):1:tspan(i+1)],y0,[],u(i),v(i));
还是 208 个点呀
Retirement
10楼2010-03-19 13:09:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 monitor2885 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见