Eval.java

/*
 * $Id: Eval.java,v 1.14 2008/03/15 00:23:40 koga Exp $
 * 
 * Copyright (C) 2004 Koga Laboratory. All rights reserved.
 */
package org.mklab.tool.matrix;

import org.mklab.nfc.matrix.DoubleComplexMatrix;
import org.mklab.nfc.matrix.DoubleMatrix;
import org.mklab.nfc.scalar.DoubleComplexNumber;
import org.mklab.nfc.scalar.DoubleComplexPolynomial;
import org.mklab.nfc.scalar.DoubleNumber;
import org.mklab.nfc.scalar.DoublePolynomial;
import org.mklab.nfc.scalar.DoubleRationalPolynomial;


/**
 * 数式(多項式、有理多項式等)の評価を計算するクラスです。
 * 
 * <p> Evaluation of symbolic expression
 * 
 * @author koga
 * @version $Revision: 1.14 $
 */
public class Eval {

  /**
   * 多項式の評価を計算する
   * 
   * @param p 評価する多項式
   * @param w 変数に代入する値
   * @return 評価値 (evaluated result)
   */
  public static DoubleMatrix eval(DoublePolynomial p, DoubleMatrix w) {
    int rowSize = w.getRowSize();
    int columnSize = w.getColumnSize();

    DoubleNumber unit = p.evaluate(w.getElement(1, 1));

    DoubleMatrix pw = unit.createZeroGrid(rowSize, columnSize);
    for (int i = 1; i <= rowSize; i++) {
      for (int j = 1; j <= columnSize; j++) {
        pw.setElement(i, j, p.evaluate(w.getElement(i, j)));
      }
    }

    return pw;
  }

  /**
   * 多項式の評価を計算する
   * 
   * @param p 評価する多項式
   * @param w 変数に代入する値
   * @return 評価値 (evaluated result)
   */
  public static DoubleComplexMatrix eval(DoubleComplexPolynomial p, DoubleComplexMatrix w) {
    int rowSize = w.getRowSize();
    int columnSize = w.getColumnSize();

    DoubleComplexNumber unit = p.evaluate(w.getElement(1, 1));

    DoubleComplexMatrix pw = unit.createZeroGrid(rowSize, columnSize);
    for (int i = 1; i <= rowSize; i++) {
      for (int j = 1; j <= columnSize; j++) {
        pw.setElement(i, j, p.evaluate(w.getElement(i, j)));
      }
    }

    return pw;
  }

  /**
   * 有理多項式の評価を計算する
   * 
   * @param g 評価する有理多項式
   * @param w 変数に代入する値
   * @return 評価値 (evaluated result)
   */
  public static DoubleMatrix eval(DoubleRationalPolynomial g, DoubleMatrix w) {
    int rowSize = w.getRowSize();
    int columnSize = w.getColumnSize();

    DoubleNumber unit = g.evaluate(w.getElement(1, 1));

    DoubleMatrix pw = unit.createZeroGrid(rowSize, columnSize);
    for (int i = 1; i <= rowSize; i++) {
      for (int j = 1; j <= columnSize; j++) {
        pw.setElement(i, j, g.evaluate(w.getElement(i, j)));
      }
    }

    return pw;

    //    int m = w.getRowSize();
    //    int n = w.getColumnSize();
    //
    //    if (g.isReal() && w instanceof DoubleMatrix) {
    //      DoubleMatrix gw = new DoubleMatrix(m, n);
    //      for (int i = 1; i <= m; i++) {
    //        for (int j = 1; j <= n; j++) {
    //          ((DoubleMatrix)gw).setElement(i, j, g.evaluate(((DoubleMatrix)w).getDoubleElement(i, j)));
    //        }
    //      }
    //      
    //      return gw;
    //    } 
    //
    //    DoubleMatrix gw = new DoubleComplexMatrix(m, n);
    //    for (int i = 1; i <= m; i++) {
    //      for (int j = 1; j <= n; j++) {
    //        ((DoubleComplexMatrix)gw).setElement(i, j, g.evaluate(((DoubleComplexMatrix)w).getElement(i, j)));
    //      }
    //    }
    //
    //    return gw;
  }
}