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

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

?? matrix.cpp

?? 該算法是張青復與周愛民的基于RM-MEDA算法的程序
?? CPP
字號:
// Matrix.cpp

#include <float.h>
#include <math.h>
#include "Matrix.h"

#if defined(WIN32)
    #define wxFinite(n) _finite(n)
#elif defined(_LINUX)
    #define wxFinite(n) finite(n)
#else
    #define wxFinite(n) ((n)==(n))
#endif

namespace az
{

namespace alg
{

//constructor
Matrix::Matrix(unsigned int row, int unsigned col)
	:mRow(row), mCol(col)
{
	if(mRow* mCol > 0)
	{
		pData = new double[mRow * mCol];
		for(unsigned int i=0; i<mRow*mCol; i++) pData[i]=0.0;
	}
	else 
		pData = 0;
}

//constructor
Matrix::Matrix(const Matrix& mat)
	:mRow(mat.mRow), mCol(mat.mCol)
{
	if(mRow* mCol > 0)
	{
		pData = new double[mRow * mCol];
		memcpy(pData, mat.pData, mRow*mCol*sizeof(double));
	}
	else 
		pData = 0;
}

//destructor
Matrix::~Matrix()
{
	if(pData) delete []pData;
}

//reset the matrix size
Matrix& Matrix::Resize(unsigned int row, unsigned int col)
{
	if(row != mRow || col != mCol)
	{
		if(pData) delete []pData;
		mRow	= row;
		mCol	= col;
		pData = new double[mRow*mCol];
		for(unsigned int i=0; i<mRow*mCol; i++)	pData[i] = 0.0;
	}
	return *this;
}

//create an identity matrix
Matrix& Matrix::Identity(unsigned int size)
{
	(*this).Resize(size, size);
	for(unsigned int i=0; i<size; i++)	(*this)(i, i) = 1.0;
	return *this;
}

//get an element
double& Matrix::operator()(unsigned int row, unsigned int col)
{
	CHECK(row < mRow && col < mCol, "Matrix::(row,col)");
	return pData[col*mRow + row];
}

//reset to another matrix
Matrix& Matrix::operator= (const Matrix& mat)
{
	Resize(mat.mRow, mat.mCol);
	for(unsigned int i=0; i<mRow*mCol; i++) pData[i] = mat.pData[i];
	return *this;
}

//get a row
FVECTOR& Matrix::Row(unsigned int row, FVECTOR& value)
{
	CHECK(row < mRow, "Matrix::Row()");
	value.resize(mCol);
	for(unsigned int i=0; i<mCol; i++) value[i] = (*this)(row, i);
	return value;
}

//get a column
FVECTOR& Matrix::Column(unsigned int col, FVECTOR& value)
{
	CHECK(col < mCol, "Matrix::Column()");
	value.resize(mRow);
	for(unsigned int i=0; i<mRow; i++) value[i] = (*this)(i, col);
	return value;
}

//get a sub-matrix except a row and a column
Matrix& Matrix::Sub(unsigned int row, unsigned int col, Matrix& mat)
{
	CHECK(row < mRow && mRow > 1 && col < mCol && mCol > 1, "Matrix::Sub()");

	mat.Resize(mRow-1, mCol-1);

	unsigned int i,j;

	std::vector<unsigned int> ir(mRow-1), jc(mCol-1);
	for(i=0; i<mRow-1; i++) ir[i] = i<row ? i : i+1;
	for(j=0; j<mCol-1; j++) jc[j] = j<col ? j : j+1;

	for(i=0; i<mat.RowSize(); i++)
		for(j=0; j<mat.ColSize(); j++)
			mat(i,j) = (*this)(ir[i],jc[j]);
	return mat;
}

//calculate the determinant of a square matrix
double Matrix::Det()
{
	CHECK(mRow == mCol, "Matrix::Det()");

	// compute the determinant by definition
	//if(mRow == 1) return (*this)(0,0);

	//if(mRow == 2) return (*this)(0,0)*(*this)(1,1) - (*this)(0,1)*(*this)(1,0);
	//
	//if(mRow == 3) return  (*this)(0,0) * (*this)(1,1) * (*this)(2,2) 
	//					 +(*this)(0,1) * (*this)(1,2) * (*this)(2,0) 
	//					 +(*this)(0,2) * (*this)(1,0) * (*this)(2,1)
	//					 -(*this)(0,0) * (*this)(1,2) * (*this)(2,1) 
	//					 -(*this)(0,1) * (*this)(1,0) * (*this)(2,2) 
	//					 -(*this)(0,2) * (*this)(1,1) * (*this)(2,0);
	//
	//double tmp = 0.0;
	//Matrix submatrix;
	//for(unsigned int i=0; i<mCol; i++)
	//	tmp += (i % 2 == 0 ? 1:-1) * (*this)(0,i) * (*this).Sub(0, i, submatrix).Det();
	//return tmp;

	// modified Nov.19 2006
	Matrix mat = *this;
	std::vector<unsigned int> indx(mCol); 
	double d;
	LUdcmp(mat, indx, d);
	for(unsigned int i=0; i<mCol; i++) d *= mat(i,i);
	return d;
}

//translate the matrix
Matrix& Matrix::Trans()
{
	if(mRow<2 || mCol<2) 
	{
		std::swap((*this).mCol, (*this).mRow);
		return *this;
	}
	Matrix mat(*this);
	std::swap((*this).mCol, (*this).mRow);
	for(unsigned int i=0; i<mRow; i++)
		for(unsigned int j=0; j<mCol; j++)
			(*this)(i, j) = mat(j, i);				
	return *this;
}

//inverse the matrix
Matrix& Matrix::Inv()
{
	CHECK(mRow == mCol, "Matrix::Inv()");

	//Adjoint method
	//unsigned int i,j;
	//double det=0.0;
	//Matrix adjmat(mRow,mCol), submatrix;
	//for(i=0; i<mRow; i++)
	//	for(j=0; j<mCol; j++)
	//		adjmat(i, j) = ((i + j)%2 == 0 ? 1 : -1)*(*this).Sub(j, i, submatrix).Det();
	//for(i=0; i<mRow; i++) det += (*this)(0,i)*adjmat(i,0);
	//*this = adjmat; this->Divide(det);

	//LU decomposition version
	Matrix lumat(*this);
	std::vector<unsigned int> indx(mRow);
	std::vector<double> col(mRow);
	double d;
	unsigned i,j;
	LUdcmp(lumat,indx,d);
	for(j=0; j<mRow; j++)
	{
		for(i=0; i<mRow; i++) col[i]=0.0;
		col[j]=1.0;
		LUbksb(lumat,indx,col);
		for(i=0; i<mRow; i++) (*this)(i,j)=col[i];
	}
	
	return *this;
}

//calculate the eigenvalue and egienvectors
void Matrix::Eig(FVECTOR& eigvalue, Matrix& eigvector)
{
	CHECK(mRow == mCol, "Matrix::Eig()");
	eigvalue.resize(mRow);
	FVECTOR interm;
	interm.resize(mRow);
	eigvector = *this;
	
	tred2(eigvalue, interm, eigvector);
	tqli(eigvalue, interm, eigvector);
	//Eigenvector in columns
	Sort(eigvalue, eigvector);
}

//multiply a matrix
Matrix& Matrix::Multiply(Matrix& mat, Matrix& result)
{
	unsigned int i,j,k;

	CHECK(mCol == mat.RowSize(), "Matrix::Myltiply()");
	
	result.Resize((*this).RowSize(), mat.ColSize());
	
	for(i=0; i<result.RowSize(); i++)
		for(j=0; j<result.ColSize(); j++)
		{
			result(i, j) = 0;
			for(k=0; k<mat.RowSize(); k++)
				result(i, j) += (*this)(i, k) * mat(k, j);
		}
	return result;
}

//left multiply a vector
FVECTOR& Matrix::LeftMultiply(FVECTOR& vec, FVECTOR& result)
{
	CHECK(mRow == vec.size(), "Matrix::LeftMultiply()");
	result.resize((*this).ColSize());
	for(unsigned int i=0; i<(*this).ColSize(); i++)
	{
		result[i] = 0;
		for(unsigned int j=0; j<(*this).RowSize(); j++)
			result[i] += (*this)(j, i) * vec[j];
	}
	return result;
}

//right multiply a vector
FVECTOR& Matrix::RightMultiply(FVECTOR& vec, FVECTOR& result)
{
	CHECK(mCol == vec.size(), "Matrix::RightMultiply()");
	result.resize((*this).RowSize());
	for(unsigned int i=0; i<(*this).RowSize(); i++)
	{
		result[i] = 0;
		for(unsigned int j=0; j<(*this).ColSize(); j++)
			result[i] += (*this)(i, j) * vec[j];
	}
	return result;
}

//divide a scalar
Matrix& Matrix::Divide(double sca)
{
	unsigned int i,j;
	for(i=0; i<(*this).RowSize(); i++)
		for(j=0; j<(*this).ColSize(); j++)
			(*this)(i, j) /= sca;
	return *this;
}

//get the mean of all columns
FVECTOR& Matrix::ColMean(FVECTOR& mean)
{
	mean.resize((*this).RowSize());
	unsigned int i,j;
	for(i=0; i<mean.size(); i++)
	{
		mean[i] = 0.0;
		for(j=0; j<(*this).ColSize(); j++)
			mean[i] += (*this)(i, j);
		mean[i] /= (double) (*this).ColSize() ;
	}
	return mean;
}

//get the mean of all rows
FVECTOR& Matrix::RowMean(FVECTOR& mean)
{
	mean.resize((*this).ColSize());
	unsigned int i,j;
	for(i=0; i<mean.size(); i++)
	{
		mean[i] = 0;
		for(j=0; j<(*this).RowSize(); j++)
			mean[i] += (*this)(j, i);
		mean[i] /= (double) (*this).RowSize() ;
	}	
	return mean;
}

//get standard variation of all columns
FVECTOR& Matrix::ColStd(FVECTOR& std)
{
	std.resize((*this).RowSize());
	FVECTOR mean;
	ColMean(mean);
	unsigned int i,j;
	for(i=0; i<std.size(); i++)
	{
		std[i] = 0.0;
		for(j=0; j<(*this).ColSize(); j++)
			std[i] += ((*this)(i,j) - mean[i])*((*this)(i,j) - mean[i]);
		std[i] /= double((*this).ColSize() -1);
		std[i] = sqrt(std[i]);
	}
	return std;
}

//get standard variation of all rows
FVECTOR& Matrix::RowStd(FVECTOR& std)
{
	std.resize((*this).ColSize());
	FVECTOR mean;
	RowMean(mean);
	unsigned int i,j;
	for(i=0; i<std.size(); i++)
	{
		std[i] = 0.0;
		for(j=0; j<(*this).RowSize(); j++)
			std[i] += ((*this)(j,i) - mean[i])*((*this)(j,i) - mean[i]);
		std[i] /= double((*this).RowSize() -1);
		std[i] = sqrt(std[i]);
	}
	return std;
}

//subtract a row vector
Matrix& Matrix::RowSub(FVECTOR& value)
{
	unsigned int i,j;
	for(i=0; i<(*this).RowSize(); i++)
		for(j=0; j<(*this).ColSize(); j++)
			(*this)(i, j) -= value[j];
	return *this;
}

//subtract a column vector
Matrix& Matrix::ColSub(FVECTOR& value)
{
	unsigned int i,j;
	for(i=0; i<(*this).RowSize(); i++)
		for(j=0; j<(*this).ColSize(); j++)
			(*this)(i, j) -= value[i];
	return *this;
}

//read a matrix
std::istream& operator>>(std::istream& is, Matrix& mat)
{
	unsigned int row,col;
	is>>row>>col;
	mat.Resize(row,col);
	for(unsigned int i=0; i<mat.mRow; i++)
		for(unsigned int j=0; j<mat.mCol; j++)
			is>>mat(i, j);
	return is;
}

//write a matrix
std::ostream& operator<< (std::ostream& os, Matrix& mat)
{
	os<<mat.RowSize()<<"\t"<<mat.ColSize()<<std::endl;
	os.setf(std::ios::right|std::ios::scientific);
	os.precision(5);   
	for(unsigned int i=0; i<mat.mRow; i++)
	{
		for(unsigned int j=0; j<mat.mCol; j++)
			os<<mat(i, j)<<"\t";
		os<<std::endl;
	}
	return os;
}

//solve A X = b, mat if the decomposition of A
void LUbksb(Matrix& mat, std::vector<unsigned int>& indx, std::vector<double>& b)
{
	int i,ii=0,ip,j, n=mat.RowSize();
	double sum;

	for(i=0;i<n;i++) 
	{
		ip=indx[i];
		sum=b[ip];
		b[ip]=b[i];
		if(ii!=0)
			for(j=ii-1;j<=i;j++) sum -= mat(i,j)*b[j];
		else if(sum!=0.0) ii=i+1;
		b[i]=sum;
	}

	for(i=n-1;i>=0;i--) 
	{
		sum=b[i];
		for(j=i+1;j<n;j++) sum -= mat(i,j)*b[j];
		b[i]=sum/mat(i,i);
	}
}

//LU decomposition 
void LUdcmp(Matrix& mat, std::vector<unsigned int>& indx, double& d)
{
	const double TINY = 1.0e-20;
	unsigned int i,imax=0,j,k;
	double big,dum,sum,temp;
	unsigned int n = mat.RowSize();
	std::vector<double> vv(n);

	d=1.0;
	for(i=0;i<n;i++) 
	{
		big=0.0;
		for(j=0;j<n;j++)
			if((temp=fabs(mat(i,j)))>big) big=temp;
		//if(big == 0.0) std::cout<<"error"<<std::endl;
		vv[i]=1.0/big;
	}

	for(j=0;j<n;j++) 
	{
		for(i=0;i<j;i++) 
		{
			sum = mat(i,j);
			for(k=0;k<i;k++) sum -= mat(i,k)*mat(k,j);
			mat(i,j) = sum;
		}
		big=0.0;
		for (i=j;i<n;i++) 
		{
			sum=mat(i,j);
			for(k=0;k<j;k++)
				sum -= mat(i,k)*mat(k,j);
			mat(i,j) = sum;
			if((dum=vv[i]*fabs(sum)) >= big) 
			{
				big=dum;
				imax=i;
			}
		}
		if(j != imax) 
		{
			for(k=0;k<n;k++) 
				std::swap(mat(imax,k), mat(j,k));
			d = -d;
			vv[imax]=vv[j];
		}
		indx[j]=imax;
		if (mat(j,j) == 0.0) mat(j,j)=TINY;
		if (j != n-1) 
		{
			dum=1.0/mat(j,j);
			for (i=j+1;i<n;i++) mat(i,j) *= dum;
		}
	}
}

//Householder reduction of Matrix a to tridiagonal form.
//
// Algorithm: Martin et al., Num. Math. 11, 181-195, 1968.
// Ref: Smith et al., Matrix Eigensystem Routines -- EISPACK Guide
// Springer-Verlag, 1976, pp. 489-494.
// W H Press et al., Numerical Recipes in C, Cambridge U P,
// 1988, pp. 373-374. 
void Matrix::tred2(FVECTOR& eigenvalue, FVECTOR& interm, Matrix& eigenvector)
{
	double scale, hh, h, g, f;
	int k, j, i,l;

	for(i = mRow-1; i >= 1; i--)
	{
		l = i - 1;
		h = scale = 0.0;
		if(l > 0)
		{
			for (k = 0; k <= l; k++)
				scale += fabs(eigenvector(i, k));
			if (scale == 0.0)
				interm[i] = eigenvector(i, l);
			else
			{
				for (k = 0; k <= l; k++)
				{
					eigenvector(i, k) /= scale;
					h += eigenvector(i, k) * eigenvector(i, k);
				}
				f = eigenvector(i, l);
				g = f>0 ? -sqrt(h) : sqrt(h);
				interm[i] = scale * g;
				h -= f * g;
				eigenvector(i, l) = f - g;
				f = 0.0;
				for (j = 0; j <= l; j++)
				{
					eigenvector(j, i) = eigenvector(i, j)/h;
					g = 0.0;
					for (k = 0; k <= j; k++)
						g += eigenvector(j, k) * eigenvector(i, k);
					for (k = j+1; k <= l; k++)
						g += eigenvector(k, j) * eigenvector(i, k);
					interm[j] = g / h;
					f += interm[j] * eigenvector(i, j);
				}
				hh = f / (h + h);
				for (j = 0; j <= l; j++)
				{
					f = eigenvector(i, j);
					interm[j] = g = interm[j] - hh * f;
					for (k = 0; k <= j; k++)
						eigenvector(j, k) -= (f * interm[k] + g * eigenvector(i, k));
				}
			}
		}
		else
			interm[i] = eigenvector(i, l);
		eigenvalue[i] = h;
	}
	eigenvalue[0] = 0.0	;	
	interm[0] = 0.0;
	for(i = 0; i < (int)mRow; i++)
	{
		l = i - 1;
		if(eigenvalue[i])
		{
			for (j = 0; j <= l; j++)
			{
				g = 0.0;
				for (k = 0; k <= l; k++)
					g += eigenvector(i, k) * eigenvector(k, j);
				for (k = 0; k <= l; k++)
					eigenvector(k, j) -= g * eigenvector(k, i);
			}
		}
		eigenvalue[i] = eigenvector(i, i);
		eigenvector(i, i) = 1.0;
		for (j = 0; j <= l; j++)
			eigenvector(j, i) = eigenvector(i, j) = 0.0;
	}
}

#define SIGN(a, b) ((b) < 0 ? -fabs(a) : fabs(a))
//Tridiagonal QL algorithm -- Implicit 
void Matrix::tqli(FVECTOR& eigenvalue, FVECTOR& interm, Matrix& eigenvector)
{
	int m, l, iter, i, k;
	double s, r, p, g, f, dd, c, b;
	
	for (i = 1; i < (int)mRow; i++)
		interm[i-1] = interm[i];
	interm[mRow-1] = 0.0;
	for (l = 0; l < (int)mRow; l++)
	{
		iter = 0;
		do
		{
			if (iter++ > 100) break;

			for (m = l; m < (int)mRow-1; m++)
			{
				dd = fabs(eigenvalue[m]) + fabs(eigenvalue[m+1]);
				if (fabs(interm[m]) + dd == dd || !wxFinite(dd)) break;
			}
			if (m != l)
			{
				//if (iter++ == 30) erhand("No convergence in TLQI.");
				g = (eigenvalue[l+1] - eigenvalue[l]) / (2.0 * interm[l]);
				r = sqrt((g * g) + 1.0);
				g = eigenvalue[m] - eigenvalue[l] + interm[l] / (g + SIGN(r, g));
				s = c = 1.0;
				p = 0.0;
				for (i = m-1; i >= l; i--)
				{
					f = s * interm[i];
					b = c * interm[i];
					if (fabs(f) >= fabs(g))
					{
						c = g / f;
						r = sqrt((c * c) + 1.0);
						interm[i+1] = f * r;
						c *= (s = 1.0/r);
					}
					else
					{
						s = f / g;
						r = sqrt((s * s) + 1.0);
						interm[i+1] = g * r;
						s *= (c = 1.0/r);
					}
					g = eigenvalue[i+1] - p;
					r = (eigenvalue[i] - g) * s + 2.0 * c * b;
					p = s * r;
					eigenvalue[i+1] = g + p;
					g = c * r - b;
					for (k = 0; k < (int)mRow; k++)
					{
						f = eigenvector(k, i+1);
						eigenvector(k, i+1)= s * eigenvector(k, i) + c * f;
						eigenvector(k, i) = c * eigenvector(k, i) - s * f;
					}
				}
				eigenvalue[l] = eigenvalue[l] - p;
				interm[l] = g;
				interm[m] = 0.0;
			}
		}  while (m  != l);
	}
}

//sort the eigenvalue by decreasing order
void Matrix::Sort(FVECTOR& eigenvalue, Matrix& eigenvector)
{
	unsigned int i,j,k;
	unsigned int m = (unsigned int)eigenvalue.size();

	//repair 
	for(i=0; i<m; i++) if(!wxFinite(eigenvalue[i])) eigenvalue[i] = 1.0E-100;
	for(i=0; i<m; i++) 
	{
		j=0;
		for(k=0; k<m; k++) if(!wxFinite(eigenvector(k, i))) j = 1;
		if(j>0) for(k=0; k<m; k++) eigenvector(k, i) = 1.0/sqrt(m+0.0);
	}

	for(i=0; i<m; i++) if(eigenvalue[i]<0)
	{
		eigenvalue[i] *= -1;
		for(j=0; j<m; j++) eigenvector(j,i) *= -1;
	}
	for(i=0; i<m - 1; i++)
		for(j=i+1; j<m; j++)
			if(eigenvalue[j] > eigenvalue[i])
			{
				std::swap(eigenvalue[j], eigenvalue[i]);
				for(k=0; k<m; k++)
					std::swap(eigenvector(k, j), eigenvector(k, i));
			}
}

} //namespace alg

} //namespace az

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美在线一二三四区| 亚洲v日本v欧美v久久精品| 日韩午夜三级在线| 日韩精品中文字幕一区二区三区 | 日韩一级视频免费观看在线| 久久嫩草精品久久久精品一| 国产精品久久一卡二卡| 午夜不卡av免费| 国产电影精品久久禁18| 一本一道久久a久久精品| 欧美一区二区三区日韩视频| 中文字幕精品在线不卡| 丝袜a∨在线一区二区三区不卡 | 91精品国产入口| 亚洲女性喷水在线观看一区| 亚洲成人av一区二区三区| 国产成人午夜视频| 欧美精品在线观看播放| 亚洲婷婷综合久久一本伊一区| 日韩国产精品久久| 欧美视频三区在线播放| 亚洲视频一区二区在线观看| 九九久久精品视频| 欧美一二三四在线| 日韩va欧美va亚洲va久久| 在线精品视频免费观看| 亚洲手机成人高清视频| 99精品视频一区二区三区| 久久夜色精品一区| 美女mm1313爽爽久久久蜜臀| 欧美日韩精品一区二区三区 | 久久99国产精品免费| 色哟哟欧美精品| 国产精品盗摄一区二区三区| 国产精品一区在线| 精品日韩在线一区| 国产在线不卡视频| 久久久99精品免费观看不卡| 国产精品18久久久久久久久 | 91精品福利在线| 久久久不卡影院| 成人免费视频视频在线观看免费| 久久精品亚洲一区二区三区浴池| 美女免费视频一区| 久久久久国产精品人| 极品少妇xxxx偷拍精品少妇| 精品国产乱码久久久久久夜甘婷婷| 精品一区二区三区免费毛片爱| 国产亚洲精品超碰| 欧美视频一区二区在线观看| 日韩高清在线观看| 国产精品美女一区二区在线观看| 欧美主播一区二区三区| 国产尤物一区二区| 亚洲精品国产无套在线观| 欧美岛国在线观看| 欧美午夜精品久久久久久超碰| 久久精品国产99国产| 亚洲精品第1页| 国产精品久久久久久久久动漫| 欧美久久久久免费| 91浏览器打开| 成人av在线网站| 国产伦精品一区二区三区在线观看| 亚洲午夜羞羞片| 中文字幕中文字幕一区| 色综合亚洲欧洲| 国模娜娜一区二区三区| 亚洲另类春色校园小说| 欧美成人一级视频| 欧美日韩免费一区二区三区 | 欧美成人精品二区三区99精品| 欧美自拍偷拍一区| 波多野结衣中文字幕一区二区三区| 精品在线观看视频| 精品亚洲欧美一区| 麻豆精品一区二区综合av| 一区二区三区在线观看网站| 国产精品久久久爽爽爽麻豆色哟哟| 欧美不卡视频一区| 欧美一区二区三区性视频| 色婷婷综合久久| 在线观看日韩电影| 欧美午夜电影在线播放| caoporm超碰国产精品| 国产一级精品在线| 国产成人免费在线视频| 91年精品国产| 777精品伊人久久久久大香线蕉| 日韩视频在线观看一区二区| 欧美xxx久久| 亚洲婷婷综合久久一本伊一区| 亚洲永久精品国产| 蜜臀av一区二区三区| 成人精品免费视频| 欧美日韩国产综合久久| 久久蜜臀精品av| 天天综合色天天综合| 国产凹凸在线观看一区二区| 在线观看免费一区| 国产日韩欧美精品综合| 日韩高清一区二区| 91免费国产视频网站| 91精品国产一区二区三区香蕉| 国产精品久久久久一区二区三区共 | 67194成人在线观看| 成人欧美一区二区三区白人| 麻豆精品一区二区| 91丨porny丨国产| 国产亚洲欧美日韩在线一区| 亚洲成av人影院在线观看网| 成人性生交大片免费看视频在线| 欧美日本一区二区在线观看| 亚洲猫色日本管| 波多野结衣在线aⅴ中文字幕不卡| 精品国产制服丝袜高跟| 性做久久久久久久免费看| 91丨porny丨中文| 亚洲免费av高清| 99久久免费精品| 国产精品不卡一区二区三区| 国产成人在线视频播放| 精品国产伦理网| 国产黑丝在线一区二区三区| 精品久久久久久久久久久院品网 | 国产精品久久久久婷婷| 国产精品影音先锋| 国产精品麻豆一区二区| 大胆亚洲人体视频| 久久在线观看免费| 亚洲成人综合在线| 欧美一区二区不卡视频| 另类综合日韩欧美亚洲| 久久久久久久久久久99999| 99精品久久只有精品| 国产精品美女久久久久久2018| 男人操女人的视频在线观看欧美| 日韩美女视频一区| 欧美一区二区播放| 高清在线不卡av| 亚洲综合在线视频| 欧美日韩和欧美的一区二区| 国产毛片精品国产一区二区三区| 国产亚洲精品资源在线26u| 欧美日韩情趣电影| 国产99久久精品| 久久97超碰国产精品超碰| 亚洲人妖av一区二区| 精品99一区二区| 在线不卡欧美精品一区二区三区| 国产999精品久久| 国内外成人在线| 免费欧美高清视频| 蜜桃av噜噜一区| 国产v日产∨综合v精品视频| 日韩欧美的一区| 91麻豆精品国产91久久久使用方法| 91社区在线播放| 久久国产精品第一页| 欧美主播一区二区三区| 粉嫩av一区二区三区粉嫩| 久久激情五月激情| 久久国产免费看| 国产成人欧美日韩在线电影| 奇米一区二区三区| 一区二区三区在线视频观看 | 中文字幕在线视频一区| 国产精品伊人色| 亚洲精品国产a久久久久久| 欧美人动与zoxxxx乱| 韩国在线一区二区| 亚洲一区二区影院| 国产精品护士白丝一区av| 欧美一区二区福利视频| 欧美色倩网站大全免费| 国产精品99久久久久久久女警| 久久久噜噜噜久久中文字幕色伊伊 | 欧美一区二区不卡视频| 青青草国产精品97视觉盛宴| 色婷婷av一区二区三区软件| 国产乱一区二区| 亚洲日本在线观看| 国产丝袜欧美中文另类| 欧美大片在线观看一区| 成人av片在线观看| 成人av在线影院| 欧美草草影院在线视频| 一区二区三区资源| 国产一区二区91| 欧美一区二区三区啪啪| 国产成人亚洲综合色影视| 成人午夜免费电影| 91麻豆视频网站| 欧美大片在线观看一区二区| 国产人久久人人人人爽| 一区二区欧美视频| 国产成人高清在线| 日韩欧美成人午夜| 麻豆国产欧美一区二区三区| 国产伦精品一区二区三区免费 |