Gammaf.java
/*
* $Id: Gammaf.java,v 1.18 2008/07/16 15:40:00 koga Exp $
*
* Copyright (C) 2004 Koga Laboratory. All rights reserved.
*/
package org.mklab.tool.matrix;
import org.mklab.nfc.matrix.DoubleMatrix;
import org.mklab.nfc.scalar.DoubleNumber;
/**
* 完全・不完全ガンマ関数を表すクラスです。
*
* <p> Complete and incomplete Gamma functions
*
* @author koga
* @version $Revision: 1.18 $
* @see org.mklab.tool.matrix.Gammac
* @see org.mklab.tool.matrix.Gammai
*/
public class Gammaf {
/**
* <code>a</code>の全ての成分について、完全ガンマ関数の値を 返します。
*
* @param a データ
* @return 完全・不完全ガンマ関数の値 (value of function)
*/
public static DoubleMatrix gammaf(DoubleMatrix a) {
return Gammac.gammac(a);
}
/**
* <code>a</code>の成分について、不完全ガンマ関数の値(<code>X</code>まで積分した値) を返します。 <code>a</code>と<code>x</code>は同じ大きさの行列でなければならない。
*
* @param a_ データ
* @param x_ 積分区間
* @return 完全・不完全ガンマ関数の値 (value of function)
*/
public static DoubleMatrix gammaf(DoubleMatrix a_, DoubleMatrix x_) {
DoubleMatrix a = a_;
DoubleMatrix x = x_;
DoubleMatrix b = a.createZero(a.getRowSize(), a.getColumnSize());
int m = a.getRowSize();
int n = a.getColumnSize();
int mm = x.getRowSize();
int nn = x.getColumnSize();
if (m != mm || n != nn) {
if (m == 1 && n == 1) {
a = x.createOnes(x.getRowSize(), x.getColumnSize()).multiply(a.getElement(1, 1));
} else if (mm == 1 && nn == 1) {
x = a.createOnes(a.getRowSize(), a.getColumnSize()).multiply(x.getElement(1, 1));
} else {
throw new RuntimeException(Messages.getString("Gammaf.0")); //$NON-NLS-1$
}
}
DoubleNumber unit = a.getElement(1);
for (int i = 1; i <= a.getColumnSize() * a.getRowSize(); i++) {
DoubleMatrix gam = Gammai.gammai(unit.createGrid(new DoubleNumber[] {a.getElement(i)}), x.getElement(i));
b.setElement(i, gam.getElement(1, 1));
}
return b;
}
// /**
// * <code>a</code>の全ての成分について、完全ガンマ関数の値を 返します。
// *
// * @param a データ
// * @return 完全・不完全ガンマ関数の値 (value of function)
// */
// public static DoubleMatrix gammaf(DoubleMatrix a) {
// return Gammac.gammac(a);
// }
// /**
// * <code>a</code>の成分について、不完全ガンマ関数の値(<code>X</code>まで積分した値) を返します。 <code>a</code>と<code>x</code>は同じ大きさの行列でなければならない。
// *
// * @param a_ データ
// * @param x_ 積分区間
// * @return 完全・不完全ガンマ関数の値 (value of function)
// */
// public static DoubleMatrix gammaf(DoubleMatrix a_, DoubleMatrix x_) {
// DoubleMatrix a = a_;
// DoubleMatrix x = x_;
// DoubleMatrix b = new DoubleMatrix(a.getRowSize(), a.getColumnSize());
//
// int m = a.getRowSize();
// int n = a.getColumnSize();
// int mm = x.getRowSize();
// int nn = x.getColumnSize();
// if (m != mm || n != nn) {
// if (m == 1 && n == 1) {
// a = DoubleMatrix.ones(x).multiply(a.getDoubleElement(1, 1));
// } else if (mm == 1 && nn == 1) {
// x = DoubleMatrix.ones(a).multiply(x.getDoubleElement(1, 1));
// } else {
// throw new IllegalArgumentException(Messages.getString("Gammaf.1")); //$NON-NLS-1$
// }
// }
//
// for (int i = 1; i <= a.getColumnSize() * a.getRowSize(); i++) {
// DoubleMatrix gam = Gammai.gammai(new DoubleMatrix(new double[] {a.getDoubleElement(i)}), x.getDoubleElement(i));
// b.setElement(i, gam.getDoubleElement(1, 1));
// }
//
// return b;
// }
}