首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab。尝试访问y(4);索引越界,因为numel(y)=3

Matlab。尝试访问y(4);索引越界,因为numel(y)=3
EN

Stack Overflow用户
提问于 2013-05-31 06:28:47
回答 1查看 3.8K关注 0票数 0

我有一个关于matlab ode45的问题。当我写系统y(1)和y(2)时,只有y(1)和y(2)有效,但当我使用更多时,它会尝试访问y(4);index越界,因为numel(y)=3这里是我的程序代码,请检查它`

代码语言:javascript
复制
function ode_epidemic(  )
global alfa beta hama delta lambda myu
global nfunc
nfunc=0;
alfa=1; beta=1; hama=1; delta=1; lambda=1; myu=1;
options = odeset('RelTol',1e-5);
sol = ode45(@epidemic,[0 20],[5; 0.1; 0],options);
figure
hold on;
xlabel('x','FontSize',11)
ylabel('y','FontSize',11)
plot(sol.x,sol.y(1,:),'-',...
     sol.x,sol.y(2,:),'-.',...
     sol.x,sol.y(3,:),'.','LineWidth',2)
hold off;
grid 'on'
disp('number of iteration')
iter=length(sol.x)
disp('number calculation of F')
nfunc
iter1=iter-1;
h=zeros(iter1,1);
x=zeros(iter1,1);
for i=1:iter1
 h(i)=sol.x(i+1)-sol.x(i); 
 x(i)=sol.x(i);
end
figure
hold on;
xlabel('x');ylabel('y');
plot(x,h,'LineWidth',2);
hold off;
grid 'on'
end

function dy = epidemic(t,y)
global alfa beta hama delta lambda myu
global nfunc
nfunc=nfunc+1;
dy=zeros(4,1);
dy(1)=2*t*y(1)*y(4);
dy(2)=10*t*y(1)^5*y(4);
dy(3)=2*t*y(4);
dy(4)=-2*t*(y(3)-1);
end

`

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-31 06:53:02

您提供的y向量只有3个元素。

替换:

代码语言:javascript
复制
ode45(@epidemic,[0 20],[5; 0.1; 0;],options);

使用

代码语言:javascript
复制
ode45(@epidemic,[0 20],[5; 0.1; 0; 0],options);

并且代码运行时没有错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16846862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档