24小时热门版块排行榜    

查看: 546  |  回复: 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的回帖

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的回帖
查看全部 12 个回答

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的回帖
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见