2011-01-05 3 views
1

1 일 동안 일정 값을 나타내는 차트가 Excel에 있습니다. 그래서 참조 기능을 추가하고 I는 다음과 같이 얻을 :Java에서 Excel의 다항식 함수에 대한 값을 얻습니다.

y = 1E-13x6 - 2E-10x5 + 8E-08x4 - 1E-05x3 + 0,0004x2 + 0,0275x + 8,414 

내 데이터 세트의 mesure입니다 : 내가 알 필요가

09:36:21 => 5,27 

firts 일이에 타임 스탬프를 변환하는 방법입니다 값. 일부 셀 값을 변환 한 후에 Excel에서 0.00000에서 0.99999 사이의 타임 스탬프를 제공한다는 것을 알게되었습니다. 예를 들어 09:36:21은 0.400243055555556입니다. 그 때 나는 약간의 자바 테스트 스크립트 코딩했습니다

double x = 0.400243055555556; 
double x6 = (1*Math.pow(10, -13))*Math.pow(x, 6); 
double x5 = (2*Math.pow(10, -10))*Math.pow(x, 5); 
double x4 = (8*Math.pow(10, -8))*Math.pow(x, 4); 
double x3 = (1*Math.pow(10, -5))*Math.pow(x, 3); 
double x2 = (4*Math.pow(10, -4))*Math.pow(x, 2); 
double y = x6 - x5 + x4 - x3 + x2 + 0.0275*x + 8.414; 

을하지만,이 스크립트를 실행 한 후 나는 y는 8.425070122712738를 = 얻을. 그래서 이것은 분명히 작동하지 않습니다. 차트의 모든 값은 5에서 12까지입니다.

저는 분명히 잘못된 것을하고 있습니다. 그러나 나는 무엇을 모르겠습니다. 어쩌면 함수를 잘못 코딩했거나, x가 올바른 값이 아니지만 잘못된 것이 있습니다. 누구든지 도와 줄 수 있습니까?

업데이트 : 내 코드가 좋지 않아서, 두피모가 더 잘했다고 제안했습니다. 그러나 문제는 엑셀이 내 잘못한 경향을 보이고 있다는 것이었다. 저는 분산 형 그래프를 사용하여 좋은 것을 얻을 수있었습니다.

+1

초기 가정에는 8.414를 추가 할 때 0과 1 사이의 숫자가 될 수 있으며 다른 모든 변수는 -1 Jason

+0

x 값은 0에서 1 사이입니다. (내가 우연히 타임 스탬프를 어떻게 변환하는지 보았습니다.) 그리고 y 값은 5에서 12까지입니다. – 1000i1

답변

1

이 방법으로 코딩하는 것을 권장하지 않습니다. 반올림 문제가 될 수 있습니다.

나는 Horner scheme를 추천 할 것입니다 :

나는 이런 식으로 코딩 당신이했던 것과 같은 답변을 받았습니다 :

public class Horner 
{ 
    public static final NumberFormat DEFAULT_FORMAT = new DecimalFormat("0.000"); 

    public static void main(String[] args) 
    { 
     double [] a = { 8.414, 0.0275, 0.0004, -1.0e-5, 8.0e-8, -2.0e-10, 1.0e-13 }; 
     for (double x = 0.0; x < 1.0; x += 0.05) 
     { 
     double y = a[0] + x*(a[1] + x*(a[2] + x*(a[3] + x*(a[4] + x*(a[5]))))); 
     System.out.println("x = " + DEFAULT_FORMAT.format(x) + " y = " + DEFAULT_FORMAT.format(y)); 
     } 
    } 
} 

가 여기에 내가 얻을 결과입니다를. 고차원 적 용어는 그다지 효과적이지 않습니다. 계수가 작아서 분수를 힘으로 올리면 효과가 훨씬 줄어 듭니다.

x = 0.000 y = 8.414 
x = 0.050 y = 8.415 
x = 0.100 y = 8.417 
x = 0.150 y = 8.418 
x = 0.200 y = 8.420 
x = 0.250 y = 8.421 
x = 0.300 y = 8.422 
x = 0.350 y = 8.424 
x = 0.400 y = 8.425 
x = 0.450 y = 8.426 
x = 0.500 y = 8.428 
x = 0.550 y = 8.429 
x = 0.600 y = 8.431 
x = 0.650 y = 8.432 
x = 0.700 y = 8.433 
x = 0.750 y = 8.435 
x = 0.800 y = 8.436 
x = 0.850 y = 8.438 
x = 0.900 y = 8.439 
x = 0.950 y = 8.440 

아직도 당신이 원하지 않는 무엇을,하지만 난 코딩이 훨씬 간단하다고 생각합니다.

+0

Excelent, 나는이 제안을 좋아합니다. 내 코드를 업데이트했습니다. 문제는 결과가 변하지 않는다는 것입니다. 어쩌면 내가 엑셀 ​​함수를 오해했습니다. 대신 1E-13x6이 1E-13 * x^6이 될 수 있습니다. – 1000i1

+0

잘 모름. 이 주석과 그 이상한 타임 스탬프에 대한 여러분의 생각은 내가하고있는 일을 더 잘 이해하기 위해 Excel을 더 깊이 파헤쳐야한다고 제안합니다. 그 추위가있을 때만 Java로 변환 할 수 있습니다. – duffymo

+0

x = 0으로 시도해보고 8.414를 선택했는지 확인하십시오. 그것이 옳지 않다면 다른 것은 없을 것입니다. –

관련 문제