SinVerifier.java
/*
* Created on 2004/12/21
* Copyright (C) 2004 Koga Laboratory. All rights reserved.
*
*/
package org.mklab.cga.interval.function;
import org.mklab.cga.interval.matrix.IntervalNumericalMatrix;
import org.mklab.cga.interval.scalar.IntervalNumericalScalar;
import org.mklab.nfc.matrix.NumericalMatrix;
import org.mklab.nfc.scalar.NumericalScalar;
import org.mklab.nfc.util.RoundMode;
import org.mklab.nfc.util.RoundModeManager;
/**
* 未完成。
*
* @author hiroki
* @version $Revision: 1.9 $.2004/12/21
* @param <IS> 区間スカラーの型
* @param <IM> 区間行列の型
* @param <S> 成分の型
* @param <M> 行列の型
*/
public class SinVerifier<IS extends IntervalNumericalScalar<IS,IM,S,M>, IM extends IntervalNumericalMatrix<IS,IM,S,M>, S extends NumericalScalar<S,M>, M extends NumericalMatrix<S,M>> {
/**
* コンストラクタ
*
*/
public SinVerifier() {
//
}
/**
* @param t 時間
* @return ?
*/
public IS solve(IS t) {
RoundModeManager manager = RoundModeManager.getManager();
RoundMode oldRoundMode = manager.getRoundMode();
//S unit = t.getSupremum().createUnit();
IS[][] i_ck = t.createArray(5,7);
int m = 0;
// Interval i_t;
IS i_s = t;
IS i_a = t.create(1).multiply(Math.PI).divide(4);//2で割る
if ((i_s.getSupremum()).isGreaterThanOrEquals(Math.PI / 4)) {
System.out.println("2.0以上"); //$NON-NLS-1$
while ((i_s.getSupremum()).isGreaterThan(Math.PI / 4)) {
System.out.println("mokerin"); //$NON-NLS-1$
m++;
i_s = i_s.divide(i_a);
}
} else if ((i_s.getSupremum()).isLessThanOrEquals(1)) {
System.out.println("1.0以下"); //$NON-NLS-1$
while ((i_s.getSupremum()).isLessThanOrEquals(1)) {
m++;
i_s = i_s.multiply(i_a);
}
}
i_s.printInterval("i_s"); //$NON-NLS-1$
System.out.println("m = " + m); //$NON-NLS-1$
System.out.println(Math.PI / 4);
for (int j = 0; j < 5; j++) {
for (int k = 0; k < 7; k++) {
i_ck[j][k] = t.create(2).power(-j).multiply(t.create(1).add(t.create(k).divide(t.create(8))));
}
}
int j_index = 0;
int k_index = 0;
for (int j = 0; j < 5; j++) {
for (int k = 0; k < 7; k++) {
if ((i_s.getMiddle().subtract(i_ck[j][k].getMiddle())).abs().isLessThanOrEquals(1 / 32.0)) {
System.out.println("OK"); //$NON-NLS-1$
j_index = j;
k_index = k;
}
}
}
System.out.println("j =" + j_index); //$NON-NLS-1$
System.out.println("k =" + k_index); //$NON-NLS-1$
IS i_r = t.subtract(i_ck[j_index][k_index]);
IS i_p = i_r.subtract(i_r.multiply(i_r).multiply(i_r).multiply(0.166666666656924)
.add(i_r.multiply(i_r).multiply(i_r).multiply(i_r).multiply(i_r).multiply(0.04166477827)));
IS i_q = t.create(1).subtract(i_r.multiply(i_r).multiply(0.49999999942942)).add(i_r.multiply(i_r).multiply(i_r).multiply(i_r).add(0.04166477827));
manager.setRoundMode(RoundMode.ROUND_DOWN);
S cos_ck_l = ((i_ck[j_index][k_index].getMiddle())).cos();
S sin_ck_l = ((i_ck[j_index][k_index].getMiddle())).sin();
manager.setRoundMode(RoundMode.ROUND_UP);
S cos_ck_u = ((i_ck[j_index][k_index].getMiddle())).cos();
S sin_ck_u = ((i_ck[j_index][k_index].getMiddle())).sin();
System.out.println("cos(ckj) = " + (cos_ck_l.subtract(cos_ck_u))); //$NON-NLS-1$
System.out.println("sin(ckj) = " + (sin_ck_l.subtract(sin_ck_u))); //$NON-NLS-1$
i_p.printInterval("i_p"); //$NON-NLS-1$
i_q.printInterval("i_q"); //$NON-NLS-1$
manager.setRoundMode(oldRoundMode);
return null;
}
/**
* メインメソッド
*
* @param args コマンドライン引数
*/
public static void main(String[] args) {
// SinVerifier sv = new SinVerifier();
// Interval ans = sv.solve(new RealInterval(0.8));
System.out.println("sin(t) = " + Math.sin(-1)); //$NON-NLS-1$
}
}