本文整理汇总了C++中linalg::Matrix::getNumberOfColumns方法的典型用法代码示例。如果您正苦于以下问题:C++ Matrix::getNumberOfColumns方法的具体用法?C++ Matrix::getNumberOfColumns怎么用?C++ Matrix::getNumberOfColumns使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类linalg::Matrix
的用法示例。
在下文中一共展示了Matrix::getNumberOfColumns方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: A
void restrictedOptimizationHandler::simplex<Type>::simplexOptimization(const LinAlg::Matrix<Type> &c,
const LinAlg::Matrix<Type> &A,
const LinAlg::Matrix<Type> &b,
LinAlg::Matrix<Type> &B,
LinAlg::Matrix<Type> &N)
{
// %% selecione uma base B e calcule B^-1
LinAlg::Matrix<Type> An = A(from(1)-->A.getNumberOfRows(),N);
LinAlg::Matrix<Type> Ab = A(from(1)-->A.getNumberOfRows(),B);
// std::cout << N << "\n";
LinAlg::Matrix<Type> Abinv = LinAlg::inv_numeric(Ab);
// LinAlg::Matrix<Type> Abinv = (Ab^-1);
LinAlg::Matrix<Type> xb;
// %% Verifique o vetor dos custos reduzidos
for(unsigned terminate = 1; terminate <= 100; ++terminate)
{
LinAlg::Matrix<Type> cn = c(N,1);
LinAlg::Matrix<Type> cb = c(B,1);
LinAlg::Matrix<Type>An = A(from(1)-->A.getNumberOfRows(),N);
Ab = A(from(1)-->A.getNumberOfRows(),B);
LinAlg::Matrix<Type> r = (~cn) - (~cb)*Abinv*An;
this->cost = ((~cb)*Abinv*b)(1,1);
xb = Abinv*b;
unsigned contFlag = 0;
for (unsigned i=1; i <= r.getNumberOfColumns(); ++i)
if(r(1,i) >= 0)
{
contFlag = contFlag + 1;
//% break;
}
if(contFlag == r.getNumberOfColumns())
break;
//%determine o vetor de chegada
unsigned indMinD = LinAlg::lineOfMinValue(~r);
this->x = Abinv*An(from(1)-->An.getNumberOfRows(),indMinD);
LinAlg::Matrix<Type> d = LinAlg::divPoint(xb,this->x);
Type dMin = INFINITY;
unsigned indMinB = 1;
for (unsigned i = 1; i <= d.getNumberOfRows(); ++i)
if(this->x(i,1) > 0 && d(i,1) < dMin)
{
dMin = d(i,1);
indMinB = i;
}
Abinv = EscalSimplex((Abinv | xb | this->x),indMinB);
Type Bout = B(1,indMinB);
Type Nout = N(1,indMinD);
N = N(1,from(1)-->(indMinD-1)) | Bout | N(1, from(indMinD+1)-->(N.getNumberOfColumns()));
B = B(1,from(1)-->(indMinB-1)) | Nout | B(1,from(indMinB+1)-->(B.getNumberOfColumns()));
}
this->x = xb || LinAlg::Zeros<Type>(An.getNumberOfColumns(),1);
LinAlg::Matrix<Type> ind = LinAlg::sortColumnVectorIndices<Type>(B|N);
this->x = this->x(ind,1);
// std::cout << "\n\n" << ind << "\n\n";
N = LinAlg::sortColumnVector<Type>(N);
B = LinAlg::sortColumnVector<Type>(B);
}
示例2: MatrizUni
LinAlg::Matrix<float> SistemasLineares::Gauss(LinAlg::Matrix<float> MatrizUni)
{
LinAlg::Matrix<float> MatrizGauss;
//Laço para contagem das colunas de MatrizUni.
for(unsigned i = 1; i < MatrizUni.getNumberOfColumns(); i++)
{ //Laço para contagem das linhas de MatrizUni.
for(unsigned j = i + 1; j <= MatrizUni.getNumberOfRows(); j++)
{
float m = MatrizUni(j,i)/MatrizUni(i,i);
//Laço para contagem das colunas da equação.
for(unsigned z = i ; z <= MatrizUni.getNumberOfColumns(); z++)
MatrizUni(j,z) = MatrizUni(j,z) - m*MatrizUni(i,z);
}
}
MatrizGauss = LinAlg::Zeros<float>(1, MatrizUni.getNumberOfRows());
float R;
for(unsigned i = 1; i <= MatrizUni.getNumberOfRows(); ++i)
{
unsigned k = MatrizUni.getNumberOfRows() - i + 1;
R = 0;
for(unsigned j = k + 1; j <= MatrizUni.getNumberOfColumns() - 1; ++j)
R = R + MatrizUni(k, j) * MatrizGauss(1, j);
MatrizGauss(1, k) = (MatrizUni(k, MatrizUni.getNumberOfColumns()) - R) / MatrizUni(k, k);
}
return MatrizGauss;
}
示例3: MatrizRes
LinAlg::Matrix<float> SistemasLineares::GaussJacobi(LinAlg::Matrix<float> MatrizUni, unsigned MaxIterations)
{
//Matriz Resposta
LinAlg::Matrix<float> MatrizRes(MaxIterations, MatrizUni.getNumberOfColumns());
LinAlg::Matrix<float> C (MatrizUni.getNumberOfRows(), MatrizUni.getNumberOfColumns() - 1);
LinAlg::Matrix<float> g (MatrizUni.getNumberOfRows(), 1);
LinAlg::Matrix<float> x0(C.getNumberOfColumns(), 1);
// //Deixa o vetor de chute inicial padronizado como vetor linha
if(this->X0.getNumberOfColumns() < this->X0.getNumberOfRows())
~this->X0;
// //Insere o chute inicial na Matriz resposta
for(unsigned i = 1; i < MatrizRes.getNumberOfColumns() - 1; ++i)
x0(1,i) = this->X0(1,i);
//Laço para contar as linhas da MatrizUni e Matriz C.
for(unsigned i = 1; i <= MatrizUni.getNumberOfRows(); ++i)
{ //Laço para contar as colunas da MAtrizUni e Matriz C.
for(unsigned j = 1; j < MatrizUni.getNumberOfColumns(); ++j)
{
if(i != j)
C(i,j) = - MatrizUni(i,j)/MatrizUni(i,i);//Matriz com a diagonal zerada.
}
g(i,1) = MatrizUni(i,MatrizUni.getNumberOfColumns()) / MatrizUni(i,i);//Matriz dos termos independentes.
}
MatrizRes = ~x0;
for(unsigned k = 1; k < MaxIterations; ++k)
{
x0 = (C * x0) + g;
MatrizRes = MatrizRes || ~x0;
}
return MatrizRes;
}
示例4: ret
LinAlg::Matrix<Type> LinAlg::Matrix<Type>::operator|| (LinAlg::Matrix<RightType> rhs)
{
LinAlg::Matrix<Type>ret;
if(this->mat == NULL)
ret = rhs;
else
{
unsigned aux = this->rows;
if(this->columns < rhs.getNumberOfColumns())
ret.Init(this->rows + rhs.getNumberOfRows(), rhs.getNumberOfColumns());
else
ret.Init(this->rows + rhs.getNumberOfRows(), this->columns);
for(unsigned i = 0; i < this->rows; i++)
for(unsigned j = 0; j < this->columns; j++)
ret.mat[i][j] = this->mat[i][j];
for(unsigned i = 1; i <= rhs.getNumberOfRows(); i++)
for(unsigned j = 1; j <= rhs.getNumberOfColumns(); j++)
ret(i + aux, j) = rhs(i, j);
}
return ret;
}
示例5: Den
void PolynomHandler::Polynom<Type>::setDen(LinAlg::Matrix<Type> Den)
{
this->den = initPointer<Type>(Den.getNumberOfColumns());
this->sizeDen = Den.getNumberOfColumns();
for (unsigned i = 0; i < Den.getNumberOfColumns(); ++i)
this->den[i] = Den(1,i+1);
}
示例6: Num
void PolynomHandler::Polynom<Type>::setNum(LinAlg::Matrix<Type> Num)
{
this->num = initPointer<Type>(Num.getNumberOfColumns());
this->sizeNum = Num.getNumberOfColumns();
for (unsigned i = 0; i < Num.getNumberOfColumns(); ++i)
this->num[i] = Num(1,i+1);
}
示例7: temp
LinAlg::Matrix<Type> LinAlg::operator~ (LinAlg::Matrix<Type> mat)
{
LinAlg::Matrix<Type> temp(mat.getNumberOfColumns(), mat.getNumberOfRows());
for(unsigned i = 1; i <= mat.getNumberOfRows(); i++)
for(unsigned j = 1; j <= mat.getNumberOfColumns(); j++)
temp(j, i) = mat(i, j);
return temp;
}
示例8: initPointer
void PolynomHandler::Polynom<Type>::init(LinAlg::Matrix<Type> Num)
{
this->sizeNum = Num.getNumberOfColumns();
this->num = initPointer(Num.getNumberOfColumns());
for (unsigned i = 0; i < Num.getNumberOfColumns(); ++i)
this->num[i] = (Type) Num(1, i+1);
this->sizeDen = 1;
this->den = initPointer<Type>(1);
this->den[0] = 1;
this->x = 'x';
}
示例9: QCustomPlot
void PlotHandler::plot<Type>::generalPlot(LinAlg::Matrix<Type> X, LinAlg::Matrix<Type> Y)
{
// centralWidget = new QWidget(this->properties.MainWindow);
// centralWidget->setGeometry(QRect(this->properties.windowPosX, this->properties.windowPosY, this->properties.windowSizeX, this->properties.windowSizeY));
customPlot = new QCustomPlot(this->properties.PlotFrame);
customPlot->setGeometry(QRect(0, 0,this->properties.PlotFrame->geometry().width(), this->properties.PlotFrame->geometry().height()));
// add title layout element:
if(this->properties.titleFlag)
{
customPlot->plotLayout()->insertRow(0);
customPlot->plotLayout()->addElement(0, 0, new QCPPlotTitle(this->customPlot, this->properties.title.c_str()));
}
if(X.getNumberOfColumns() == Y.getNumberOfColumns() && X.getNumberOfRows() == Y.getNumberOfRows())
{
this->properties.rows = X.getNumberOfRows();
this->properties.columns = X.getNumberOfColumns();
// this->setLegend();
QPen pen;
// add graphs with different scatter styles:
for (unsigned i = 0; i < this->properties.rows; ++i)
{
customPlot->addGraph();
pen.setColor(QColor(qSin(i*0.3)*100+100, qSin(i*0.6+0.7)*100+100, qSin(i*0.4+0.6)*100+100));
// generate data:
QVector<double> x(this->properties.columns), y(this->properties.columns);
for (unsigned k = 0; k < this->properties.columns; ++k)
{
x[k] = X(i+1,k+1);
y[k] = Y(i+1,k+1);
}
customPlot->graph()->setData(x, y);
customPlot->graph()->rescaleAxes(true);
customPlot->graph()->setPen(pen);
if(this->properties.variablesNameFlag)
customPlot->graph()->setName("Grafico" + QString::number(i+1));
customPlot->graph()->setLineStyle(QCPGraph::lsLine);
if(this->properties.xLabelFlag)
customPlot->xAxis->setLabel(this->properties.xLabel.c_str());
if(this->properties.yLabelFlag)
customPlot->yAxis->setLabel(this->properties.yLabel.c_str());
// set scatter style:
}
}
customPlot->rescaleAxes();
}
示例10: ret
LinAlg::Matrix<Type> PolynomHandler::MultPoly(const LinAlg::Matrix<Type> &lhs, const LinAlg::Matrix<Type> &rhs)
{
unsigned lhsSize = lhs.getNumberOfColumns();
unsigned rhsSize = rhs.getNumberOfColumns();
LinAlg::Matrix<Type>ret(1,lhsSize+rhsSize+1);
for(unsigned i = 0; i < lhsSize; ++i)
for(unsigned j = 0; j < rhsSize; ++j)
{
ret(1,i+j+1) = ret(1,i+j+1) + lhs(1,i+1)*rhs(1,j+1);
}
return ret;
}
示例11: Balance
void LinAlg::Balance (LinAlg::Matrix<Type> &matrix_to_balance)
{
unsigned aux = 0;
Type radix = FLT_RADIX, sqrdx = radix*radix, s, r, g, f, c;
while(aux == 0)
{
aux = 1;
for(unsigned i = 1; i <= matrix_to_balance.getNumberOfRows(); i++)
{
r = c = 0.0;
for(unsigned j = 1; j <= matrix_to_balance.getNumberOfColumns(); j++)
if( j != i)
{
c += std::fabs(matrix_to_balance(j, i));
r += std::fabs(matrix_to_balance(i, j));
}
if(c && r)
{
g = r/radix;
f = 1.0;
s = c + r;
while(c < g)
{
f *= radix;
c *= sqrdx;
}
g = r*radix;
while(c > g)
{
f /= radix;
c /= sqrdx;
}
if((c + r)/f < 0.95*s)
{
aux = 0;
g = 1.0/f;
for(unsigned j = 1; j <= matrix_to_balance.getNumberOfColumns(); j++)
{
matrix_to_balance(i, j) *= g;
matrix_to_balance(j, i) *= f;
}
}
}
}
}
}
示例12: Trace
Type LinAlg::Trace (const LinAlg::Matrix<Type>& mat)
{
Type ret = 0;
if(mat.getNumberOfRows() != mat.getNumberOfColumns())
std::cout << "O traco so e calculado para matrizes quadradas.";
else
{
for(unsigned i = 1; i <= mat.getNumberOfRows(); i++)
for(unsigned j = 1; j <= mat.getNumberOfColumns(); j++)
if(i == j)
ret += mat(i, j);
}
return ret;
}
示例13: LU_Factorization
void SistemasLineares::LU_Factorization(LinAlg::Matrix<float> Matriz, LinAlg::Matrix<float> &L, LinAlg::Matrix<float> &U)//Para Matriz Quadrada.
{
L = LinAlg::Eye<float>(Matriz.getNumberOfRows());
for(unsigned i = 1; i < Matriz.getNumberOfColumns(); ++i)
{ //Laço para contagem das linhas de MatrizUni.
for(unsigned j = i + 1; j <= Matriz.getNumberOfRows(); ++j)
{
L(j, i) = Matriz(j, i)/Matriz(i, i);
//Laço para contagem das colunas da equação.
for(unsigned z = i ; z <= Matriz.getNumberOfColumns(); ++z)
Matriz(j, z) = Matriz(j, z) - L(j, i)*Matriz(i, z);
}
}
U = Matriz;
}
示例14: EigenValues
LinAlg::Matrix<Type> LinAlg::CaracteristicPolynom (const LinAlg::Matrix<Type>& mat)
{
unsigned n = mat.getNumberOfColumns();
Matrix<Type> z = EigenValues(mat);
Matrix<Type> zi = EigenValues(mat);
Matrix<Type> ret(1,n+1);
std::complex<Type> *tempPoly = new std::complex<Type> [2];
tempPoly[0] = 1;
tempPoly[1] = std::complex<Type>(-z(1,1),-z(1,2));
std::complex<Type> * tempPolyEigenvalue = new std::complex<Type>[2];
unsigned sizeTempPoly = 2;
tempPolyEigenvalue[0] = 1;
for(unsigned i = 2; i <= n ; ++i)
{
tempPolyEigenvalue[1] = std::complex<Type>(-z(i,1),-z(i,2));//apos o templade entre (real,imaginario) atribuição
tempPoly = LinAlg::MultPoly(tempPoly,tempPolyEigenvalue,sizeTempPoly,2);
sizeTempPoly++;
}
for(unsigned i = 0; i < sizeTempPoly ; ++i)
{
ret(1,i+1) = tempPoly[i].real();
}
return ret;
}
示例15:
void PlotHandler::plot<Type>::realTimeDataUpdate(LinAlg::Matrix<Type> X, LinAlg::Matrix<Type> Y)
{
for(unsigned i = 1; i <= X.getNumberOfColumns(); i++)
{
this->realTimeDataUpdate(X(1,i),Y(1,i));
}
}