亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? eigenvaluedecomposition.java

?? Java 編寫的多種數(shù)據(jù)挖掘算法 包括聚類、分類、預(yù)處理等
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
/*
 * This software is a cooperative product of The MathWorks and the National
 * Institute of Standards and Technology (NIST) which has been released to the
 * public domain. Neither The MathWorks nor NIST assumes any responsibility
 * whatsoever for its use by other parties, and makes no guarantees, expressed
 * or implied, about its quality, reliability, or any other characteristic.
 */

/*
 * EigenvalueDecomposition.java
 * Copyright (C) 1999 The Mathworks and NIST
 *
 */

package weka.core.matrix;

import java.io.Serializable;

/** 
 * Eigenvalues and eigenvectors of a real matrix. 
 * <P>
 * If A is symmetric, then A = V*D*V' where the eigenvalue matrix D is diagonal
 * and the eigenvector matrix V is orthogonal.  I.e. A =
 * V.times(D.times(V.transpose())) and V.times(V.transpose()) equals the
 * identity matrix.
 * <P>
 * If A is not symmetric, then the eigenvalue matrix D is block diagonal with
 * the real eigenvalues in 1-by-1 blocks and any complex eigenvalues, lambda +
 * i*mu, in 2-by-2 blocks, [lambda, mu; -mu, lambda].  The columns of V
 * represent the eigenvectors in the sense that A*V = V*D, i.e. A.times(V)
 * equals V.times(D).  The matrix V may be badly conditioned, or even singular,
 * so the validity of the equation A = V*D*inverse(V) depends upon V.cond().
 * <p/>
 * Adapted from the <a href="http://math.nist.gov/javanumerics/jama/" target="_blank">JAMA</a> package.
 *
 * @author The Mathworks and NIST 
 * @author Fracpete (fracpete at waikato dot ac dot nz)
 * @version $Revision: 1.1 $
 */

public class EigenvalueDecomposition 
  implements Serializable {

  /** 
   * Row and column dimension (square matrix).
   * @serial matrix dimension.
   */
  private int n;

  /** 
   * Symmetry flag.
   * @serial internal symmetry flag.
   */
  private boolean issymmetric;

  /** 
   * Arrays for internal storage of eigenvalues.
   * @serial internal storage of eigenvalues.
   */
  private double[] d, e;

  /** 
   * Array for internal storage of eigenvectors.
   * @serial internal storage of eigenvectors.
   */
  private double[][] V;

  /** 
   * Array for internal storage of nonsymmetric Hessenberg form.
   * @serial internal storage of nonsymmetric Hessenberg form.
   */
  private double[][] H;

  /** 
   * Working storage for nonsymmetric algorithm.
   * @serial working storage for nonsymmetric algorithm.
   */
  private double[] ort;

  /**
   * helper variables for the comples scalar division
   * @see #cdiv(double,double,double,double)
   */
  private transient double cdivr, cdivi;

  /** 
   * Symmetric Householder reduction to tridiagonal form.
   * <p/>
   * This is derived from the Algol procedures tred2 by Bowdler, Martin,
   * Reinsch, and Wilkinson, Handbook for Auto. Comp., Vol.ii-Linear Algebra,
   * and the corresponding Fortran subroutine in EISPACK.
   */
  private void tred2() {

    for (int j = 0; j < n; j++) {
      d[j] = V[n-1][j];
    }

    // Householder reduction to tridiagonal form.

    for (int i = n-1; i > 0; i--) {

      // Scale to avoid under/overflow.

      double scale = 0.0;
      double h = 0.0;
      for (int k = 0; k < i; k++) {
        scale = scale + Math.abs(d[k]);
      }
      if (scale == 0.0) {
        e[i] = d[i-1];
        for (int j = 0; j < i; j++) {
          d[j] = V[i-1][j];
          V[i][j] = 0.0;
          V[j][i] = 0.0;
        }
      } else {

        // Generate Householder vector.

        for (int k = 0; k < i; k++) {
          d[k] /= scale;
          h += d[k] * d[k];
        }
        double f = d[i-1];
        double g = Math.sqrt(h);
        if (f > 0) {
          g = -g;
        }
        e[i] = scale * g;
        h = h - f * g;
        d[i-1] = f - g;
        for (int j = 0; j < i; j++) {
          e[j] = 0.0;
        }

        // Apply similarity transformation to remaining columns.

        for (int j = 0; j < i; j++) {
          f = d[j];
          V[j][i] = f;
          g = e[j] + V[j][j] * f;
          for (int k = j+1; k <= i-1; k++) {
            g += V[k][j] * d[k];
            e[k] += V[k][j] * f;
          }
          e[j] = g;
        }
        f = 0.0;
        for (int j = 0; j < i; j++) {
          e[j] /= h;
          f += e[j] * d[j];
        }
        double hh = f / (h + h);
        for (int j = 0; j < i; j++) {
          e[j] -= hh * d[j];
        }
        for (int j = 0; j < i; j++) {
          f = d[j];
          g = e[j];
          for (int k = j; k <= i-1; k++) {
            V[k][j] -= (f * e[k] + g * d[k]);
          }
          d[j] = V[i-1][j];
          V[i][j] = 0.0;
        }
      }
      d[i] = h;
    }

    // Accumulate transformations.

    for (int i = 0; i < n-1; i++) {
      V[n-1][i] = V[i][i];
      V[i][i] = 1.0;
      double h = d[i+1];
      if (h != 0.0) {
        for (int k = 0; k <= i; k++) {
          d[k] = V[k][i+1] / h;
        }
        for (int j = 0; j <= i; j++) {
          double g = 0.0;
          for (int k = 0; k <= i; k++) {
            g += V[k][i+1] * V[k][j];
          }
          for (int k = 0; k <= i; k++) {
            V[k][j] -= g * d[k];
          }
        }
      }
      for (int k = 0; k <= i; k++) {
        V[k][i+1] = 0.0;
      }
    }
    for (int j = 0; j < n; j++) {
      d[j] = V[n-1][j];
      V[n-1][j] = 0.0;
    }
    V[n-1][n-1] = 1.0;
    e[0] = 0.0;
  } 

  /** 
   * Symmetric tridiagonal QL algorithm.
   * <p/>
   * This is derived from the Algol procedures tql2, by Bowdler, Martin,
   * Reinsch, and Wilkinson, Handbook for Auto. Comp., Vol.ii-Linear Algebra,
   * and the corresponding Fortran subroutine in EISPACK.
   */
  private void tql2() {

    for (int i = 1; i < n; i++) {
      e[i-1] = e[i];
    }
    e[n-1] = 0.0;

    double f = 0.0;
    double tst1 = 0.0;
    double eps = Math.pow(2.0,-52.0);
    for (int l = 0; l < n; l++) {

      // Find small subdiagonal element

      tst1 = Math.max(tst1,Math.abs(d[l]) + Math.abs(e[l]));
      int m = l;
      while (m < n) {
        if (Math.abs(e[m]) <= eps*tst1) {
          break;
        }
        m++;
      }

      // If m == l, d[l] is an eigenvalue,
      // otherwise, iterate.

      if (m > l) {
        int iter = 0;
        do {
          iter = iter + 1;  // (Could check iteration count here.)

          // Compute implicit shift

          double g = d[l];
          double p = (d[l+1] - g) / (2.0 * e[l]);
          double r = Maths.hypot(p,1.0);
          if (p < 0) {
            r = -r;
          }
          d[l] = e[l] / (p + r);
          d[l+1] = e[l] * (p + r);
          double dl1 = d[l+1];
          double h = g - d[l];
          for (int i = l+2; i < n; i++) {
            d[i] -= h;
          }
          f = f + h;

          // Implicit QL transformation.

          p = d[m];
          double c = 1.0;
          double c2 = c;
          double c3 = c;
          double el1 = e[l+1];
          double s = 0.0;
          double s2 = 0.0;
          for (int i = m-1; i >= l; i--) {
            c3 = c2;
            c2 = c;
            s2 = s;
            g = c * e[i];
            h = c * p;
            r = Maths.hypot(p,e[i]);
            e[i+1] = s * r;
            s = e[i] / r;
            c = p / r;
            p = c * d[i] - s * g;
            d[i+1] = h + s * (c * g + s * d[i]);

            // Accumulate transformation.

            for (int k = 0; k < n; k++) {
              h = V[k][i+1];
              V[k][i+1] = s * V[k][i] + c * h;
              V[k][i] = c * V[k][i] - s * h;
            }
          }
          p = -s * s2 * c3 * el1 * e[l] / dl1;
          e[l] = s * p;
          d[l] = c * p;

          // Check for convergence.

        } while (Math.abs(e[l]) > eps*tst1);
      }
      d[l] = d[l] + f;
      e[l] = 0.0;
    }

    // Sort eigenvalues and corresponding vectors.

    for (int i = 0; i < n-1; i++) {
      int k = i;
      double p = d[i];
      for (int j = i+1; j < n; j++) {
        if (d[j] < p) {
          k = j;
          p = d[j];
        }
      }
      if (k != i) {
        d[k] = d[i];
        d[i] = p;
        for (int j = 0; j < n; j++) {
          p = V[j][i];
          V[j][i] = V[j][k];
          V[j][k] = p;
        }
      }
    }
  }

  /**
   * Nonsymmetric reduction to Hessenberg form.
   * <p/>
   * This is derived from the Algol procedures orthes and ortran, by Martin
   * and Wilkinson, Handbook for Auto. Comp., Vol.ii-Linear Algebra, and the
   * corresponding Fortran subroutines in EISPACK.
   */
  private void orthes() {

    int low = 0;
    int high = n-1;

    for (int m = low+1; m <= high-1; m++) {

      // Scale column.

      double scale = 0.0;
      for (int i = m; i <= high; i++) {
        scale = scale + Math.abs(H[i][m-1]);
      }
      if (scale != 0.0) {

        // Compute Householder transformation.

        double h = 0.0;
        for (int i = high; i >= m; i--) {
          ort[i] = H[i][m-1]/scale;
          h += ort[i] * ort[i];
        }
        double g = Math.sqrt(h);
        if (ort[m] > 0) {
          g = -g;
        }
        h = h - ort[m] * g;
        ort[m] = ort[m] - g;

        // Apply Householder similarity transformation
        // H = (I-u*u'/h)*H*(I-u*u')/h)

        for (int j = m; j < n; j++) {
          double f = 0.0;
          for (int i = high; i >= m; i--) {
            f += ort[i]*H[i][j];
          }
          f = f/h;
          for (int i = m; i <= high; i++) {
            H[i][j] -= f*ort[i];
          }
        }

        for (int i = 0; i <= high; i++) {
          double f = 0.0;
          for (int j = high; j >= m; j--) {
            f += ort[j]*H[i][j];
          }
          f = f/h;
          for (int j = m; j <= high; j++) {
            H[i][j] -= f*ort[j];
          }
        }
        ort[m] = scale*ort[m];
        H[m][m-1] = scale*g;
      }
    }

    // Accumulate transformations (Algol's ortran).

    for (int i = 0; i < n; i++) {
      for (int j = 0; j < n; j++) {
        V[i][j] = (i == j ? 1.0 : 0.0);
      }
    }

    for (int m = high-1; m >= low+1; m--) {
      if (H[m][m-1] != 0.0) {
        for (int i = m+1; i <= high; i++) {
          ort[i] = H[i][m-1];
        }
        for (int j = m; j <= high; j++) {
          double g = 0.0;
          for (int i = m; i <= high; i++) {
            g += ort[i] * V[i][j];
          }
          // Double division avoids possible underflow
          g = (g / ort[m]) / H[m][m-1];
          for (int i = m; i <= high; i++) {
            V[i][j] += g * ort[i];
          }
        }
      }
    }
  }


  /** 
   * Complex scalar division.
   */
  private void cdiv(double xr, double xi, double yr, double yi) {
    double r,d;
    if (Math.abs(yr) > Math.abs(yi)) {
      r = yi/yr;
      d = yr + r*yi;
      cdivr = (xr + r*xi)/d;
      cdivi = (xi - r*xr)/d;
    } else {
      r = yr/yi;
      d = yi + r*yr;
      cdivr = (r*xr + xi)/d;
      cdivi = (r*xi - xr)/d;
    }
  }


  /**
   * Nonsymmetric reduction from Hessenberg to real Schur form.
   * <p/>
   * This is derived from the Algol procedure hqr2, by Martin and Wilkinson,
   * Handbook for Auto. Comp., Vol.ii-Linear Algebra, and the corresponding
   * Fortran subroutine in EISPACK.
   */
  private void hqr2() {

    // Initialize

    int nn = this.n;
    int n = nn-1;
    int low = 0;
    int high = nn-1;
    double eps = Math.pow(2.0,-52.0);
    double exshift = 0.0;
    double p=0,q=0,r=0,s=0,z=0,t,w,x,y;

    // Store roots isolated by balanc and compute matrix norm

    double norm = 0.0;
    for (int i = 0; i < nn; i++) {
      if (i < low | i > high) {
        d[i] = H[i][i];
        e[i] = 0.0;
      }
      for (int j = Math.max(i-1,0); j < nn; j++) {
        norm = norm + Math.abs(H[i][j]);
      }
    }

    // Outer loop over eigenvalue index

    int iter = 0;
    while (n >= low) {

      // Look for single small sub-diagonal element

      int l = n;
      while (l > low) {
        s = Math.abs(H[l-1][l-1]) + Math.abs(H[l][l]);
        if (s == 0.0) {
          s = norm;
        }
        if (Math.abs(H[l][l-1]) < eps * s) {
          break;
        }
        l--;
      }

      // Check for convergence
      // One root found

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91传媒视频在线播放| 91国模大尺度私拍在线视频| 欧美乱妇20p| 久久精品亚洲国产奇米99| 亚洲欧洲中文日韩久久av乱码| 午夜电影久久久| 波多野结衣91| 精品美女一区二区| 一级女性全黄久久生活片免费| 精品一区二区在线看| 色八戒一区二区三区| 亚洲亚洲精品在线观看| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 亚洲欧洲国产日韩| 蜜桃视频一区二区三区在线观看| 国产成人免费视频网站 | 日韩精品一级二级 | 国产精一区二区三区| 欧美肥大bbwbbw高潮| 狠狠色丁香久久婷婷综| 欧美一区二区三区白人| 亚洲一区在线观看免费| 9l国产精品久久久久麻豆| 一个色妞综合视频在线观看| 日韩三级视频在线观看| 七七婷婷婷婷精品国产| 欧美日韩国产成人在线免费| 亚洲精品国产视频| 久久综合色天天久久综合图片| 一区二区三区四区不卡视频| 51午夜精品国产| 热久久一区二区| 国产精品免费视频网站| 国产高清视频一区| 亚洲一二三四久久| 久久精品亚洲乱码伦伦中文| 欧美天天综合网| 亚洲成在线观看| 91精品国产欧美日韩| fc2成人免费人成在线观看播放| 天使萌一区二区三区免费观看| 亚洲国产精品高清| 99久久伊人网影院| 国产精品女主播av| 欧美精品三级日韩久久| www.性欧美| 精品在线免费观看| 日韩高清一级片| 日韩美一区二区三区| 国产一区在线精品| 国产精品护士白丝一区av| 色猫猫国产区一区二在线视频| 韩国视频一区二区| 亚洲成人你懂的| 亚洲色图一区二区| 欧美日韩一二三区| 精品一区二区三区的国产在线播放| 1区2区3区精品视频| 久久九九久久九九| 精品成人佐山爱一区二区| 成人午夜av影视| 亚洲一区二区三区视频在线| 日本少妇一区二区| 亚洲国产aⅴ天堂久久| 中文字幕一区av| 中文av一区二区| 久久精品视频在线看| 精品国产一区二区三区四区四 | 日韩欧美一区在线| 在线播放国产精品二区一二区四区 | 欧美日韩一区 二区 三区 久久精品| 国产99久久久久久免费看农村| 国产精品国产自产拍高清av王其 | 欧美精品一区二区三区一线天视频| 欧美三级日韩三级国产三级| 在线看国产一区| 另类欧美日韩国产在线| 亚洲少妇最新在线视频| 亚洲视频你懂的| 成人欧美一区二区三区小说| 国产精品欧美久久久久无广告| 久久九九久精品国产免费直播| 久久久不卡影院| 欧美日韩久久一区| 欧美男同性恋视频网站| 91精品免费在线| 精品日韩av一区二区| 精品国产免费人成电影在线观看四季| 日韩精品在线一区二区| 精品久久国产字幕高潮| 久久一区二区三区国产精品| 2020国产精品自拍| 亚洲国产精品黑人久久久| 亚洲欧美一区二区三区久本道91 | 亚洲一级片在线观看| 五月婷婷综合激情| 开心九九激情九九欧美日韩精美视频电影| 三级成人在线视频| 国模一区二区三区白浆| 成人激情文学综合网| 韩国v欧美v亚洲v日本v| 国产a区久久久| 在线视频国产一区| 欧美一卡二卡三卡四卡| 久久久久久电影| 亚洲色欲色欲www| 日本网站在线观看一区二区三区 | 日韩在线a电影| 九色porny丨国产精品| 9i在线看片成人免费| 欧美日韩激情在线| 26uuu国产电影一区二区| 日韩美女久久久| 三级影片在线观看欧美日韩一区二区| 国产伦精一区二区三区| 色美美综合视频| 成人aa视频在线观看| 在线观看欧美日本| ww亚洲ww在线观看国产| 综合网在线视频| 激情小说欧美图片| 色婷婷av久久久久久久| 久久久一区二区三区捆绑**| 亚洲女性喷水在线观看一区| 久久精品久久综合| 91麻豆swag| 欧美视频一二三区| 国产日韩精品久久久| 久久久久久久久久久久电影 | 一卡二卡欧美日韩| 国产成人自拍网| 欧美日韩精品专区| 国产精品乱人伦中文| 久久精品国产网站| 欧美亚洲国产一区在线观看网站| 久久精品亚洲国产奇米99| 婷婷久久综合九色国产成人| 91在线精品一区二区三区| 久久先锋影音av| 日本欧美一区二区| 欧美性生交片4| 《视频一区视频二区| 国产精品99久久久久久宅男| 成人免费一区二区三区视频 | 极品瑜伽女神91| 欧美日韩一区不卡| 自拍av一区二区三区| 国产a级毛片一区| 久久综合九色综合欧美98| 香蕉影视欧美成人| 91视频精品在这里| 国产精品不卡视频| 国产成人啪午夜精品网站男同| 日韩一区二区三区电影在线观看| 亚洲高清三级视频| 在线视频一区二区三区| 成人免费视频在线观看| 成人在线综合网| 国产三级精品视频| 国产精品一区二区无线| 久久久久久久久久久久久久久99| 麻豆视频一区二区| 日韩精品自拍偷拍| 精品亚洲国内自在自线福利| 欧美成人性福生活免费看| 日本aⅴ精品一区二区三区 | 日韩免费看的电影| 麻豆精品新av中文字幕| 日韩欧美123| 精品影视av免费| 国产亚洲精品7777| 丰满白嫩尤物一区二区| 久久精品亚洲精品国产欧美 | 91在线免费看| 亚洲美女免费视频| 欧美无人高清视频在线观看| 一区二区三区欧美久久| 欧美亚洲愉拍一区二区| 亚洲高清免费视频| 91精品国产综合久久久久久久 | 欧美一区二区三区爱爱| 免费成人在线观看| 久久这里只有精品视频网| 国产成人免费视频一区| 国产精品国产自产拍高清av| 一本色道久久综合亚洲91| 亚洲国产综合色| 日韩欧美一区二区免费| 国产一区二区不卡| 中文字幕制服丝袜一区二区三区 | 欧美久久一区二区| 老汉av免费一区二区三区| 国产蜜臀av在线一区二区三区| 成人av资源下载| 亚洲成av人片一区二区梦乃| 精品日韩99亚洲| 91天堂素人约啪| 日韩电影在线一区| 中文字幕欧美国产| 欧美性色综合网|