24小时热门版块排行榜    

查看: 451  |  回复: 9
当前主题已经存档。

monitor2885

至尊木虫 (职业作家)

队长

[交流] 【求助】读个Matlab小程序ode45【已解决】 已有3人参与

function testplot
clear;clc
t=0:1:20;
[t,y]=ode45(@ivpodefun,t,[0 2]);
plot(t,y(:,1));

function dydt=ivpodefun(t,y)
cc=[1;5;8;13;20;24;30;2;3;9];
if t<=10
for i=1:20
u((i-1)*1<=t&&t<=(i*1))=cc(i);
end
else
u=0;
end
dydt=zeros(2,1);
dydt(1)=y(2);
dydt(2)=u*(1-y(1)^2)*y(2)-y(1);

??? Attempted to access cc(11); index out of bounds because numel(cc)=10.

提示说没有cc(11)的值,确实如此(数组cc一共10个数值)。但是我想知道,为什么程序会读取到cc(11)呢?当ode中的 t 不满足 if t<=10条件时,程序就应该跳到 else u=0;也就是说,程序应该不会读取cc(11)的值。怎么回事呢?

[ Last edited by nono2009 on 2010-4-14 at 10:39 ]
回复此楼

» 猜你喜欢

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

monitor2885

至尊木虫 (职业作家)

队长

u括号里面是判断句。就是起到分段函数的作用。
0 1 2
Retirement
2楼2010-04-12 15:10:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

change0618

铁杆木虫 (著名写手)

方丈大师


adu886886(金币+1):x谢谢指导 2010-04-14 08:10
monitor2885(金币+1): 2010-04-14 09:44
monitor2885(金币+2): 2010-04-14 09:46
for i=1:20
u((i-1)*1<=t&&t<=(i*1))=cc(i);
end
是这里碰到了11
3楼2010-04-13 17:36:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

change0618

铁杆木虫 (著名写手)

方丈大师

monitor2885(金币+1): 2010-04-14 09:46
以前好像这种问题给你处理过,是用分段积分,看来你还是不满意啊。
4楼2010-04-13 17:40:27
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

monitor2885

至尊木虫 (职业作家)

队长

引用回帖:
Originally posted by change0618 at 2010-04-13 17:36:49:
for i=1:20
u((i-1)*1<=t&&t<=(i*1))=cc(i);
end
是这里碰到了11

为什么会碰到11呢?当t<=10的时候,对应取到cc(1),cc(2),cc(3),...cc(9),cc(10), 按理说,i 不会运行到11呀
Retirement
5楼2010-04-13 17:49:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

change0618

铁杆木虫 (著名写手)

方丈大师

★ ★
nono2009(金币+2):谢谢应助! 2010-04-14 08:04
monitor2885(金币+1): 2010-04-14 09:44
i=1:20难道会碰不到11? 不碰到才奇怪! t跟i有关系吗?好像没关系吧,一旦判定t<=10, i 必然要从1进行到20,怎么会碰不到11啊?

[ Last edited by change0618 on 2010-4-13 at 19:49 ]
6楼2010-04-13 19:44:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

monitor2885

至尊木虫 (职业作家)

队长

引用回帖:
Originally posted by change0618 at 2010-04-13 19:44:53:
i=1:20难道会碰不到11? 不碰到才奇怪! t跟i有关系吗?好像没关系吧,一旦判定t<=10, i 必然要从1进行到20,怎么会碰不到11啊?

[ Last edited by change0618 on 2010-4-13 at 19:49 ]

比如,现在 t=1,符合t<=10,然后开始for循环,i=1, 括号里面判断0<=t<=1,符合条件,所以有 u=cc(1),此时就应该跳出for循环了吧?难道继续执行i=2,3,4,....20这些循环吗?
Retirement
7楼2010-04-13 23:16:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

nono2009(金币+1):谢谢应助! 2010-04-14 08:04
monitor2885(金币+5): 2010-04-14 09:45
引用回帖:
Originally posted by monitor2885 at 2010-04-13 23:16:01:

比如,现在 t=1,符合t<=10,然后开始for循环,i=1, 括号里面判断0<=t<=1,符合条件,所以有 u=cc(1),此时就应该跳出for循环了吧?难道继续执行i=2,3,4,....20这些循环吗?

引用回帖:
t=0:1:20;
t<=10;返回的是一个logical类型的矩阵 而不是一个值
在命令窗口一试就知道

>> t=0:1:20;
>> result=t<=10

result =

  Columns 1 through 12

     1     1     1     1     1     1     1     1     1     1     1     0

  Columns 13 through 21

     0     0     0     0     0     0     0     0     0

t是做为矩阵输进去的
又不是用for循环把t(i)一个个和10比较
下面的i和t压根儿就没有关系
if t<=10
%进入这里
  for i=1:20
     %进入循环
     %难道这时候还能跳回去判断t<=0。再说就算能跳回去,判断t<=0而不是t(i)<=10,照样全通过。
   
  end
else
...

[ Last edited by anyuezhiji on 2010-4-14 at 00:12 ]
8楼2010-04-14 00:01:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

change0618

铁杆木虫 (著名写手)

方丈大师

monitor2885(金币+3): 2010-04-14 09:45
建议楼主先去学习一下for语句和if语句
9楼2010-04-14 00:11:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

monitor2885

至尊木虫 (职业作家)

队长

谢谢楼上两位专家
Retirement
10楼2010-04-14 09:45:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 monitor2885 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见