hi im working in a RK45 method and im gettin Array indices must be positive integers or logical values error , for my t(i), already try changing the initial state of t and same error.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [xk_1 , yk_1 , zk_1, t] = RK452(x0,y0,z0,a,b,c,d,tol) h = 0.01183156389; %RK452(-1.6,0,1.6,15,25.58,-0.7142857,-1.1428571,0.0000000001);
time=0;t=0;s=1;i=0;xk_1=[];yk_1=[];zk_1=[];%%for t = 1:time:100
while (time<=100); x=x0; y=y0; z=z0;dx = a*y-a*x-a*(c*x+(1./2)*(d-c)*(abs(x+1)-abs(x-1)));dy = x-y-z;dz = -b*y; k1x = h*dx;k1y =h*dy;k1z =h*dz;clear dx dy dz x y z x=x0+(1./4)*k1x; y=y0+(1./4)*k1y; z=z0+(1./4)*k1z;dx = a*y-a*x-a*(c*x+(1./2)*(d-c)*(abs(x+1)-abs(x-1)));dy = x-y-z;dz = -b*y; k2x =h*dx;k2y =h*dy;k2z =h*dz;clear dx dy dz x y z x=x0+(3./32)*k1x +(9./32)*k2x; y=y0+(3./32)*k1y +(9./32)*k2y; z=z0+(3./32)*k1z +(9./32)*k2z;dx = a*y-a*x-a*(c*x+(1./2)*(d-c)*(abs(x+1)-abs(x-1)));dy = x-y-z;dz = -b*y; k3x =h*dx;k3y =h*dy;k3z =h*dz;clear dx dy dz x y z x=x0+(1932./2197)*k1x -(7200./2197)*k2x+(7296./2197)*k3x; y=y0+(1932./2197)*k1y -(7200./2197)*k2y+(7296./2197)*k3y; z=z0+(1932./2197)*k1z -(7200./2197)*k2z+(7296./2197)*k3z;dx = a*y-a*x-a*(c*x+(1./2)*(d-c)*(abs(x+1)-abs(x-1)));dy = x-y-z;dz = -b*y; k4x =h*dx;k4y =h*dy;k4z =h*dz;clear dx dy dz x y z x=x0+(439./216)*k1x- 8*k2x -(3680./513)*k3x+(845./4104)*k4x; y=y0+(439./216)*k1y- 8*k2y -(3680./513)*k3y+(845./4104)*k4y; z=z0+(439./216)*k1z- 8*k2z -(3680./513)*k3z+(845./4104)*k4z;dx = a*y-a*x-a*(c*x+(1./2)*(d-c)*(abs(x+1)-abs(x-1)));dy = x-y-z;dz = -b*y; k5x =h*dx;k5y =h*dy;k5z =h*dz; clear dx dy dz x y z x=x0-(8./27)*k1x+ 2*k2x -(3544./2565)*k3x+(1859./4104)*k4x-(11./40)*k5x; y=y0-(8./27)*k1y+ 2*k2y -(3544./2565)*k3y+(1859./4104)*k4y-(11./40)*k5y; z=z0-(8./27)*k1z+ 2*k2z -(3544./2565)*k3z+(1859./4104)*k4z-(11./40)*k5z;dx = a*y-a*x-a*(c*x+(1./2)*(d-c)*(abs(x+1)-abs(x-1)));dy = x-y-z;dz = -b*y; k6x =h*dx;k6y =h*dy;k6z =h*dz;xk_1(i+1)= x0 + (25./216)*k1x + (1408./2565)*k3x + (2197./4101)*k4x- (1./5)*k5x;yk_1(i+1)= y0 + (25./216)*k1y + (1408./2565)*k3y + (2197./4101)*k4y- (1./5)*k5y;zk_1(i+1)= z0 + (25./216)*k1z + (1408./2565)*k3z + (2197./4101)*k4z- (1./5)*k5z;%para el paso
%pasos diferentes para cada caso
% si se calcula un paso para cada variable
x5k_1(i+1)=x0 +(16./135)*k1x+(6656./12.825)*k3x+(28.561./56.430)*k4x-(9./50)*k5x+(2./55)*k6x;y5k_1(i+1)=y0 +(16./135)*k1y+(6656./12.825)*k3y+(28.561./56.430)*k4y-(9./50)*k5y+(2./55)*k6y;z5k_1(i+1)=z0 +(16./135)*k1z+(6656./12.825)*k3z+(28.561./56.430)*k4z-(9./50)*k5z+(2./55)*k6z;clear ss1 = 0.84*(tol*h./abs(x5k_1 - xk_1)); s2 = 0.84*(tol*h./abs(y5k_1 - yk_1));s3 = 0.84*(tol*h./abs(z5k_1 - zk_1));if s1<s2 s4=s1; else s4=s2; endif s4 < s3 s=s4; else s=s3;end % x_k = [x_rk];
% y_k = [y_rk];
% z_k = [z_rk];
b = t(i); %el t(i) presenta el siguiente error Array indices must be positive integers or logical values.
A=[xk_1(i+1);yk_1(i+1);zk_1(i+1)]; clear x0 y0 z0 x0=xk_1(i+1); y0=yk_1(i+1); z0=zk_1(i+1); t(i+1) = b+s*h; clear s1 s2 s3 s4 time=t(i+1);end %A = [xk_1(i+1)' yk_1(i+1)' zk_1(i+1)'];
disp(xk_1(i)); disp(yk_1(i)); disp(zk_1(i)); display(A);
Best Answer