바이 큐빅 보간법을위한 꽤 표준적인 프로그램을 작성하고 있습니다. 어떤 이유로 Xincrement와 Yincrement를 너무 작게 만들면 for 루프가 너무 빨리 종료되기 시작합니다. 왜 이런 일이 일어나는지 확신 할 수 없습니다. 내 Yincrement 및 Xincrement를 주에 설정하고 .25 이상인 경우 제대로 작동하지만 .2 이하로 줄이면 일찍 한 루프가 중지됩니다. 또한 마지막 3 for-loops는 엉망진창입니다.자바에서의 바이 큐빅 보간
여기 내 코드입니다 :
public static double ApplyKernel(double [] Row, double Location, int R) {
double s1; double s2; double s3; double s4;
double Kernel;
double s = Location%1;
s1 = -.5*Math.pow(s+1,3)+2.5*Math.pow(s+1,2)-4*(s+1)+2;
s2 = 1.5*Math.pow(s,3)-2.5*Math.pow(s,2)+1;
s3 = 1.5*Math.pow(1-s,3)-2.5*Math.pow(1-s,2)+1;
s4 = -.5*Math.pow(2-s,3)+2.5*Math.pow(2-s,2)-4*(2-s)+2;
if(s==0) {
Kernel = Row[(int)(Location)];
} else {
Kernel = s1*Row[(int)(Location-1)]+s2*Row[(int)Location]+s3*Row[(int) (Location+1)]+s4*Row[(int)(Location+2)];
}
return Kernel;
}
public static double[][] zValues(double [][] ExtendP, int R, double X, double Y, double Xincrement, double Yincrement) throws FileNotFoundException
{
String phFileName = "Data37.txt";
PrintStream phOutput = new PrintStream(phFileName);
double[][] zValues = new double[(int)(R/Xincrement)+1][(int)(R/Yincrement)+1];
double[] row = new double[R+3];
for (double i = 1; i<=(R+1); i += Xincrement) {
phOutput.println(";");
for (int j = 0; j<R+3; j++) {
row[j] = ApplyKernel(ExtendP[j], i, R);
}
for(double k = 1; k<=(R+1); k += Yincrement) {
zValues[(int)((i-1)/Xincrement)][(int)((k-1)/Yincrement)] = ApplyKernel(row, k, R);
phOutput.printf("(%.2f,%.2f) = %.3f ", k, i, ApplyKernel(row, k, R));
}
}
return zValues;
}
너희들이
스택 오버플로에 오신 것을 환영합니다! 코드에서 오류를 발견하도록 사람들에게 요청하는 것은 특히 생산적이지 않습니다. 디버거를 사용하거나 인쇄 문을 추가하여 프로그램의 진행 상황을 추적하고 발생할 것으로 예상되는 것과 비교하여 문제를 격리해야합니다. 이 둘이 갈라지면 문제를 발견했습니다. (그리고 필요하다면 [최소한의 테스트 케이스] (http://sscce.org)를 만들어야한다.) –