当前位置: 首页>>代码示例>>C++>>正文


C++ matrix::AsPointer方法代码示例

本文整理汇总了C++中matrix::AsPointer方法的典型用法代码示例。如果您正苦于以下问题:C++ matrix::AsPointer方法的具体用法?C++ matrix::AsPointer怎么用?C++ matrix::AsPointer使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在matrix的用法示例。


在下文中一共展示了matrix::AsPointer方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: MatrixConjugateGradient

///////////////////////////////////////////////////////////////////
// Employs the Conjugant Gradient method to solve A x = b.
matrix MatrixConjugateGradient(matrix &A, matrix b)
{
	register int i, k, rows, columns;

	register double scale, Rdot, RdotOld;

	matrix x, r, d, tmp;
	register double *Aptr;

	x = RandomVector( A.high() );
	r =   matrix( A.high() );
	d =   matrix( A.high() );
	tmp = matrix( A.high() );

	if (  x.isValid() && r.isValid() 
	   && d.isValid() && tmp.isValid() )
	{
		rows = A.high();
		columns = A.wide();
		Aptr = A.AsPointer();
		for (i = 0; i < rows; i++)
		{
			r(i) = b(i)  - MtrxAccumProd(Aptr, columns, 1, x.AsPointer(), 1);
			d(i) = r(i);
			Aptr += columns;
		}

		Rdot = MtrxAccumProd(r.AsPointer(), rows, 1, r.AsPointer(), 1);

		for (k = 0; k < rows; k++)
		{
			tmp = A*d;
			scale = Rdot / MtrxAccumProd(d.AsPointer(), rows, 1, tmp.AsPointer(), 1);

			x = x + (d*scale);   //  MtrxLineAdd(x->data, rows, 1, d, 1, scale);
			r = r - (tmp*scale); //  MtrxLineAdd(r, rows, 1, tmp, 1, -scale);

			RdotOld = Rdot;
			Rdot = MtrxAccumProd(r.AsPointer(), rows, 1, r.AsPointer(), 1);

			d = d * ( Rdot / RdotOld );
			d = d + r; // MtrxLineAdd(d, rows, 1, r, 1, 1.0);

		}

	}

	return x;

}
开发者ID:hansdg1,项目名称:HansGuthrie.ECE540.Project2,代码行数:52,代码来源:matrix.cpp


注:本文中的matrix::AsPointer方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。