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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? jama_qr.h

?? fast marching method
?? H
字號:
#ifndef JAMA_QR_H
#define JAMA_QR_H

#include "tnt_array1d.h"
#include "tnt_array2d.h"
#include "tnt_math_utils.h"

namespace JAMA
{

/** 
<p>
	Classical QR Decompisition:
   for an m-by-n matrix A with m >= n, the QR decomposition is an m-by-n
   orthogonal matrix Q and an n-by-n upper triangular matrix R so that
   A = Q*R.
<P>
   The QR decompostion always exists, even if the matrix does not have
   full rank, so the constructor will never fail.  The primary use of the
   QR decomposition is in the least squares solution of nonsquare systems
   of simultaneous linear equations.  This will fail if isFullRank()
   returns 0 (false).

<p>
	The Q and R factors can be retrived via the getQ() and getR()
	methods. Furthermore, a solve() method is provided to find the
	least squares solution of Ax=b using the QR factors.  

   <p>
	(Adapted from JAMA, a Java Matrix Library, developed by jointly 
	by the Mathworks and NIST; see  http://math.nist.gov/javanumerics/jama).
*/

template <class Real>
class QR {


   /** Array for internal storage of decomposition.
   @serial internal array storage.
   */
   
   TNT::Array2D<Real> QR_;

   /** Row and column dimensions.
   @serial column dimension.
   @serial row dimension.
   */
   int m, n;

   /** Array for internal storage of diagonal of R.
   @serial diagonal of R.
   */
   TNT::Array1D<Real> Rdiag;


public:
	
/**
	Create a QR factorization object for A.

	@param A rectangular (m>=n) matrix.
*/
	QR(const TNT::Array2D<Real> &A)		/* constructor */
	{
      QR_ = A.copy();
      m = A.dim1();
      n = A.dim2();
      Rdiag = TNT::Array1D<Real>(n);
	  int i=0, j=0, k=0;

      // Main loop.
      for (k = 0; k < n; k++) {
         // Compute 2-norm of k-th column without under/overflow.
         Real nrm = 0;
         for (i = k; i < m; i++) {
            nrm = hypot(nrm,QR_[i][k]);
         }

         if (nrm != 0.0) {
            // Form k-th Householder vector.
            if (QR_[k][k] < 0) {
               nrm = -nrm;
            }
            for (i = k; i < m; i++) {
               QR_[i][k] /= nrm;
            }
            QR_[k][k] += 1.0;

            // Apply transformation to remaining columns.
            for (j = k+1; j < n; j++) {
               Real s = 0.0; 
               for (i = k; i < m; i++) {
                  s += QR_[i][k]*QR_[i][j];
               }
               s = -s/QR_[k][k];
               for (i = k; i < m; i++) {
                  QR_[i][j] += s*QR_[i][k];
               }
            }
         }
         Rdiag[k] = -nrm;
      }
   }


/**
	Flag to denote the matrix is of full rank.

	@return 1 if matrix is full rank, 0 otherwise.
*/
	int isFullRank() const		
	{
      for (int j = 0; j < n; j++) 
	  {
         if (Rdiag[j] == 0)
            return 0;
      }
      return 1;
	}
	
	


   /** 
   
   Retreive the Householder vectors from QR factorization
   @returns lower trapezoidal matrix whose columns define the reflections
   */

   TNT::Array2D<Real> getHouseholder (void)  const
   {
   	  TNT::Array2D<Real> H(m,n);

	  /* note: H is completely filled in by algorithm, so
	     initializaiton of H is not necessary.
	  */
      for (int i = 0; i < m; i++) 
	  {
         for (int j = 0; j < n; j++) 
		 {
            if (i >= j) {
               H[i][j] = QR_[i][j];
            } else {
               H[i][j] = 0.0;
            }
         }
      }
	  return H;
   }



   /** Return the upper triangular factor, R, of the QR factorization
   @return     R
   */

	TNT::Array2D<Real> getR() const
	{
      TNT::Array2D<Real> R(n,n);
      for (int i = 0; i < n; i++) {
         for (int j = 0; j < n; j++) {
            if (i < j) {
               R[i][j] = QR_[i][j];
            } else if (i == j) {
               R[i][j] = Rdiag[i];
            } else {
               R[i][j] = 0.0;
            }
         }
      }
	  return R;
   }
	
	



   /** 
   	Generate and return the (economy-sized) orthogonal factor
   @param     Q the (ecnomy-sized) orthogonal factor (Q*R=A).
   */

	TNT::Array2D<Real> getQ() const
	{
	  int i=0, j=0, k=0;

	  TNT::Array2D<Real> Q(m,n);
      for (k = n-1; k >= 0; k--) {
         for (i = 0; i < m; i++) {
            Q[i][k] = 0.0;
         }
         Q[k][k] = 1.0;
         for (j = k; j < n; j++) {
            if (QR_[k][k] != 0) {
               Real s = 0.0;
               for (i = k; i < m; i++) {
                  s += QR_[i][k]*Q[i][j];
               }
               s = -s/QR_[k][k];
               for (i = k; i < m; i++) {
                  Q[i][j] += s*QR_[i][k];
               }
            }
         }
      }
	  return Q;
   }


   /** Least squares solution of A*x = b
   @param B     m-length array (vector).
   @return x    n-length array (vector) that minimizes the two norm of Q*R*X-B.
   		If B is non-conformant, or if QR.isFullRank() is false,
						the routine returns a null (0-length) vector.
   */

   TNT::Array1D<Real> solve(const TNT::Array1D<Real> &b) const
   {
   	  if (b.dim1() != m)		/* arrays must be conformant */
	  	return TNT::Array1D<Real>();

	  if ( !isFullRank() )		/* matrix is rank deficient */
	  {
	  	return TNT::Array1D<Real>();
	  }

	  TNT::Array1D<Real> x = b.copy();
	  int i=0, j=0, k=0;

      // Compute Y = transpose(Q)*b
      for (k = 0; k < n; k++) 
	  {
            Real s = 0.0; 
            for (i = k; i < m; i++) 
			{
               s += QR_[i][k]*x[i];
            }
            s = -s/QR_[k][k];
            for (i = k; i < m; i++) 
			{
               x[i] += s*QR_[i][k];
            }
      }
      // Solve R*X = Y;
      for (k = n-1; k >= 0; k--) 
	  {
         x[k] /= Rdiag[k];
         for (i = 0; i < k; i++) {
               x[i] -= x[k]*QR_[i][k];
         }
      }


	  /* return n x nx portion of X */
	  TNT::Array1D<Real> x_(n);
	  for (i=0; i<n; i++)
			x_[i] = x[i];

	  return x_;
   }

   /** Least squares solution of A*X = B
   @param B     m x k Array (must conform).
   @return X     n x k Array that minimizes the two norm of Q*R*X-B. If
   						B is non-conformant, or if QR.isFullRank() is false,
						the routine returns a null (0x0) array.
   */

   TNT::Array2D<Real> solve(const TNT::Array2D<Real> &B) const
   {
   	  if (B.dim1() != m)		/* arrays must be conformant */
	  	return TNT::Array2D<Real>(0,0);

	  if ( !isFullRank() )		/* matrix is rank deficient */
	  {
	  	return TNT::Array2D<Real>(0,0);
	  }

      int nx = B.dim2(); 
	  TNT::Array2D<Real> X = B.copy();
	  int i=0, j=0, k=0;

      // Compute Y = transpose(Q)*B
      for (k = 0; k < n; k++) {
         for (j = 0; j < nx; j++) {
            Real s = 0.0; 
            for (i = k; i < m; i++) {
               s += QR_[i][k]*X[i][j];
            }
            s = -s/QR_[k][k];
            for (i = k; i < m; i++) {
               X[i][j] += s*QR_[i][k];
            }
         }
      }
      // Solve R*X = Y;
      for (k = n-1; k >= 0; k--) {
         for (j = 0; j < nx; j++) {
            X[k][j] /= Rdiag[k];
         }
         for (i = 0; i < k; i++) {
            for (j = 0; j < nx; j++) {
               X[i][j] -= X[k][j]*QR_[i][k];
            }
         }
      }


	  /* return n x nx portion of X */
	  TNT::Array2D<Real> X_(n,nx);
	  for (i=0; i<n; i++)
	  	for (j=0; j<nx; j++)
			X_[i][j] = X[i][j];

	  return X_;
   }


};


}
// namespace JAMA

#endif
// JAMA_QR__H

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产白丝网站精品污在线入口| 亚洲成人av免费| 久久久蜜桃精品| 国产午夜精品美女毛片视频| 一区二区三区中文在线| 日韩精品1区2区3区| 久久se精品一区精品二区| 国产精品一区二区三区乱码| av不卡一区二区三区| 正在播放亚洲一区| 国产精品女同一区二区三区| 午夜免费欧美电影| 首页亚洲欧美制服丝腿| 99久久99精品久久久久久| 欧美一区二区三区男人的天堂| 国产色婷婷亚洲99精品小说| 午夜视频一区在线观看| 成人国产亚洲欧美成人综合网 | 日本道免费精品一区二区三区| 精品日韩欧美在线| 亚洲国产中文字幕| 色婷婷国产精品| 国产精品盗摄一区二区三区| 国产成人激情av| 日本一区二区三区高清不卡| 精品一区在线看| 日韩三级.com| 日韩国产一区二| 欧美高清精品3d| 日韩综合一区二区| 欧美日韩一区久久| 日本不卡在线视频| 精品国产一区二区三区四区四| 视频在线观看一区| 欧美日韩成人在线一区| 日韩不卡在线观看日韩不卡视频| 在线观看免费视频综合| 日韩国产一二三区| 日韩网站在线看片你懂的| 美女免费视频一区| 久久老女人爱爱| 色综合咪咪久久| 三级一区在线视频先锋| 日韩一级片在线播放| 国产伦精品一区二区三区免费迷| 中文字幕欧美区| 欧美卡1卡2卡| 国产精品一区二区无线| 亚洲人成精品久久久久| 91精品国产色综合久久不卡蜜臀| 国产成人综合视频| 一区二区三区精密机械公司| 日韩一区二区三区电影在线观看| 久久精品国产色蜜蜜麻豆| 亚洲素人一区二区| 日韩欧美一级在线播放| 91色在线porny| 国产一区二区久久| 日韩电影网1区2区| 中文字幕制服丝袜成人av| 91精品婷婷国产综合久久竹菊| 国产一区二区在线看| 亚洲成人免费看| 中文字幕一区视频| 久久久久国产精品麻豆ai换脸| 色综合天天在线| 国产超碰在线一区| 日本不卡一二三| 日韩电影在线免费看| 亚洲国产综合91精品麻豆| 亚洲男人天堂av网| 综合中文字幕亚洲| 亚洲欧美一区二区不卡| 一区二区中文字幕在线| 国产精品久久久久久久久久免费看| 日韩一区二区在线观看| 91精品国产乱码| 欧美日韩小视频| 欧美日高清视频| 91精品国产综合久久小美女| 欧美日韩精品系列| 欧美日韩国产免费| 日韩情涩欧美日韩视频| 亚洲三级理论片| 成人一二三区视频| 欧美精品在线视频| 中文字幕日韩精品一区| 亚洲精品国产精华液| 亚洲精品国产品国语在线app| 国产精品免费久久久久| 自拍偷拍欧美精品| 亚洲黄色录像片| 五月天一区二区三区| 日韩电影免费在线看| 国产剧情一区二区| av在线播放一区二区三区| 色一情一乱一乱一91av| 日韩一级视频免费观看在线| 中文字幕在线观看不卡视频| 亚洲va国产va欧美va观看| 国产mv日韩mv欧美| 欧美一区二区高清| 中文无字幕一区二区三区 | 91高清视频在线| 久久综合一区二区| 亚洲成av人综合在线观看| 午夜精品一区二区三区电影天堂 | 欧美日韩精品二区第二页| 亚洲一区二区在线观看视频| 成人h动漫精品| 精品国产一区二区三区四区四 | www.亚洲精品| 日韩欧美的一区二区| 视频一区二区三区入口| 欧美性生活影院| 肉丝袜脚交视频一区二区| 欧美揉bbbbb揉bbbbb| 国产日产欧美一区二区视频| 日韩高清欧美激情| 日韩欧美第一区| 黄色精品一二区| 欧美激情一区二区三区不卡| 精品影视av免费| 26uuu久久天堂性欧美| 日韩二区在线观看| 欧美人伦禁忌dvd放荡欲情| 五月天中文字幕一区二区| 色94色欧美sute亚洲13| 亚洲精品日日夜夜| 欧美一区二区三区免费大片| 久久不见久久见免费视频1| 国产欧美一区二区在线| 欧美日韩五月天| 国产精品一级片| 日韩国产在线一| 国产精品成人一区二区三区夜夜夜| 91久久久免费一区二区| 亚洲国产wwwccc36天堂| 日韩一级二级三级精品视频| 国产一本一道久久香蕉| 亚洲欧美视频在线观看视频| 欧美日韩国产综合久久| 国产一区激情在线| 亚洲一区二区在线免费看| 久久影音资源网| 91片在线免费观看| 精品一区二区综合| 亚洲一区二区三区精品在线| 精品国产三级电影在线观看| 91久久精品午夜一区二区| 经典三级一区二区| 亚洲高清在线精品| 中文字幕一区二区三区四区| 欧美一区二区视频在线观看2020 | 欧美日韩国产精品成人| 国产91精品入口| 久久精品国产亚洲一区二区三区| 国产色婷婷亚洲99精品小说| 91精品国产黑色紧身裤美女| 日本乱码高清不卡字幕| 国产一区亚洲一区| 另类专区欧美蜜桃臀第一页| 亚洲成人黄色影院| 偷拍一区二区三区四区| 亚洲精品久久7777| 一区二区高清免费观看影视大全| 精品久久久久久无| 日韩欧美在线影院| 精品久久久三级丝袜| 久久婷婷久久一区二区三区| 日韩一区二区三区免费看 | 亚洲电影激情视频网站| 亚洲图片一区二区| 日韩av一区二区三区四区| 青青草伊人久久| 国产综合色精品一区二区三区| 国产一区二区三区四区五区入口| 国产乱人伦偷精品视频免下载 | 国产欧美一区视频| 亚洲欧美一区二区三区极速播放| 亚洲自拍偷拍av| 久久99九九99精品| 9l国产精品久久久久麻豆| 欧洲精品在线观看| 日韩欧美国产麻豆| 国产精品久久久久久久久晋中| 亚洲欧美日韩成人高清在线一区| 洋洋av久久久久久久一区| 蜜臀av国产精品久久久久| 国产精品自在欧美一区| 色综合视频在线观看| 欧美一区二区人人喊爽| 亚洲女人****多毛耸耸8| 蜜桃av噜噜一区二区三区小说| 成人国产免费视频| 91精品国产aⅴ一区二区| 中文字幕一区二区视频| 精品一区二区三区视频| 在线免费一区三区| 国产精品天天看|