2013-05-30 1 views
0

matlab ode45에 문제가 있습니다. 시스템 y (1) 및 y (2)를 쓸 때만 작동하지만 더 사용할 때 y (4)에 액세스하려고 시도했습니다. 경계 중 인덱스 numel (Y)가 여기에 3 을 = 내 프로그램의 코드이기 때문에는, PLZ는 `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); 

와 코드가 오류없이 실행 :

는 교체합니다.

관련 문제