-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCubicspl.java
More file actions
85 lines (69 loc) · 2.97 KB
/
Cubicspl.java
File metadata and controls
85 lines (69 loc) · 2.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import java.util.Arrays;
public class Cubicspl extends Formula
{
private final Cubic[] splines;
private final double[] limits;
public Cubicspl( Double[] x, Double[] y )
{
super();
limits = new double[ x.length ];
for( int i = 0; i < x.length; i++ )
limits[i] = x[i];
//Arrays.sort( limits );
splines = new Cubic[ x.length - 1 ];
for( int i = 0; i < splines.length; i++ )
{
/*double values[] = backSolve( new double[][] {
{ 1, limits[i], Math.pow( limits[i], 2.0 ), Math.pow( limits[i], 3.0 ),
-1, -limits[i+1], -Math.pow( limits[i+1], 2.0 ), -Math.pow( limits[i+1], 3.0 ),
y[i].doubleValue() - y[i+1].doubleValue() },
{ 1, limits[i+1], Math.pow( limits[i+1], 2.0 ), Math.pow( limits[i+1], 3.0 ),
-1, -limits[i+2], -Math.pow( limits[i+2], 2.0 ), -Math.pow( limits[i+2], 3.0 ),
y[i+1].doubleValue() - y[i+2].doubleValue() },
{ 1, limits[i], Math.pow( limits[i], 2.0 ), Math.pow( limits[i], 3.0 ),
-1, -limits[i+1], -Math.pow( limits[i+1], 2.0 ), -Math.pow( limits[i+1], 3.0 ), 0 },
{ 1, limits[i], Math.pow( limits[i], 2.0 ), Math.pow( limits[i], 3.0 ),
-1, -limits[i+2], -Math.pow( limits[i+2], 2.0 ), -Math.pow( limits[i+2], 3.0 ),
y[i].doubleValue() - y[i+2].doubleValue() },
{ -3 / limits[i+1], -2, -limits[i+1], 0, 3 / limits[i+1], 2, limits[i+1], 0, 0 },
{ -3 / Math.pow( limits[i], 2.0 ), -3 / limits[i], -2, 0, 3 / Math.pow( limits[i+1], 2.0 ), 3 / limits[i+1], 2, 0,
3 * y[i+1].doubleValue() / Math.pow( limits[i+1], 2.0 ) - 3 * y[i].doubleValue() / Math.pow( limits[i], 2.0 ) },
{ -3 / Math.pow( limits[i], 2.0 ), -3 / limits[i], -2, 0, 3 / Math.pow( limits[i+2], 2.0 ), 3 / limits[i+2], 4, 0,
3 * y[i+2].doubleValue() / Math.pow( limits[i+2], 2.0 ) - 3 * y[i].doubleValue() / Math.pow( limits[i], 2.0 ) },
{ 1 / Math.pow( limits[i], 2.0 ), 1 / limits[i], 0, -2 * limits[i],
-1 / Math.pow( limits[i+2], 2.0 ), -1 / limits[i+2], 0, 2 * limits[i+2],
y[i].doubleValue() / Math.pow( limits[i], 2.0 ) - y[i+2].doubleValue() / Math.pow( limits[i+2], 2.0 ) } } );*/
/*System.out.println( "values: " );
for( int j = 0; j < values.length; j++ )
System.out.println( values[j] + " " );*/
Double cubic1[] = new Double[2];
Double cubic2[] = new Double[2];
System.arraycopy( x, i, cubic1, 0, 2 );
System.arraycopy( y, i, cubic2, 0, 2 );
splines[i] = new Cubic( cubic1, cubic2 );
//splines[i+1] = new Cubic( cubic2 );
}//end for
}//end method
public double getY( double x )
{
int i;
for( i = 1; i < splines.length; i++ )
{
//System.out.println( i + "\n" );
if( x > limits[i] ) break;
}
return splines[--i].getY( x );
}
public Cubic getSpline( int i )
{
return splines[i % splines.length];
}
public double[] getParams( int i )
{
return splines[i % splines.length].getParams();
}
public double[] getParams()
{
return getParams( 0 );
}
}