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

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

?? perform_moment_transform.h

?? 該程序為用MATLAB編寫的一個小波變換工具箱
?? H
字號:
// header file for perform_moment_transform

#include <math.h>#include "config.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "gram_schmidt.h"#include "matrix.h"


extern double* v;extern double* w;extern double* pos;extern double* monomials;extern double** part;extern int* G;extern int* si;
#define posx_(i) pos[ 0+(i)*2 ]#define posy_(i) pos[ 1+(i)*2 ]#define monomialsx_(i) ((int)monomials[ 0+(i)*2 ])#define monomialsy_(i) ((int)monomials[ 1+(i)*2 ])inlineint fncompare(const void * elem1, const void * elem2 )
{
	int n1 = *((int*) elem1)-1;
	int n2 = *((int*) elem2)-1;
	if( posx_(n1)<posx_(n2) )
		return -1;
	else if ( posx_(n1)==posx_(n2) )
		return 0;
	else
		return 1;
}inline int construct_part(const double* pos, double** &part, int* &si, int* &G, int n, int ptmax){
	int j = 0;
	double m = (double) n;
	while( m>=ptmax )
	{
		m /= 2; j++;
	}
	j--;
	GW_ASSERT(j>=0);
	int nj = 1<<j;		// 2^j : number of groups
	int R = n % nj;		// mod(n,2^j);
	int L = (n-R)/nj;

	part = new double*[nj];
	si = new int[nj+1];
	G = new int[nj];

	// the array 0:nj-1 to reorder
	int* I = new int[n];
	for( int i=0; i<n; ++i )
		I[i] = i+1;

	// [x,I] = sort(pos(1,:));
	qsort(I, n, sizeof(int), fncompare);

	si[0] = 0;
	for( int k=0; k<nj; ++k )
	{
		if( k<nj-R )
			G[k] = L;
		else
			G[k] = L+1;
		part[k] = new double[(int) G[k]];
		// part{k} = I(si[k]:si[k]+G(k)-1);
		for( int i=0; i<G[k]; ++i )
			part[k][i] = I[si[k]+i];
		si[k+1] = si[k] + G[k]; 
	}

	GW_DELETEARRAY(I);

	return nj;
}inline double monomial(double x, double y, int nx, int ny){
	double r = 1;
	for( int i=0; i<nx; ++i )
		r = r*x;
	for( int i=0; i<ny; ++i )
		r = r*y;
	return r;
}

inline
void perform_moment_transform(int n, int P, int k, int dir)
{	int k2 = k >> 1;
	int destroy_data = 0;
	if( part==NULL )
	{
		// construct part
		P = construct_part(pos, part, si, G, n, k2);
		destroy_data = 1;
	}	int J = log2(P) + 1;	matrix_list* Uj = new matrix_list[J];	// initialization of the moments matrix	matrix_list Mi(P);	matrix_list& Ui = Uj[0]; Ui.SetSize(P);	for( int i=0; i<P; ++i ) 	{
		double* seli = part[i];
		// current matrix is of size G[i] x 2*k2
		matrix& M = *(new matrix(G[i],k));
		for( int ii=0; ii<G[i]; ++ii )
		{
			int num = (int) seli[ii]-1;
			for( int jj=0; jj<2*k2; ++jj )
			{
				M(ii,jj) = monomial( posx_(num),posy_(num),monomialsx_(jj),monomialsy_(jj) );
			}
		}
		Mi(i) = &M;		// assign to list
		// orthogonalize
		matrix& Q = *(new matrix(G[i],G[i]));
		M.PerformGramSchmidt(Q);
		Ui(i) = &Q;		// assign to list
	}	// computation of Uj[j] for j>0	for( int j=1; j<J; ++j )	{
		// at this scale, we have nj = P/2^(j) groups
		int nj = P >> j;	// P/( 2^j )
		int mj = nj*k;    // total length of the blocks

		matrix_list& Ui = Uj[j-1];
		matrix_list& Uii = Uj[j];	Uii.SetSize(nj);
		// update each sub matrix
		for( int i=0; i<nj; ++i )
		{
			// MM is a (k x k) matrix
			matrix& MM = *(new matrix(k,k));
			// the two orthogonal matrix from coarser level
			matrix& Ui1 = *Ui(2*i);
			matrix& Ui2 = *Ui(2*i+1);
			// the two moment matrix from coarser level
			matrix& Mi1 = *Mi(2*i);
			matrix& Mi2 = *Mi(2*i+1);
			// compute M via : 
			//		MM(0:k2-1,:) = Ui1'(0:k2-1,:)*Mi1
			//		MM(k2:k,:)   = Ui2'(0:k2-1,:)*Mi2
			// recall that Ui1->G[2*i]xG[2*i], Ui2->G[2*i+1]xG[2*i+1],
			//			   Mi1->G[2*i]x k    , Mi2->G[2*i+1]x k
			for( int s=0; s<k2; ++s )
			{
				// MM(s,a) = sum_b{ Ui1(b,s)*Mi1(b,a) }
				// MM(s+k2,a) = sum_b{ Ui2(b,s)*Mi2(b,a) }
				for( int a=0; a<k; ++a )
				{
					MM(s,a) = MM(s+k2,a) = 0;
					for( int b=0; b<Ui1.GetNbrRow(); ++b )
						MM(s,a) += Ui1(b,s)*Mi1(b,a);
					for( int b=0; b<Ui2.GetNbrRow(); ++b )
						MM(s+k2,a) += Ui2(b,s)*Mi2(b,a);
				}
			}
			// orthogonalize MM and store in Ui
			matrix& Q = *(new matrix(k,k));
			MM.PerformGramSchmidt(Q);
			Uii(i) = &Q;

			// store M in Mi[i]
			GW_DELETE( Mi(i) );
			Mi(i) = &MM;
		}
	}	// initialize the result with v	memcpy( w, v, n*sizeof(double) );	double* ww = new double[n];			// to store temporary multiplication	// Sparse Matrix Multiplication	for( int jj=0; jj<J; ++jj )	{
		int j = jj;
		if( dir==-1 )
			j = J-1-j;
		matrix_list& Ui = Uj[j];
		// remember previous value of w		memcpy( ww, w, n*sizeof(double) );
		if( j==0 )
		{
			/****************************************************/
			// Special treatment for 1st scale
			for( int i=0; i<P; ++i )
			{
				double* selj = part[i];

				///////////////////////////////////////////////////////////
				// to keep : upper part is of size n-P*k^2
				int offsr = si[i]-i*k2;			// offset on row
				int longr = G[i]-k2;			// length on row
				// we keep the G(i)-k^2 last
				matrix& U = *Ui(i);
				// here we have 
				if( dir==1 )
				{
					// forward : w(seli) = U(:,k2:G[i])' * ww(selj)
					for( int s=0; s<longr; ++s )		// s is the number of the vector (column of U)
					{
						int ii = offsr + s;		// seli(s)
						w[ii] = 0;
						for( int t=0; t<G[i]; ++t )	// t is the number of the point (row of U)
						{
							int jj = (int) selj[t]-1;
							w[ii] += U( t, s+k2 )*ww[jj];
						}
					}
				}
				else
				{
					// backward : w(selj) = U(:,k2:G[i]) * ww(seli)
					for( int t=0; t<G[i]; ++t )		// t is the number of the point (row of U)
					{
						int jj = (int) selj[t]-1;
						w[jj] = 0;
						for( int s=0; s<longr; ++s )	// s is the number of the vector (column of U)
						{
							int ii = offsr + s;
							w[jj] += U( t, s+k2 )*ww[ii];
						}
					}
				}


				//////////////////////////////////////////////////////
				// to retransform : lower part is of size P*k2
				offsr = n - P*k2 + i*k2;
				GW_ASSERT( offsr>=0 );
				// here we have : seli = offs+(0:k2-1);
				if( dir==1 )
				{
					// forward : w(seli) = U(:,k2:k)' * ww(selj)
					for( int s=0; s<k2; ++s )		// s is the number of the vector (column of U)
					{
						int ii = offsr + s;		// seli(s)
						w[ii] = 0;
						for( int t=0; t<G[i]; ++t )	// t is the number of the point (row of U)
						{
							int jj = (int) selj[t]-1;
							w[ii] += U(t,s)*ww[jj];
						}
					}
				}
				else
				{
					// backward : w(selj) = w(selj) + U(:,1:k2)' * ww(seli)
					for( int t=0; t<G[i]; ++t )	// t is the number of the point (row of U)
					{
						int jj = (int) selj[t]-1;
						for( int s=0; s<k2; ++s )		// s is the number of the vector (column of U)
						{
							int ii = offsr + s;		// seli(s)
							w[jj] += U(t,s)*ww[ii];
						}
					}
				}
			}
		}
		else
		{
			/****************************************************/
			// Other following scales

			// at this scale, we have nj = P/2^(j) groups
			int nj = P >> j;	// P/( 2^j )
			int mj = nj*k;    // total length of the blocks

			int offsr = n-mj;

			for( int i=0; i<nj; ++i )
			{
				// selj = offs + k*i+(0:k-1);
				// seli = offs + k2*i+(0:k2-1);
				matrix& U = *Ui(i);
				if( dir==1 )
				{
					// w(seli) = U(:,k2:k)' * ww(selj);
					for( int s=0; s<k2; ++s )
					{
						int ii = offsr + k2*i+s;	// seli(s)
						w[ii] = 0;
						for( int t=0; t<k; ++t )
						{
							int jj = offsr + k*i+t;	// selj(t)
							w[ii] += U(t,s+k2)*ww[jj];
						}
					}

					// seli = offs + mj/2+k2*i+(0:k2-1)
					// forward : w(seli) = U(:,0:k2-1)' * ww(selj)
					for( int s=0; s<k2; ++s )		// s is the number of the vector (column of U)
					{
						int ii = offsr + mj/2 + k2*i+s;		// seli(s)
						w[ii] = 0;
						for( int t=0; t<k; ++t )	// t is the number of the point (row of U)
						{
							int jj = offsr + k*i+t;	// selj(t)
							w[ii] += U(t,s)*ww[jj];
						}
					}
				}
				else
				{
					// w(selj) = w(selj) + U(:,k2:k) * ww(seli); 
					for( int t=0; t<k; ++t )
					{
						int jj = offsr + k*i+t;	// selj(t)
						w[jj] = 0;
						for( int s=0; s<k2; ++s )
						{
							int ii = offsr + k2*i+s;	// seli(s)
							w[jj] += U(t,s+k2)*ww[ii];
						}
					}  


					// seli = offs + mj/2+k2*i+(0:k2-1)
					// backward : w(selj) = w(selj) + U(:,0:k2-1) * ww(seli)
					for( int t=0; t<k; ++t )	// t is the number of the point (row of U)
					{
						int jj = offsr + k*i+t;	// selj(t)
						for( int s=0; s<k2; ++s )		// s is the number of the vector (column of U)
						{
							int ii = offsr + mj/2 + k2*i+s;		// seli(s)
							w[jj] += U(t,s)*ww[ii];
						}
					}
				}
			}

		}

	}	GW_DELETEARRAY(ww);	if( destroy_data )	{		// destroy data we are responsible for		GW_DELETEARRAY(G);		GW_DELETEARRAY(si);		for( int i=0; i<P; ++i )			GW_DELETEARRAY(part[i]);
		GW_DELETEARRAY(part);
	}	// delete matrix list array	GW_DELETEARRAY(Uj);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久99国产精品尤物| 欧美成人欧美edvon| 欧美久久免费观看| 久久久久久黄色| 亚洲成人综合网站| 国产69精品久久99不卡| 欧美精品丝袜久久久中文字幕| 精品国产1区二区| 亚洲成人动漫在线观看| 大胆欧美人体老妇| 欧美zozozo| 亚洲丰满少妇videoshd| aa级大片欧美| 久久久精品国产免费观看同学| 丝袜脚交一区二区| 91美女在线观看| 中文字幕一区视频| 国产成人在线网站| 精品国产91亚洲一区二区三区婷婷 | 亚洲午夜精品久久久久久久久| 国产剧情在线观看一区二区| 欧美精品日日鲁夜夜添| 亚洲欧美日本韩国| gogo大胆日本视频一区| 亚洲自拍另类综合| www.成人网.com| 国产精品久久久久影院| 国产一区在线精品| 日韩精品一区二| 美美哒免费高清在线观看视频一区二区 | 国产精品美女久久久久久久网站| 久久se精品一区精品二区| 7777精品伊人久久久大香线蕉超级流畅| 国产精品护士白丝一区av| 成人aaaa免费全部观看| 国产精品久久久久久久浪潮网站| 国产综合色产在线精品| 久久久美女毛片| 国产成人啪免费观看软件| 久久久综合网站| 成人午夜伦理影院| 亚洲婷婷国产精品电影人久久| av电影在线观看不卡| 成人免费在线播放视频| 在线观看日韩电影| 午夜久久久影院| 欧美mv日韩mv亚洲| 国产高清成人在线| 国产精品久久久久久户外露出| 97久久精品人人做人人爽50路| 中文字幕一区二区三区色视频| 9色porny自拍视频一区二区| 亚洲女人****多毛耸耸8| 欧美午夜片在线观看| 日韩精品电影一区亚洲| 337p日本欧洲亚洲大胆精品 | 一区二区三区四区av| 欧美午夜一区二区三区| 捆绑紧缚一区二区三区视频| 欧美不卡一区二区三区| 国产成人h网站| 一二三四社区欧美黄| 欧美一级日韩一级| 国产aⅴ综合色| 一区二区成人在线| 精品少妇一区二区三区日产乱码| 成人午夜视频福利| 一区二区三区鲁丝不卡| 欧美电影免费观看高清完整版在线观看 | 国产不卡免费视频| 夜夜嗨av一区二区三区四季av | 成人动漫av在线| 亚洲综合激情另类小说区| 91精品一区二区三区在线观看| 国产一区久久久| 亚洲美女视频在线观看| 日韩欧美色综合网站| 成人18精品视频| 日本不卡一区二区| 国产精品网站一区| 91精品国产综合久久福利软件| 国产高清成人在线| 日本美女一区二区三区视频| 亚洲视频一区二区在线| 日韩欧美国产综合| 91婷婷韩国欧美一区二区| 久久激情综合网| 亚洲国产另类av| 国产精品免费视频观看| 欧美不卡一区二区| 欧美日本韩国一区| 99久久免费国产| 韩国视频一区二区| 日韩精品免费视频人成| 中文字幕亚洲欧美在线不卡| www久久久久| 7777精品伊人久久久大香线蕉经典版下载| 国产成人精品影院| 久久99最新地址| 日韩极品在线观看| 亚洲一线二线三线久久久| 国产女主播一区| 欧美mv日韩mv亚洲| 日韩视频在线你懂得| 91福利区一区二区三区| 成人爽a毛片一区二区免费| 久久精品国产在热久久| 日韩影院在线观看| 午夜激情久久久| 亚洲午夜在线视频| 一区二区三区在线视频观看58| 国产精品每日更新| 国产精品污www在线观看| 国产日韩精品一区二区三区| 精品免费一区二区三区| 91精品午夜视频| 欧美丰满嫩嫩电影| 91精品久久久久久久99蜜桃| 欧美在线色视频| 欧美日韩亚洲综合在线| 欧美剧情片在线观看| 欧美夫妻性生活| 69堂国产成人免费视频| 91麻豆精品国产| 日韩一级黄色大片| 日韩一区二区三区视频| 日韩欧美一二三| 久久色在线观看| 中文在线资源观看网站视频免费不卡| 欧美电影免费观看高清完整版在线观看 | 久久久久国产精品麻豆ai换脸| 精品国产乱码久久久久久老虎| 精品国产免费人成在线观看| 精品乱人伦一区二区三区| 精品国产不卡一区二区三区| 久久综合久久综合久久综合| 国产欧美一区二区精品久导航| 国产精品网站在线播放| 一区二区三区精品| 水蜜桃久久夜色精品一区的特点| 香蕉久久夜色精品国产使用方法| 日韩电影在线看| 韩国女主播成人在线观看| 国产成人av在线影院| 91丨九色丨蝌蚪富婆spa| 欧美日韩国产系列| 精品国产人成亚洲区| 日韩一区欧美一区| 亚洲成人av福利| 国产精品一级片| 91久久精品一区二区三| 欧美一区二区三区性视频| 国产喷白浆一区二区三区| 一区二区三区国产精品| 美女看a上一区| caoporn国产精品| 欧美一二三四区在线| 国产精品天天摸av网| 亚洲www啪成人一区二区麻豆| 激情久久五月天| 一本到三区不卡视频| 欧美成人一区二区三区片免费 | 亚洲午夜在线视频| 国产一区二区三区在线观看免费视频| 成人h动漫精品一区二区| 欧美丰满嫩嫩电影| 亚洲欧洲日产国产综合网| 热久久免费视频| 91麻豆免费观看| 2020国产精品自拍| 亚洲一区二区四区蜜桃| 丁香婷婷综合色啪| 欧美一区二区视频免费观看| 亚洲视频一区在线观看| 国产一区二区三区电影在线观看| 在线影院国内精品| 久久久99精品久久| 日本成人在线电影网| 色婷婷综合久久久中文字幕| 久久久高清一区二区三区| 日韩中文字幕区一区有砖一区| 99riav一区二区三区| 久久综合久久久久88| 日韩avvvv在线播放| 色94色欧美sute亚洲线路一久| 中文字幕av一区 二区| 黑人巨大精品欧美黑白配亚洲| 欧美日韩视频在线一区二区| 亚洲日本护士毛茸茸| 国产福利91精品| 久久亚洲影视婷婷| 久久精品久久综合| 日韩欧美中文字幕制服| 五月天久久比比资源色| 欧美视频日韩视频在线观看| 亚洲欧美日韩国产一区二区三区| 懂色中文一区二区在线播放| 久久综合九色欧美综合狠狠| 蜜桃视频一区二区| 777午夜精品视频在线播放|