本文整理汇总了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;
}