I am trying to call the RK4 function below in order to find the second initial value for my main function. However it gets stuck at the y(2), which is meant to be the second initial value. RK4 is meant to use the Q2 function as its f in order to find this second value, then come back to the main function and input this as y(2). RK4 works absolutely fine and does not need changing, nor does Q2.
Could someone please help me understand why I am getting this error in the title when i try to use the second t and second y value in order to find the second initial y value? I need the y(2) value to be the second y value found in the RK4 file.
I'm doing my best to explain it but please ask if something needs more clarification.
Main Function:
function [t,y]= MainFunction(f,a,b,y0,m)h=(b-a)/m;y=zeros(1,m+1);y(1)=y0;t=a:h:b;s=m;y(2)=RK4(Q2(t(2),y(2)),h,y0,a,s);y(3)=RK4(Q2(t(3),y(3)),h,y0,a,s);for i=1:m-2 y(i+3)=y(i+2)+h/12*(23*f(t(i+2),y(i+2))-16*f(t(i+1),y(i+1))+5*f(t(i),y(i)));endend
RK4:
function [y,fvalues] = RK4(f,h,y0,a,s)y=zeros(1,s+1);fvalues=zeros(1,s+1);y(1)=y0;b = a+s*h;t = a:h:b;for i=1:s fvalues(i) = f(t(i),y(i)); k1=h*fvalues(i); k2=h*f(t(i)+h/2,y(i)+k1/2); k3=h*f(t(i)+h/2,y(i)+k2/2); k4 =h*f(t(i)+h,y(i)+k3); y(i+1)=y(i)+ (1/6)*(k1+2*k2+2*k3+k4);endfvalues(s+1) = f(t(s+1),y(s+1));end
Q2:
function Q=Q2(t,y)Q=-(1+2.*t).*y;
This is the error as displayed in the command window:
>> MainFunction(@Q2,0,7,1,140)Subscript indices must either be real positive integers or logicals.Error in RK4 (line 10) fvalues(i) = f(t(i),y(i));Error in MainFunction (line 7)y(2)=RK4(Q2(t(2),y(1)),h,y0,a,s);
Best Answer