Index: genericFunctions.cpp
===================================================================
--- genericFunctions.cpp	(revision dfabbb4ad6992bc0518565ee160fc669bb08493f)
+++ genericFunctions.cpp	(revision b0c244f1a544b2fbdc738c06eda120ab0050e0a9)
@@ -7,4 +7,6 @@
 */
 #include <genericFunctions.h>
+
+using namespace Eigen;
 
 
@@ -79,5 +81,9 @@
         {
             int contar = CuentaFila.count(accName);
-            tw->setSpan(i,0,contar,1);
+            qDebug()<<contar;
+            if(contar>1)
+            {
+                tw->setSpan(i,0,contar,1);
+            }
             CuentaFila.removeAll(accName);
         }
@@ -94,5 +100,9 @@
         {
             int contar = CuentaColumna.count(accName);
-            tw->setSpan(0,j,1,contar);
+            qDebug()<<contar;
+            if(contar>1)
+            {
+                tw->setSpan(0,j,1,contar);
+            }
             CuentaColumna.removeAll(accName);
         }
@@ -400,5 +410,5 @@
 
 /**
-   @brief Funcion que permite
+   @brief Funcion que permite colocar filas/columnas como no editables
    @date 08/09/2016
    @author Rodrigo Boet
@@ -429,2 +439,103 @@
 }
 
+/**
+   @brief Funcion que extraer una submatriz de una tabla
+   @date 27/09/2016
+   @author Rodrigo Boet
+   @param <tw> Recibe el widget de la tabla
+   @param <nombre_fila> Recibe el nombre de la cuenta en fila
+   @param <nombre_columna> Recibe el nombre de la cuenta en columna
+   @param <matriz> Recibe la sub-matriz de donde se sacarán los valores
+   @return <result> Retorna la sub-matriz
+*/
+Eigen::MatrixXd extractSubMatriz(QTableWidget *tw, QString nombre_fila, QString nombre_columna, Eigen::MatrixXd Matrix)
+{
+    int rows = tw->rowCount();
+    Eigen::MatrixXd result;
+    int pos = 0;
+    for(int i = 2; i < rows ;i++)
+    {
+        bool entro = false;
+        int cant = 0;
+        QVector <double> values;
+        for(int j = 2; j < rows;j++)
+        {
+            if(tw->item(0,i)->text()==nombre_fila and tw->item(j,0)->text()==nombre_columna)
+            {
+                entro = true;
+                double value = Matrix(i-2,j-2);
+                values.append(value);
+                cant++;
+            }
+        }
+        if(entro)
+        {
+            result.resize(cant,cant);
+            for(int k=0;k<values.count();k++)
+            {
+                result(pos,k) = values.at(k);
+            }
+            pos++;
+        }
+    }
+    return result;
+}
+
+/**
+   @brief Funcion que extraer la diagonal principal de una matriz de Eigen
+   @date 28/09/2016
+   @author Rodrigo Boet
+   @param <matriz> Recibe la sub-matriz de donde se sacarán los valores
+   @return <resul> Retorna la suma de la diagonal
+*/
+QVector<double> extractDiagonal(Eigen::MatrixXd Matrix)
+{
+    QVector<double> result;
+    for(int i=0;i<Matrix.rows();i++)
+    {
+        for(int j=0;j<Matrix.rows();j++)
+        {
+            if(i==j)
+            {
+                result.append(Matrix(i,j));
+            }
+        }
+    }
+    return result;
+}
+
+/**
+   @brief Funcion que valida que la diagonal sea distinta de cero
+   @date 28/09/2016
+   @author Rodrigo Boet
+   @param <diagonal> Recibe el vector con la diagonal
+   @return <valida> Retorna verdadero si la diagonal es distinta de cero, falso en caso contrario
+*/
+bool validarDiagonal(QVector<double> diagonal)
+{
+    int count = diagonal.count();
+    bool valida = true;
+    for(int i=0;i<count;i++)
+    {
+        if(qAbs(diagonal.at(i))<0.00001)
+        {
+            valida = false;
+        }
+    }
+    return valida;
+}
+
+/**
+   @brief Funcion para llenar un vector con otro
+   @date 28/09/2016
+   @author Rodrigo Boet
+   @param <elements> Recibe el vector con los elementos
+   @param <vector> Recibe el vector que se llenara
+*/
+void appendElements(QVector<double> elements, QVector<double> &vector)
+{
+    foreach (double value, elements) {
+        vector.append(value);
+    }
+}
+
