本文整理汇总了C++中math::Matrix::inv方法的典型用法代码示例。如果您正苦于以下问题:C++ Matrix::inv方法的具体用法?C++ Matrix::inv怎么用?C++ Matrix::inv使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类math::Matrix
的用法示例。
在下文中一共展示了Matrix::inv方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
void CalibrationWnd::calcAdcI2Curr()
{
// Make linear assumption, e.i.
//I = a*adc + b*1;
Math::Matrix<2> XtX;
Math::Vector<2> XtY;
int sz = adcI.size();
for ( int i=0; i<2; i++ )
{
QVector<int> * a;
if ( i==0 )
a = &adcI;
else
a = 0;
for ( int j=0; j<2; j++ )
{
QVector<int> * b;
if ( j==0 )
b = &adcI;
else
b = 0;
qreal v = 0.0;
for ( int k=0; k<sz; k++ )
{
qreal va = ( a ) ? a->at( k ) : 1.0;
qreal vb = ( b ) ? b->at( k ) : 1.0;
v += va * vb;
}
XtX[i][j] = v;
}
qreal v = 0.0;
for ( int k=0; k<sz; k++ )
{
qreal va = ( a ) ? a->at( k ) : 1.0;
qreal vy = curr.at( k );
v += va * vy;
}
XtY[i] = v;
}
// A = (XtX)^-1 * XtY;
Math::Matrix<2> invXtX;
invXtX = XtX.inv();
Math::Vector<2> A;
for ( int i=0; i<2; i++ )
{
qreal v = 0.0;
for ( int j=0; j<2; j++ )
{
v += invXtX[i][j] * XtY[j];
}
A[i] = v;
}
aAdcI = A[0];
bAdcI = A[1];
}
示例2: if
void CalibrationWnd::calcDac2Volt()
{
// Make linear assumption, e.i.
//V = a*dacLow + b*dacHigh + c*1;
Math::Matrix<> XtX;
Math::Vector<> XtY;
int sz = dacLowV.size();
for ( int i=0; i<3; i++ )
{
QVector<int> * a;
if ( i==0 )
a = &dacLowV;
else if ( i==1 )
a = &dacHighV;
else
a = 0;
for ( int j=0; j<3; j++ )
{
QVector<int> * b;
if ( j==0 )
b = &dacLowV;
else if ( j==1 )
b = &dacHighV;
else
b = 0;
qreal v = 0.0;
for ( int k=0; k<sz; k++ )
{
qreal va = ( a ) ? a->at( k ) : 1.0;
qreal vb = ( b ) ? b->at( k ) : 1.0;
v += va * vb;
}
XtX[i][j] = v;
}
qreal v = 0.0;
for ( int k=0; k<sz; k++ )
{
qreal va = ( a ) ? a->at( k ) : 1.0;
qreal vy = volt.at( k );
v += va * vy;
}
XtY[i] = v;
}
// A = (XtX)^-1 * XtY;
Math::Matrix<> invXtX;
invXtX = XtX.inv();
Math::Vector<> A;
for ( int i=0; i<3; i++ )
{
qreal v = 0.0;
for ( int j=0; j<3; j++ )
{
v += invXtX[i][j] * XtY[j];
}
A[i] = v;
}
aDacLow = A[0];
aDacHigh = A[1];
bDac = A[2];
}