i`m developind my second program using java which is supposed to solve a system of ordinary differential equations(S'=-beta*S*I-alfa*I;I'=beta* S*I+alfa*I) using runge kutta method;my first program was supposde to solve a single eq and worked just great(after a initial nullpointer exception error ,which reading some things on the internet i managed to eliminate).now i get the same error and i figure it has something to do with dereferencing ,but no matter how hard i tried i haven`t solved the problem;
the code source looks like that(actually it`s now the final implementation of my algorithm,i`m just trying to test some things):
-------------------------------------------------------------------------------------------------------------------
[import java.io.*;
import java.util.Array List;
class SolutiiDeTe{
double timp;
double[] solutie;
public static double[] inmultireVector CuScalar(double a, double[] b){
double[] x=new double[b.length];
for(int i=0;i<b.length; i++)
x[i]=b[i]*a;
return x;
}
public static double[] AdunareVectori( double[] a, double[] b){
double[] x=new double[b.length];
for(int i=0;i<b.length; i++)
x[i]=b[i]+a[i];
return x;
}
public static double[] definireSIS(dou ble[] y,double xi,double alfa,double beta){
xi=(double)0;
double[] dy=new double[2];
dy[0]=-beta*y[0]*y[1]+alfa*y[1];
dy[1]=beta*y[0]*y[1]-alfa*y[1];
return dy;
}
//public double[] definireSIRS(do uble[] y,double alfa,double beta){
// double[] dy=new double[3];
// dy[0]=-beta*y[0]*y[1];
// dy[1]=beta*y[0]*y[1]-alfa*y[1];
// dy[2]=alfa*y[1];
// return dy;
//}
public static SolutiiDeTe[] RK_SIS(int an1,int an2,int N,double pas,double a,double b,int inf) {
double[] k1,k2,k3,k4,k;
int nr_pasi=(int)(( an2-an1)/pas);
SolutiiDeTe[] y=new SolutiiDeTe[nr_pasi+1];
for (int i=0;i<nr_pasi;i ++)
{y[i]=new SolutiiDeTe();
y[i].solutie=new double[2];
}
double[] dy=new double[nr_pasi+1];
y[0].timp=an1;
y[0].solutie[0]=(double)(N-inf);
y[0].solutie[1]=(double)inf;
for (int i=0;i<nr_pasi;i ++){
k1=new double[2];
k2=new double[2];
k3=new double[2];
k4=new double[2];
k=new double[2];
k1=SolutiiDeTe. inmultireVector CuScalar(pas,So lutiiDeTe.defin ireSIS(y[i].solutie,y[i].timp,a,b));
k=SolutiiDeTe.i nmultireVectorC uScalar(0.5,k1) ;
k=SolutiiDeTe.A dunareVectori(y[i].solutie,k);
k2=SolutiiDeTe. inmultireVector CuScalar(pas,So lutiiDeTe.defin ireSIS(k,y[i].timp+0.5*pas,a ,b));
k=SolutiiDeTe.i nmultireVectorC uScalar(0.5,k2) ;
k=SolutiiDeTe.A dunareVectori(y[i].solutie,k);
k3=SolutiiDeTe. inmultireVector CuScalar(pas,So lutiiDeTe.defin ireSIS(k,y[i].timp+0.5*pas,a ,b));
k=SolutiiDeTe.A dunareVectori(y[i].solutie,k3);
k4=SolutiiDeTe. inmultireVector CuScalar(pas,So lutiiDeTe.defin ireSIS(k,y[i].timp+pas,a,b)) ;
k=SolutiiDeTe.i nmultireVectorC uScalar(2,k2);
dy=SolutiiDeTe. AdunareVectori( k1,k);
k=SolutiiDeTe.i nmultireVectorC uScalar(2,k2);
dy=SolutiiDeTe. AdunareVectori( dy,k);
dy=SolutiiDeTe. AdunareVectori( dy,k4);
dy=SolutiiDeTe. inmultireVector CuScalar(1/6,dy);
y[i+1].solutie=Soluti iDeTe.AdunareVe ctori(dy,y[i].solutie);
y[i+1].timp=((double) (Math.round((y[0].timp+pas*(i+1) )*10)))/10;
}
return y;}
public static void main(String[] args) {
SolutiiDeTe[] x=new SolutiiDeTe[21];
for (int i=0;i<21;i++)
{x[i]=new SolutiiDeTe();
x[i].solutie=new double[2];
}
x=SolutiiDeTe.R K_SIS(1,3,50,0. 1,0.2,0.1,2);
for (int i=0;i<21;i++)
System.out.prin tln(x[i].timp+" "+x[i].solutie);
}
}
---------------------------------------------------------------------------------------------------------------
the exact error i get is
Exception in thread "main" java.lang.NullP ointerException
the code source looks like that(actually it`s now the final implementation of my algorithm,i`m just trying to test some things):
-------------------------------------------------------------------------------------------------------------------
[import java.io.*;
import java.util.Array List;
class SolutiiDeTe{
double timp;
double[] solutie;
public static double[] inmultireVector CuScalar(double a, double[] b){
double[] x=new double[b.length];
for(int i=0;i<b.length; i++)
x[i]=b[i]*a;
return x;
}
public static double[] AdunareVectori( double[] a, double[] b){
double[] x=new double[b.length];
for(int i=0;i<b.length; i++)
x[i]=b[i]+a[i];
return x;
}
public static double[] definireSIS(dou ble[] y,double xi,double alfa,double beta){
xi=(double)0;
double[] dy=new double[2];
dy[0]=-beta*y[0]*y[1]+alfa*y[1];
dy[1]=beta*y[0]*y[1]-alfa*y[1];
return dy;
}
//public double[] definireSIRS(do uble[] y,double alfa,double beta){
// double[] dy=new double[3];
// dy[0]=-beta*y[0]*y[1];
// dy[1]=beta*y[0]*y[1]-alfa*y[1];
// dy[2]=alfa*y[1];
// return dy;
//}
public static SolutiiDeTe[] RK_SIS(int an1,int an2,int N,double pas,double a,double b,int inf) {
double[] k1,k2,k3,k4,k;
int nr_pasi=(int)(( an2-an1)/pas);
SolutiiDeTe[] y=new SolutiiDeTe[nr_pasi+1];
for (int i=0;i<nr_pasi;i ++)
{y[i]=new SolutiiDeTe();
y[i].solutie=new double[2];
}
double[] dy=new double[nr_pasi+1];
y[0].timp=an1;
y[0].solutie[0]=(double)(N-inf);
y[0].solutie[1]=(double)inf;
for (int i=0;i<nr_pasi;i ++){
k1=new double[2];
k2=new double[2];
k3=new double[2];
k4=new double[2];
k=new double[2];
k1=SolutiiDeTe. inmultireVector CuScalar(pas,So lutiiDeTe.defin ireSIS(y[i].solutie,y[i].timp,a,b));
k=SolutiiDeTe.i nmultireVectorC uScalar(0.5,k1) ;
k=SolutiiDeTe.A dunareVectori(y[i].solutie,k);
k2=SolutiiDeTe. inmultireVector CuScalar(pas,So lutiiDeTe.defin ireSIS(k,y[i].timp+0.5*pas,a ,b));
k=SolutiiDeTe.i nmultireVectorC uScalar(0.5,k2) ;
k=SolutiiDeTe.A dunareVectori(y[i].solutie,k);
k3=SolutiiDeTe. inmultireVector CuScalar(pas,So lutiiDeTe.defin ireSIS(k,y[i].timp+0.5*pas,a ,b));
k=SolutiiDeTe.A dunareVectori(y[i].solutie,k3);
k4=SolutiiDeTe. inmultireVector CuScalar(pas,So lutiiDeTe.defin ireSIS(k,y[i].timp+pas,a,b)) ;
k=SolutiiDeTe.i nmultireVectorC uScalar(2,k2);
dy=SolutiiDeTe. AdunareVectori( k1,k);
k=SolutiiDeTe.i nmultireVectorC uScalar(2,k2);
dy=SolutiiDeTe. AdunareVectori( dy,k);
dy=SolutiiDeTe. AdunareVectori( dy,k4);
dy=SolutiiDeTe. inmultireVector CuScalar(1/6,dy);
y[i+1].solutie=Soluti iDeTe.AdunareVe ctori(dy,y[i].solutie);
y[i+1].timp=((double) (Math.round((y[0].timp+pas*(i+1) )*10)))/10;
}
return y;}
public static void main(String[] args) {
SolutiiDeTe[] x=new SolutiiDeTe[21];
for (int i=0;i<21;i++)
{x[i]=new SolutiiDeTe();
x[i].solutie=new double[2];
}
x=SolutiiDeTe.R K_SIS(1,3,50,0. 1,0.2,0.1,2);
for (int i=0;i<21;i++)
System.out.prin tln(x[i].timp+" "+x[i].solutie);
}
}
---------------------------------------------------------------------------------------------------------------
the exact error i get is
Exception in thread "main" java.lang.NullP ointerException