mathutils.java

来自「是实现关系型贝叶斯网络一中机器学习算法」· Java 代码 · 共 109 行

JAVA
109
字号
package rmn;import java.lang.reflect.*;class MathUtils {  static public void dotProduct(double[] v1, double v2[])  {    assert v1.length == v2.length : v2.length;    for (int i = 0; i < v1.length; i++) {      v1[i] = v1[i] * v2[i];      assert !Double.isNaN(v1[i]) : v2[i];      assert !Double.isInfinite(v1[i]) : v2[i];    }  }  static public void dotQuotient(double[] v1, double v2[])  {    assert v1.length == v2.length : v2.length;    for (int i = 0; i < v1.length; i++) {      if (v2[i] == 0) {	System.out.println("Quotient by zero!");	System.exit(1);      }      assert !Double.isNaN(v1[i]) : v1[i];      assert !Double.isNaN(v2[i]) : v2[i];      v1[i] = v1[i] / v2[i];      assert !Double.isNaN(v1[i]) : v2[i];      assert !Double.isInfinite(v1[i]) : v2[i];    }  }  static public double[] clone(double[] v)  {    double[] w = new double[v.length];    System.arraycopy(v, 0, w, 0, v.length);    return w;  }  static public void normalize(double[] v)  {    double total = 0;    for (int i = 0; i < v.length; i++)      total += v[i];    if (Double.isNaN(total) || Double.isInfinite(total) || total == 0) {      for (int i = 0; i < v.length; i++)	System.out.println("v[" + i + "] = " + v[i]);    }    assert !Double.isNaN(total);    assert !Double.isInfinite(total);    assert total != 0;    for (int i = 0; i < v.length; i++) {      v[i] = v[i] / total;      assert !Double.isNaN(v[i]);      assert !Double.isInfinite(v[i]);    }  }  static public boolean approxeq(double[] v1, double[] v2, double tol)  {    assert v1.length == v2.length : v2.length;    for (int i = 0; i < v1.length; i++)      if (Math.abs(v1[i] - v2[i]) > tol)        return false;    return true;  }  static public Method getSumOrMax(boolean bMaximize)  {    Method method = null;    try {      Class theClass = Class.forName("rmn.MathUtils");      Class[] paramTypes = {Double.TYPE, Double.TYPE};      method = theClass.getMethod("sum", paramTypes);      if (bMaximize)        method = theClass.getMethod("max", paramTypes);    }    catch (Exception e) {      System.err.println(e);      System.exit(1);    }          return method;  }  static public double sum(double a, double b)  {    double res = a + b;    assert !Double.isNaN(res) : a;    assert !Double.isInfinite(res) : a;    return a + b;  }  static public double max(double a, double b)  {    if (a > b)      return a;    return b;  }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?