24小时热门版块排行榜    

查看: 544  |  回复: 11
当前主题已经存档。

monitor2885

至尊木虫 (职业作家)

队长

[交流] 【求助】u顺次取值

function test
global u
t=0:1:10;
[t,y]=ode45(@ivpodefun,t,[0 2]);
plot(t,y(:,1),'ro-',t,y(:,2),'b^-')

function dydt=ivpodefun(t,y,u)
global u
u=xlsread('data.xls');% u在excel里面是一列数,1;2;3;4;5;6;5;4;3;2;1;
dydt=zeros(2,1);
dydt(1)=y(2);
dydt(2)=u*(1-y(1)^2)*y(2)-y(1);

目的:让时间运行一个值,参数u就取一个值,顺次取值。u的这11个数是从excel写入的。上面这些程序似乎要加几句,谢谢帮忙。
回复此楼

» 猜你喜欢

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

change0618

铁杆木虫 (著名写手)

方丈大师


kuhailangyu(金币+1,VIP+0):欢迎积极参与 10-14 13:58
t是一个积分区间,程序运行的时候并非只取你所给定的0:1:10值,只是绘图显示的时候是t=0:1:10对应的y值。你可以逐步显示看一下,t在0:1之间变步长就取了几十个值.
2楼2009-10-14 12:32:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

change0618

铁杆木虫 (著名写手)

方丈大师

不知道是不是你所要的

[ Last edited by change0618 on 2009-10-14 at 12:51 ]
3楼2009-10-14 12:36:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

change0618

铁杆木虫 (著名写手)

方丈大师

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
nono2009(金币+3,VIP+0):谢谢热心帮助。欢迎常来交流。 10-14 13:12
monitor2885(金币+10,VIP+0):的确牛B,还得继续请教。 10-14 14:13
function test
clear
clc
global u
u0=xlsread('data.xls');% u在excel里面是一列数,1;2;3;4;5;6;5;4;3;2;1;
t0=0:1:10;
y0=[0 2];
tt=[];yy=[];
for i=1:length(t0)-1
    t=[t0(i), t0(i+1)];
    u=u0(i);
    [t,y]=ode45(@ivpodefun,t,y0);
    y0=y(end,: );
    tt=[tt;t];
    yy=[yy;y];
end
figure
plot(tt,yy(:,1),'ro-',tt,yy(:,2),'b^-')

function dydt=ivpodefun(t,y)
global u
dydt=[y(2);
      u*(1-y(1)^2)*y(2)-y(1)];

[ Last edited by change0618 on 2009-10-14 at 13:01 ]
4楼2009-10-14 12:49:47
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

monitor2885

至尊木虫 (职业作家)

队长

引用回帖:
Originally posted by change0618 at 2009-10-14 12:32:
t是一个积分区间,程序运行的时候并非只取你所给定的0:1:10值,只是绘图显示的时候是t=0:1:10对应的y值。你可以逐步显示看一下,t在0:1之间变步长就取了几十个值.

通过odeset,把 initialstep设定为1,可以吗?能不能实现程序运行的步长就是1

options=odeset('initialstep',1);
Retirement
5楼2009-10-14 14:14:58
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

change0618

铁杆木虫 (著名写手)

方丈大师

★ ★ ★ ★ ★
monitor2885(金币+3,VIP+0):解释一下上面的程序吧 10-14 18:40
sunxiao(金币+2,VIP+0):谢谢参与,欢迎常来 10-15 05:00
好像不行,ode45本身就是变步长算法,设置initialstep只是提供一个初始的步长,随着精度的要求,步长必然不断减小。你可以采用定步长法程序,像龙格库塔法,自己可以编写一个。但是会面临u的变化问题。

[ Last edited by change0618 on 2009-10-14 at 17:58 ]
6楼2009-10-14 16:40:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

monitor2885

至尊木虫 (职业作家)

队长

引用回帖:
Originally posted by change0618 at 2009-10-14 12:49:
function test
clear
clc
global u
u0=xlsread('data.xls');% u在excel里面是一列数,1;2;3;4;5;6;5;4;3;2;1;
t0=0:1:10;
y0=[0 2];
tt=[];yy=[];
for i=1:length(t0)-1
    t=[t0(i), t0(i+ ...

y0=y(end,: );
    tt=[tt;t];
    yy=[yy;y];

这三句,每一句的意思和目的是什么呢?解释一下呗,没看懂。谢谢
Retirement
7楼2009-10-14 18:39:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

change0618

铁杆木虫 (著名写手)

方丈大师

★ ★ ★ ★ ★ ★ ★
monitor2885(金币+5,VIP+0):y(end,:)中的end和冒号分别指代谁呢? 10-15 00:10
sunxiao(金币+2,VIP+0):很好,很有耐心 10-15 05:00
for i=1:length(t0)-1   
    t=[t0(i), t0(i+1)];  %u取值的不同,将积分区间依次分成了10段
    u=u0(i);
    [t,y]=ode45(@ivpodefun,t,y0);
    y0=y(end,: );      % 设置下一积分区间的初值,因为y0=[0 2]只是t=0时的初值。在积分区间t=[t0(i+1), t0(i+2)]时,初值应该变为t0(i+1)对应的y(end,: )值。
    tt=[tt;t];            % 将本次积分区间点与前面的积分区间点合并
    yy=[yy;y];          % 将本次积分区间点对应的函数值与前面的函数值合并
end


有一个缺点就是由于分段区间是闭区间,所以在分段点(1 2 3 4 5 6 7 8 9)上, tt,yy在有二次重复

可以 改成
for i=1:length(t0)-1
    t=[t0(i), t0(i+1)];
    u=u0(i);
    [t,y]=ode45(@ivpodefun,t,y0);
    y0=y(end,: );
    tt=[tt;t(1:end-1)];
    yy=[yy;y(1:end-1,: )];
end
tt=[tt;t(end)];
yy=[yy;y(end,: )];


具体的区别你可以显示一下看看
8楼2009-10-14 18:57:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

monitor2885

至尊木虫 (职业作家)

队长

y0=y(end,: );      % 设置下一积分区间的初值,因为y0=[0 2]只是t=0时的初值。在积分区间t=[t0(i+1), t0(i+2)]时,初值应该变为t0(i+1)对应的y(end,: )值。

end和冒号分别指代谁?
Retirement
9楼2009-10-15 00:11:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

change0618

铁杆木虫 (著名写手)

方丈大师

★ ★ ★ ★ ★ ★ ★ ★ ★
nono2009(金币+2,VIP+0):谢谢热心帮助。欢迎常来交流。 10-15 10:39
monitor2885(金币+5,VIP+0):你不但牛B,还有责任心! 10-15 19:48
wuguocheng(金币+2,VIP+0): 再奖励一下 10-15 20:05
y0=y(end,: );      % 在这里end表示最后一行, : 表示所有列,所以y(end,: )表示y矩阵(n×2矩阵)的最后一行行向量(两个元素y1,y2,就是微分方程中的y1,y2).积分区间是[t(i),t(i+1)],所以也就是t(i+1)所对应的y1, y2值,也是下一个积分区间[t(i+1),t(i+2)]对应的初值。

[ Last edited by change0618 on 2009-10-15 at 09:50 ]
10楼2009-10-15 09:43:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 monitor2885 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见