2013-05-30 1 views
0

У меня проблема с matlab ode45. Когда я пишу систему y (1) и y (2), она работает, но когда я использую больше, она говорит Попытка получить доступ к y (4); индекс вне границ, потому что numel (у) = 3 Вот код моей программы, плз проверить это `Matlab. Попытка получить доступ к y (4); индекс за пределами, потому что numel (y) = 3

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 

`

ответ

1

Y-вектор вы поставляете только 3 элемента.

Заменить:

ode45(@epidemic,[0 20],[5; 0.1; 0;],options); 

с

ode45(@epidemic,[0 20],[5; 0.1; 0; 0],options); 

и код выполняется без ошибок.