public class rk3 extends Object {
// rk3.java
// applet integrator, using RK4
// copyright 1998 Timothy D. Sauer
// tsauer@gmu.edu

public static boolean dydt(float yn[],float y[],int n,float c1,float tau )
{
    // for the FHN system
    float sigma = (float)10.;
    float r = (float)28.;
    float beta = (float)(8./3.);
    float a = (float)0.1;
    float b = (float)0.15;
    float c = (float)0.5;
    float d = (float)0.5;
    //    float c1 = (float)0.0005;
    float c2 = (float)0.04;
    float c3 = (float)0.5;
    float eps = (float)0.005;
    if( n != 6) return 1==0;

    yn[1] = tau*(sigma*(-y[1]+y[2]));
    yn[2] = tau*(r*y[1]- y[2] -y[1]*y[3]+c1*c1*y[5]);
    yn[3] = tau*(-beta*y[3] + y[1]*y[2]);
    yn[4] = -a*y[4] - c*y[6] + c1*y[1] - c2;
    yn[5] = (-y[5]*(y[5]-c3)*(y[5]-1) + y[4] - d*y[6])/eps;
    yn[6] = y[5]*y[5] - y[6] - b;
return 1==1;  //
}

public static boolean rk4( float yn[], float y[],
        float t,float h, float c1,float tau,int n)
{
	int i;
	float x,xm,two,six;
	float y1[] = new float[7];
	float y2[] = new float[7];
	float y3[] = new float[7];
	float y4[] = new float[7];
	float z[] = new float[7];

	two=(float)2.; six = (float)6.;
	if( !dydt( y1,y,n,c1,tau) ) return 0 ==1;
	for( i=1; i<= n; i++)y1[i] = h*y1[i];
	for( i=1; i<= n; i++)z[i] = y[i]+y1[i]/(float)2.0;
	if( !dydt( y2,z,n,c1,tau) ) return 0 ==1;
	for( i=1; i<= n; i++)y2[i] = h*y2[i];
	for( i=1; i<= n; i++)z[i] = y[i]+y2[i]/(float)2.0;
	if( !dydt( y3,z,n,c1,tau) ) return 0 ==1;
	for( i=1; i<= n; i++)y3[i] = h*y3[i];
	for( i=1; i<= n; i++)z[i] = y[i]+y3[i];
	if( !dydt( y4,z,n,c1,tau) ) return 0 ==1;
	for( i=1; i<= n; i++)y4[i] = h*y4[i];
	for( i=1; i<= n; i++)yn[i] = y[i]+(y1[i]+two*y2[i]+two*y3[i]+y4[i])/six;
	yn[0] = h+y[0];

	return 1==1;
}


}// end of rk3

