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

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

?? lanczos.c

?? Meschach 可以解稠密或稀疏線性方程組、計算特征值和特征向量和解最小平方問題
?? C
字號:

/**************************************************************************
**
** Copyright (C) 1993 David E. Steward & Zbigniew Leyk, all rights reserved.
**
**			     Meschach Library
** 
** This Meschach Library is provided "as is" without any express 
** or implied warranty of any kind with respect to this software. 
** In particular the authors shall not be liable for any direct, 
** indirect, special, incidental or consequential damages arising 
** in any way from use of the software.
** 
** Everyone is granted permission to copy, modify and redistribute this
** Meschach Library, provided:
**  1.  All copies contain this copyright notice.
**  2.  All modified copies shall carry a notice stating who
**      made the last modification and the date of such modification.
**  3.  No charge is made for this software or works derived from it.  
**      This clause shall not be construed as constraining other software
**      distributed on the same medium as this software, nor is a
**      distribution fee considered a charge.
**
***************************************************************************/


/*
	File containing Lanczos type routines for finding eigenvalues
	of large, sparse, symmetic matrices
*/

#include	<stdio.h>
#include	<math.h>
#include	"matrix.h"
#include	"sparse.h"

static char rcsid[] = "$Id: lanczos.c,v 1.4 1994/01/13 05:28:24 des Exp $";

#ifdef ANSI_C
extern	VEC	*trieig(VEC *,VEC *,MAT *);
#else
extern	VEC	*trieig();
#endif

/* lanczos -- raw lanczos algorithm -- no re-orthogonalisation
	-- creates T matrix of size == m,
		but no larger than before beta_k == 0
	-- uses passed routine to do matrix-vector multiplies */
void	lanczos(A_fn,A_params,m,x0,a,b,beta2,Q)
VEC	*(*A_fn)();	/* VEC *(*A_fn)(void *A_params,VEC *in, VEC *out) */
void	*A_params;
int	m;
VEC	*x0, *a, *b;
Real	*beta2;
MAT	*Q;
{
	int	j;
	VEC	*v, *w, *tmp;
	Real	alpha, beta;

	if ( ! A_fn || ! x0 || ! a || ! b )
		error(E_NULL,"lanczos");
	if ( m <= 0 )
		error(E_BOUNDS,"lanczos");
	if ( Q && ( Q->m < x0->dim || Q->n < m ) )
		error(E_SIZES,"lanczos");

	a = v_resize(a,(unsigned int)m);
	b = v_resize(b,(unsigned int)(m-1));
	v = v_get(x0->dim);
	w = v_get(x0->dim);
	tmp = v_get(x0->dim);

	beta = 1.0;
	/* normalise x0 as w */
	sv_mlt(1.0/v_norm2(x0),x0,w);

	(*A_fn)(A_params,w,v);

	for ( j = 0; j < m; j++ )
	{
		/* store w in Q if Q not NULL */
		if ( Q )
		    set_col(Q,j,w);

		alpha = in_prod(w,v);
		a->ve[j] = alpha;
		v_mltadd(v,w,-alpha,v);
		beta = v_norm2(v);
		if ( beta == 0.0 )
		{
		    v_resize(a,(unsigned int)j+1);
		    v_resize(b,(unsigned int)j);
		    *beta2 = 0.0;
		    if ( Q )
			Q = m_resize(Q,Q->m,j+1);
		    return;
		}
		if ( j < m-1 )
		    b->ve[j] = beta;
		v_copy(w,tmp);
		sv_mlt(1/beta,v,w);
		sv_mlt(-beta,tmp,v);
		(*A_fn)(A_params,w,tmp);
		v_add(v,tmp,v);
	}
	*beta2 = beta;


	V_FREE(v);	V_FREE(w);	V_FREE(tmp);
}

extern	double	frexp(), ldexp();

/* product -- returns the product of a long list of numbers
	-- answer stored in mant (mantissa) and expt (exponent) */
static	double	product(a,offset,expt)
VEC	*a;
double	offset;
int	*expt;
{
	Real	mant, tmp_fctr;
	int	i, tmp_expt;

	if ( ! a )
		error(E_NULL,"product");

	mant = 1.0;
	*expt = 0;
	if ( offset == 0.0 )
		for ( i = 0; i < a->dim; i++ )
		{
			mant *= frexp(a->ve[i],&tmp_expt);
			*expt += tmp_expt;
			if ( ! (i % 10) )
			{
			    mant = frexp(mant,&tmp_expt);
			    *expt += tmp_expt;
			}
		}
	else
		for ( i = 0; i < a->dim; i++ )
		{
			tmp_fctr = a->ve[i] - offset;
			tmp_fctr += (tmp_fctr > 0.0 ) ? -MACHEPS*offset :
							 MACHEPS*offset;
			mant *= frexp(tmp_fctr,&tmp_expt);
			*expt += tmp_expt;
			if ( ! (i % 10) )
			{
			    mant = frexp(mant,&tmp_expt);
			    *expt += tmp_expt;
			}
		}

	mant = frexp(mant,&tmp_expt);
	*expt += tmp_expt;

	return mant;
}

/* product2 -- returns the product of a long list of numbers
	-- answer stored in mant (mantissa) and expt (exponent) */
static	double	product2(a,k,expt)
VEC	*a;
int	k;	/* entry of a to leave out */
int	*expt;
{
	Real	mant, mu, tmp_fctr;
	int	i, tmp_expt;

	if ( ! a )
		error(E_NULL,"product2");
	if ( k < 0 || k >= a->dim )
		error(E_BOUNDS,"product2");

	mant = 1.0;
	*expt = 0;
	mu = a->ve[k];
	for ( i = 0; i < a->dim; i++ )
	{
		if ( i == k )
			continue;
		tmp_fctr = a->ve[i] - mu;
		tmp_fctr += ( tmp_fctr > 0.0 ) ? -MACHEPS*mu : MACHEPS*mu;
		mant *= frexp(tmp_fctr,&tmp_expt);
		*expt += tmp_expt;
		if ( ! (i % 10) )
		{
		    mant = frexp(mant,&tmp_expt);
		    *expt += tmp_expt;
		}
	}
	mant = frexp(mant,&tmp_expt);
	*expt += tmp_expt;

	return mant;
}

/* dbl_cmp -- comparison function to pass to qsort() */
static	int	dbl_cmp(x,y)
Real	*x, *y;
{
	Real	tmp;

	tmp = *x - *y;
	return (tmp > 0 ? 1 : tmp < 0 ? -1: 0);
}

/* lanczos2 -- lanczos + error estimate for every e-val
	-- uses Cullum & Willoughby approach, Sparse Matrix Proc. 1978
	-- returns multiple e-vals where multiple e-vals may not exist
	-- returns evals vector */
VEC	*lanczos2(A_fn,A_params,m,x0,evals,err_est)
VEC	*(*A_fn)();
void	*A_params;
int	m;
VEC	*x0;		/* initial vector */
VEC	*evals;		/* eigenvalue vector */
VEC	*err_est;	/* error estimates of eigenvalues */
{
	VEC		*a;
	STATIC	VEC	*b=VNULL, *a2=VNULL, *b2=VNULL;
	Real	beta, pb_mant, det_mant, det_mant1, det_mant2;
	int	i, pb_expt, det_expt, det_expt1, det_expt2;

	if ( ! A_fn || ! x0 )
		error(E_NULL,"lanczos2");
	if ( m <= 0 )
		error(E_RANGE,"lanczos2");

	a = evals;
	a = v_resize(a,(unsigned int)m);
	b = v_resize(b,(unsigned int)(m-1));
	MEM_STAT_REG(b,TYPE_VEC);

	lanczos(A_fn,A_params,m,x0,a,b,&beta,MNULL);

	/* printf("# beta =%g\n",beta); */
	pb_mant = 0.0;
	if ( err_est )
	{
		pb_mant = product(b,(double)0.0,&pb_expt);
		/* printf("# pb_mant = %g, pb_expt = %d\n",pb_mant, pb_expt); */
	}

	/* printf("# diags =\n");	out_vec(a); */
	/* printf("# off diags =\n");	out_vec(b); */
	a2 = v_resize(a2,a->dim - 1);
	b2 = v_resize(b2,b->dim - 1);
	MEM_STAT_REG(a2,TYPE_VEC);
	MEM_STAT_REG(b2,TYPE_VEC);
	for ( i = 0; i < a2->dim - 1; i++ )
	{
		a2->ve[i] = a->ve[i+1];
		b2->ve[i] = b->ve[i+1];
	}
	a2->ve[a2->dim-1] = a->ve[a2->dim];

	trieig(a,b,MNULL);

	/* sort evals as a courtesy */
	qsort((void *)(a->ve),(int)(a->dim),sizeof(Real),(int (*)())dbl_cmp);

	/* error estimates */
	if ( err_est )
	{
		err_est = v_resize(err_est,(unsigned int)m);

		trieig(a2,b2,MNULL);
		/* printf("# a =\n");	out_vec(a); */
		/* printf("# a2 =\n");	out_vec(a2); */

		for ( i = 0; i < a->dim; i++ )
		{
			det_mant1 = product2(a,i,&det_expt1);
			det_mant2 = product(a2,(double)a->ve[i],&det_expt2);
			/* printf("# det_mant1=%g, det_expt1=%d\n",
					det_mant1,det_expt1); */
			/* printf("# det_mant2=%g, det_expt2=%d\n",
					det_mant2,det_expt2); */
			if ( det_mant1 == 0.0 )
			{   /* multiple e-val of T */
			    err_est->ve[i] = 0.0;
			    continue;
			}
			else if ( det_mant2 == 0.0 )
			{
			    err_est->ve[i] = HUGE_VAL;
			    continue;
			}
			if ( (det_expt1 + det_expt2) % 2 )
			    /* if odd... */
			    det_mant = sqrt(2.0*fabs(det_mant1*det_mant2));
			else /* if even... */
			    det_mant = sqrt(fabs(det_mant1*det_mant2));
			det_expt = (det_expt1+det_expt2)/2;
			err_est->ve[i] = fabs(beta*
				ldexp(pb_mant/det_mant,pb_expt-det_expt));
		}
	}

#ifdef	THREADSAFE
	V_FREE(b);	V_FREE(a2);	V_FREE(b2);
#endif

	return a;
}

/* sp_lanczos -- version that uses sparse matrix data structure */
void    sp_lanczos(A,m,x0,a,b,beta2,Q)
SPMAT	*A;
int     m;
VEC     *x0, *a, *b;
Real  *beta2;
MAT     *Q;
{	lanczos(sp_mv_mlt,A,m,x0,a,b,beta2,Q);	}

/* sp_lanczos2 -- version of lanczos2() that uses sparse matrix data
					structure */
VEC	*sp_lanczos2(A,m,x0,evals,err_est)
SPMAT	*A;
int	m;
VEC	*x0;		/* initial vector */
VEC	*evals;		/* eigenvalue vector */
VEC	*err_est;	/* error estimates of eigenvalues */
{	return lanczos2(sp_mv_mlt,A,m,x0,evals,err_est);	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产一区久久| 精品视频资源站| 中文字幕一区二区视频| 成人av在线电影| 亚洲免费高清视频在线| 欧美午夜在线一二页| 日韩va欧美va亚洲va久久| 欧美大片日本大片免费观看| 国产九色sp调教91| 中文字幕一区二区三区在线播放| 91蜜桃网址入口| 图片区小说区区亚洲影院| 欧美刺激午夜性久久久久久久| 国产精品99久久久久久似苏梦涵| 国产精品久久久久久久岛一牛影视| 91精品国产福利| 五月综合激情日本mⅴ| 欧美tk丨vk视频| 99re热视频精品| 奇米888四色在线精品| 久久―日本道色综合久久| 99久久久无码国产精品| 日韩精彩视频在线观看| 久久精品人人做人人爽97| 色乱码一区二区三区88| 麻豆成人综合网| 国产精品福利在线播放| 欧美一区二区三区四区五区| 国产大片一区二区| 亚洲成av人片www| 国产精品水嫩水嫩| 51精品秘密在线观看| av中文字幕亚洲| 奇米综合一区二区三区精品视频| 中文字幕第一区二区| 欧美精品色综合| 成人18精品视频| 韩国毛片一区二区三区| 亚洲大尺度视频在线观看| 国产农村妇女毛片精品久久麻豆| 欧美亚洲动漫精品| 成人国产精品视频| 九九精品一区二区| 五月综合激情网| 亚洲另类在线视频| 国产精品白丝在线| 久久久国产精品麻豆| 91精品国产91久久久久久最新毛片| 国产成人av福利| 久久99精品久久久久久国产越南| 亚洲综合男人的天堂| 国产精品久久久久婷婷二区次 | 国产成人在线视频网址| 天堂蜜桃91精品| 亚洲日韩欧美一区二区在线| 久久综合狠狠综合久久综合88| 欧美日韩dvd在线观看| 色综合久久66| 91丨porny丨户外露出| 国产风韵犹存在线视精品| 精品夜夜嗨av一区二区三区| 视频一区欧美精品| 亚洲在线中文字幕| 一区二区免费看| 亚洲综合丝袜美腿| 一区二区三区在线视频观看58| 国产精品久久久久久久裸模| 久久久久久久久久久久电影 | 亚洲精品在线观| 欧美一区二区三区四区高清| 欧美日韩小视频| 色94色欧美sute亚洲13| 成人激情电影免费在线观看| 国产福利一区二区三区视频 | 91福利国产成人精品照片| 99国产精品久久久久| 成人黄色一级视频| 99热这里都是精品| 一本色道久久综合亚洲91 | 国产精品女人毛片| 亚洲国产成人自拍| 亚洲人成电影网站色mp4| 亚洲欧美激情在线| 亚洲制服欧美中文字幕中文字幕| 一区二区三区在线视频观看58| 艳妇臀荡乳欲伦亚洲一区| 亚洲综合av网| 蜜桃av噜噜一区| 国产福利精品一区| 91网站黄www| 欧美日韩国产综合久久| 91精品国产欧美一区二区| 日韩一区和二区| 国产欧美一区二区三区在线老狼| 国产精品美女久久久久aⅴ| 国产精品免费丝袜| 亚洲成a人v欧美综合天堂下载| 日本va欧美va瓶| 国产盗摄精品一区二区三区在线| 99精品黄色片免费大全| 欧美日韩在线亚洲一区蜜芽| 欧美一区二区久久| 日本一区二区免费在线| 亚洲在线视频免费观看| 另类调教123区| 972aa.com艺术欧美| 欧美日本精品一区二区三区| www国产成人免费观看视频 深夜成人网| 国产人成亚洲第一网站在线播放 | 天天色综合天天| 国产精品综合av一区二区国产馆| 成人激情免费网站| 91精品婷婷国产综合久久| 亚洲精品一区二区三区99| 成人免费在线观看入口| 日韩中文字幕av电影| 成人v精品蜜桃久久一区| 欧美日本乱大交xxxxx| 国产日韩欧美激情| 青草av.久久免费一区| 99久久99久久免费精品蜜臀| 日韩一区二区三区视频| 亚洲欧美日韩国产成人精品影院| 日韩激情av在线| 91欧美一区二区| 2020国产精品久久精品美国| 亚洲综合一区二区| 国产99久久久久| 欧美一区二区三区免费| 一区二区三区国产精华| 国产一区二区精品久久| 欧美日韩国产片| 亚洲色图欧美偷拍| 国产在线不卡一卡二卡三卡四卡| 91福利在线免费观看| 国产欧美精品国产国产专区| 日韩高清中文字幕一区| 99vv1com这只有精品| 久久久亚洲高清| 免费高清视频精品| 欧美色综合影院| 亚洲天堂久久久久久久| 国产成人av一区二区三区在线观看| 欧美日韩国产在线观看| 一区二区不卡在线播放| 成人av资源网站| 国产精品私人影院| 国产一区二区不卡在线 | 国产福利不卡视频| 日韩精品自拍偷拍| 日日夜夜一区二区| 欧美日韩性生活| 亚洲一区av在线| 色94色欧美sute亚洲线路一久| ㊣最新国产の精品bt伙计久久| 国产乱子伦一区二区三区国色天香| 欧美女孩性生活视频| 一区二区三区欧美久久| 日本韩国精品在线| 亚洲蜜臀av乱码久久精品蜜桃| thepron国产精品| 国产欧美久久久精品影院| 国产成人av在线影院| 中文字幕乱码久久午夜不卡| 国产精品一区在线| 欧美国产禁国产网站cc| 成人在线综合网站| 中文字幕一区二区三区四区| 99亚偷拍自图区亚洲| 亚洲六月丁香色婷婷综合久久 | 成人教育av在线| 亚洲欧洲精品天堂一级| 91在线精品秘密一区二区| 亚洲日本一区二区| 欧美自拍丝袜亚洲| 亚洲高清在线视频| 91精品国产综合久久久久久| 热久久一区二区| 久久众筹精品私拍模特| 成人激情午夜影院| 亚洲一区在线观看免费观看电影高清 | 五月天久久比比资源色| 在线不卡免费欧美| 美女网站视频久久| 久久久www成人免费毛片麻豆 | 国产亚洲精品超碰| 不卡av在线免费观看| 亚洲第四色夜色| 日韩午夜av一区| 成人小视频在线| 亚洲福利国产精品| 精品88久久久久88久久久| av午夜精品一区二区三区| 亚洲一二三四区不卡| 欧美成人性福生活免费看| 成人精品一区二区三区中文字幕| 亚洲线精品一区二区三区| 精品国产欧美一区二区| av午夜精品一区二区三区| 天天免费综合色|