Subscript Indices must either be real positive intergers or logicals - not sure where i'm going wrong.
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Matthew Worker
el 25 de Feb. de 2018
Comentada: Rena Berman
el 19 de Mzo. de 2018
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)));
end
end
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);
end
fvalues(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);
1 comentario
Respuesta aceptada
Matt J
el 25 de Feb. de 2018
Editada: Matt J
el 25 de Feb. de 2018
Could someone please help me understand why I am getting this error
In
fvalues(i) = f(t(i),y(i));
you clearly intend f to be a function handle, but it is not. It is a numeric matrix and so the non-integers t(i) and y(i) are being viewed as an attempt to index that matrix.
3 comentarios
Matt J
el 25 de Feb. de 2018
I never said you should change RK4. Just pass an appropriate function handle for f, rather than a matrix.
Más respuestas (0)
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!