Changeset b0c244f in mmcs for mainwindow.C


Ignore:
Timestamp:
Sep 28, 2016, 3:44:48 PM (8 years ago)
Author:
rudmanmrrod <rudman22@…>
Branches:
master
Children:
f2dac89
Parents:
b23848e
Message:

Agregado el modulo de descomposicion

File:
1 edited

Legend:

Unmodified
Added
Removed
  • mainwindow.C

    rb23848e rb0c244f  
    99
    1010#include "mainwindow.H"
    11 #include "accountwidget.H"
    12 #include "stackvariablesexogenas.h"
    13 #include "formexportmatrix.h"
    14 #include <stackencadenamientos.h>
    1511#include <QDebug>
    1612
     
    387383    menuTools.addAction(&actionVariableExogena);
    388384
     385    //Se agrega la acción de descomposición
     386    actionDescomposicion.setText("&Descomposicion");
     387    actionDescomposicion.setDisabled(true);
     388
     389    menuTools.addAction(&actionDescomposicion);
     390
    389391    Modelos.setTitle("&Modelos");
    390392    Modelos.setDisabled(true);
     
    797799            vector.append(QString::number(inicio));
    798800            vector.append(QString::number(fin));
    799             tw->setSpan(0,inicio-1,1,numberAccounts.count(item));
    800             tw->setSpan(inicio-1,0,numberAccounts.count(item),1);
     801            if(numberAccounts.count(item)>1)
     802            {
     803                tw->setSpan(0,inicio-1,1,numberAccounts.count(item));
     804                tw->setSpan(inicio-1,0,numberAccounts.count(item),1);
     805            }
    801806        }
    802807    }
     
    906911MainWindow::MainWindow()
    907912    : actionNewProject(this),actionLoadMatrix(this), actionExportMatrix(this), actionQuit(this),actionCH(this), actionCV(this),
    908       actionVariableExogena(this),actionEncadenamiento(this),actionModeloClasico(this),
     913      actionVariableExogena(this),actionEncadenamiento(this),actionModeloClasico(this), actionDescomposicion(this),
    909914      actionCompararResultados(this),actionModeloNoClasico(this),actionCompararResultadosMNC(this),actionPHClasicoIncidencia100(this),
    910915      actionPHCIncidenciaCuenta(this),actionPHCIncidenciaComponente(this),actionPHNoClasicoIncidencia100(this),actionPHNCIncidenciaCuenta(this),
     
    22112216
    22122217        //Se crea la nueva pestaña
    2213         tabWidget->addTab(new QWidget,"Tipo de Variable");
    2214         int indice=ObtenerIndice("Tipo de Variable");//Se obtiene el indice de la pestaña
    2215         QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
    2216         layoutCentralWidget->addWidget(tablaEE);
    2217         QWidget *widget = tabWidget->widget(indice);
    2218         widget->setLayout(layoutCentralWidget);//Se añade el widget y layout a la pestaña creada
     2218        createTab("Tipo de Variable",tablaEE);
     2219        int indice=ObtenerIndice("Tipo de Variable");
    22192220        formVariablesExogenas->close();
    22202221
    22212222        /*                  Se crea la pestaña endogena-endogena            */
    2222         tabWidget->addTab(new QWidget,"Endogena-Endogena");
    2223         int indiceEndogeno=ObtenerIndice("Endogena-Endogena");//Se obtiene el indice de la pestaña
    2224         QHBoxLayout * layoutEndogeno = new QHBoxLayout;
    2225         layoutEndogeno->addWidget(matrizEndogena);
    2226         QWidget *widgetEndogeno = tabWidget->widget(indiceEndogeno);
    2227         widgetEndogeno->setLayout(layoutEndogeno);//Se añade el widget y layout a la pestaña creada
     2223        createTab("Endogena-Endogena",matrizEndogena);
    22282224
    22292225        calcularTotalCuentas(tablaEE);
     
    22432239        connect(&actionEncadenamiento,SIGNAL(triggered()),this,SLOT(slotEncadenamientos()));
    22442240        actionEncadenamiento.setEnabled(true);
     2241
     2242        //Se activa la descomposicion
     2243        connect(&actionDescomposicion,SIGNAL(triggered()),this,SLOT(slotDescomposicion()));
     2244        actionDescomposicion.setEnabled(true);
    22452245
    22462246        //Se activa la opción de modelo clásico
     
    24622462        titleEndogena(tablaMa);
    24632463        spanEndogenaCell(tablaMa,2,0,false);
    2464         tabWidget->addTab(new QWidget,"Ma");
    2465         int indice=ObtenerIndice("Ma");//Se obtiene el indice de la pestaña
    2466         QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
    2467         layoutCentralWidget->addWidget(tablaMa);
    2468         QWidget *widget = tabWidget->widget(indice);
    2469         widget->setLayout(layoutCentralWidget);//Se añade el widget y layout a la pestaña creada
     2464        createTab("Ma",tablaMa,true);
    24702465
    24712466        opcionMa = 1;
     
    39503945        sw->hide();
    39513946
    3952         tabWidget->addTab(new QWidget,QString("Resultado C %1").arg(cantidadEscenarios));
    3953         int indice=ObtenerIndice(QString("Resultado C %1").arg(cantidadEscenarios));
    3954 
    3955         QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
    3956         layoutCentralWidget->addWidget(resultadoEscenario);
    3957         QWidget *widget = tabWidget->widget(indice);
    3958         widget->setLayout(layoutCentralWidget);//Se añade el widget y layout a la pestaña creada
    3959         tabWidget->setCurrentIndex(indice);
     3947        createTab(QString("Resultado C %1").arg(cantidadEscenarios),resultadoEscenario,true);
    39603948
    39613949        cantidadEscenarios++;
     
    41364124    ItemsNoEditable(tablaComparar,0,2);
    41374125
    4138     tabWidget->addTab(new QWidget,QString("Comparacion %1").arg(cantidadResultados));
    4139     int indice=ObtenerIndice(QString("Comparacion %1").arg(cantidadResultados));
    4140 
    4141     QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
    4142     layoutCentralWidget->addWidget(tablaComparar);
    4143     QWidget *widget = tabWidget->widget(indice);
    4144     widget->setLayout(layoutCentralWidget);
     4126    createTab(QString("Comparacion %1").arg(cantidadResultados),tablaComparar,true);
    41454127
    41464128    formCompararResultados->close();
    4147     tabWidget->setCurrentIndex(indice);
    41484129    cantidadResultados++;
    41494130}
     
    43114292    titlespanMatrizExgEnd(Bn);
    43124293
    4313     tabWidget->addTab(new QWidget,"Bn");
     4294    createTab("Bn",Bn);
    43144295    int indice=ObtenerIndice("Bn");
    4315     QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
    4316     layoutCentralWidget->addWidget(Bn);
    4317     QWidget *widget = tabWidget->widget(indice);
    4318     widget->setLayout(layoutCentralWidget);
    43194296    tabWidget->removeTab(indice);
    43204297
     
    45814558    }
    45824559    titlespanMatrizExgEnd(Mb);
    4583     tabWidget->addTab(new QWidget,"Mb");
    4584     int indice=ObtenerIndice("Mb");
    4585     QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
    4586     layoutCentralWidget->addWidget(Mb);
    4587     QWidget *widget = tabWidget->widget(indice);
    4588     widget->setLayout(layoutCentralWidget);
     4560    createTab("Mb",Mb);
    45894561}
    45904562
     
    46254597        sw->hide();
    46264598
    4627         tabWidget->addTab(new QWidget,QString("Resultado NC %1").arg(cantidadMNC));
    4628         int indice=ObtenerIndice(QString("Resultado NC %1").arg(cantidadMNC));
    4629 
    4630         QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
    4631         layoutCentralWidget->addWidget(resultadoEscenario);
    4632         QWidget *widget = tabWidget->widget(indice);
    4633         widget->setLayout(layoutCentralWidget);//Se añade el widget y layout a la pestaña creada
    4634         tabWidget->setCurrentIndex(indice);
     4599        createTab(QString("Resultado NC %1").arg(cantidadMNC),resultadoEscenario,true);
    46354600
    46364601        cantidadMNC++;
     
    48334798    ItemsNoEditable(tablaComparar,0,2);
    48344799
    4835     tabWidget->addTab(new QWidget,QString("Comparacion MNC %1").arg(cantidadResultadosMNC));
    4836     int indice=ObtenerIndice(QString("Comparacion MNC %1").arg(cantidadResultadosMNC));
    4837 
    4838     QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
    4839     layoutCentralWidget->addWidget(tablaComparar);
    4840     QWidget *widget = tabWidget->widget(indice);
    4841     widget->setLayout(layoutCentralWidget);
     4800    createTab(QString("Comparacion MNC %1").arg(cantidadResultadosMNC),tablaComparar,true);
    48424801
    48434802    formCompararMNC->close();
    4844     tabWidget->setCurrentIndex(indice);
    48454803    cantidadResultadosMNC++;
    48464804}
     
    48634821    calcularPHCIncidencia100(MatrizMi);
    48644822
    4865     tabWidget->addTab(new QWidget,"PIHc100");
    4866     int indice=ObtenerIndice("PIHc100");
    4867 
    4868     QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
    4869     layoutCentralWidget->addWidget(MatrizMi);
    4870     QWidget *widget = tabWidget->widget(indice);
    4871     widget->setLayout(layoutCentralWidget);
    4872     tabWidget->setCurrentIndex(indice);
     4823    createTab("PIHc100",MatrizMi,true);
    48734824    actionPHClasicoIncidencia100.setDisabled(true);
    48744825}
     
    49074858    titleEndogena(MaT);
    49084859    spanEndogenaCell(MaT,2,0,false);
    4909     tabWidget->addTab(new QWidget,"Pc");
    4910     int indice=ObtenerIndice("Pc");
    4911 
    4912     QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
    4913     layoutCentralWidget->addWidget(MaT);
    4914     QWidget *widget = tabWidget->widget(indice);
    4915     widget->setLayout(layoutCentralWidget);
     4860    createTab("Pc",MaT);
    49164861    opcionMAT++;
    49174862}
     
    50094954    calcularPHCIncidenciaI(MatrizIC,cantidades);
    50104955
    5011     tabWidget->addTab(new QWidget,QString("PIHci %1").arg(cantidadPHCindidenciaiCuenta));
    5012     int indice=ObtenerIndice(QString("PIHci %1").arg(cantidadPHCindidenciaiCuenta));
    5013 
    5014     QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
    5015     layoutCentralWidget->addWidget(MatrizIC);
    5016     QWidget *widget = tabWidget->widget(indice);
    5017     widget->setLayout(layoutCentralWidget);
    5018     tabWidget->setCurrentIndex(indice);
     4956    createTab(QString("PIHci %1").arg(cantidadPHCindidenciaiCuenta),MatrizIC,true);
    50194957    cantidadPHCindidenciaiCuenta++;
    50204958}
     
    51005038    calcularPHCIncidenciaIComponente(MatrizIComp,tw);
    51015039
    5102     tabWidget->addTab(new QWidget,QString("PIHcic %1").arg(cantidadPHCindidenciaiComponente));
    5103     int indice=ObtenerIndice(QString("PIHcic %1").arg(cantidadPHCindidenciaiComponente));
    5104 
    5105     QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
    5106     layoutCentralWidget->addWidget(MatrizIComp);
    5107     QWidget *widget = tabWidget->widget(indice);
    5108     widget->setLayout(layoutCentralWidget);
    5109     tabWidget->setCurrentIndex(indice);
     5040    createTab(QString("PIHcic %1").arg(cantidadPHCindidenciaiComponente),MatrizIComp,true);
    51105041    cantidadPHCindidenciaiComponente++;
    51115042}
     
    52075138    }
    52085139    titlespanMatrizExgEnd(MbT);
    5209     tabWidget->addTab(new QWidget,"Pnc");
    5210     int indice=ObtenerIndice("Pnc");
    5211 
    5212     QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
    5213     layoutCentralWidget->addWidget(MbT);
    5214     QWidget *widget = tabWidget->widget(indice);
    5215     widget->setLayout(layoutCentralWidget);
     5140    createTab("Pnc",MbT);
    52165141    opcionMBT++;
    52175142}
     
    52335158    calcularPHNCIncidencia100(MatrizMi);
    52345159
    5235     tabWidget->addTab(new QWidget,"PIHnc100");
    5236     int indice=ObtenerIndice("PIHnc100");
    5237 
    5238     QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
    5239     layoutCentralWidget->addWidget(MatrizMi);
    5240     QWidget *widget = tabWidget->widget(indice);
    5241     widget->setLayout(layoutCentralWidget);
    5242     tabWidget->setCurrentIndex(indice);
     5160    createTab("PIHnc100",MatrizMi,true);
     5161
    52435162    actionPHNoClasicoIncidencia100.setDisabled(true);
    52445163}
     
    53635282    calcularPHCIncidenciaI(MatrizIC,cantidades);
    53645283
    5365     tabWidget->addTab(new QWidget,QString("PIHnci %1").arg(cantidadPHNCindidenciaiCuenta));
    5366     int indice=ObtenerIndice(QString("PIHnci %1").arg(cantidadPHNCindidenciaiCuenta));
    5367 
    5368     QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
    5369     layoutCentralWidget->addWidget(MatrizIC);
    5370     QWidget *widget = tabWidget->widget(indice);
    5371     widget->setLayout(layoutCentralWidget);
    5372     tabWidget->setCurrentIndex(indice);
     5284    createTab(QString("PIHnci %1").arg(cantidadPHNCindidenciaiCuenta),MatrizIC,true);
    53735285    cantidadPHNCindidenciaiCuenta++;
    53745286}
     
    54225334    calcularPHCIncidenciaIComponente(MatrizIComp,tw);
    54235335
    5424     tabWidget->addTab(new QWidget,QString("PIHncic %1").arg(cantidadPHNCindidenciaiComponente));
    5425     int indice=ObtenerIndice(QString("PIHncic %1").arg(cantidadPHNCindidenciaiComponente));
    5426 
    5427     QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
    5428     layoutCentralWidget->addWidget(MatrizIComp);
    5429     QWidget *widget = tabWidget->widget(indice);
    5430     widget->setLayout(layoutCentralWidget);
    5431     tabWidget->setCurrentIndex(indice);
     5336    createTab(QString("PIHncic %1").arg(cantidadPHNCindidenciaiComponente),MatrizIComp,true);
    54325337    cantidadPHNCindidenciaiComponente++;
    54335338}
     
    56185523    if(opcionPNHT == 0)
    56195524    {
    5620         tabWidget->addTab(new QWidget,QString("PINH100 %1").arg(cantidadPNHincidencia100));
    5621         int indice=ObtenerIndice(QString("PINH100 %1").arg(cantidadPNHincidencia100));
    5622         QHBoxLayout * layoutCentralWidget3 = new QHBoxLayout;
    5623         layoutCentralWidget3->addWidget(tw);
    5624         QWidget *widget3 = tabWidget->widget(indice);
    5625         widget3->setLayout(layoutCentralWidget3);
    5626         tabWidget->setCurrentIndex(indice);
     5525        createTab(QString("PINH100 %1").arg(cantidadPNHincidencia100),tw,true);
    56275526        cantidadPNHincidencia100++;
    56285527        opcionPNHT = 1;
     
    57815680    calcularPHCIncidenciaI(PNHI,cantidades);
    57825681
    5783     tabWidget->addTab(new QWidget,QString("PINHi %1").arg(cantidadPNHincidenciaiCuenta));
    5784     int indice=ObtenerIndice(QString("PINHi %1").arg(cantidadPNHincidenciaiCuenta));
    5785 
    5786     QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
    5787     layoutCentralWidget->addWidget(PNHI);
    5788     QWidget *widget = tabWidget->widget(indice);
    5789     widget->setLayout(layoutCentralWidget);
    5790     tabWidget->setCurrentIndex(indice);
     5682    createTab(QString("PINHi %1").arg(cantidadPNHincidenciaiCuenta),PNHI,true);
    57915683    cantidadPNHincidenciaiCuenta++;
    57925684    FI->close();
     
    58965788    calcularPHCIncidenciaIComponente(PNHIc,tw);
    58975789
    5898     tabWidget->addTab(new QWidget,QString("PINHic %1").arg(cantidadPNHincidenciaiComponente));
    5899     int indice=ObtenerIndice(QString("PINHic %1").arg(cantidadPNHincidenciaiComponente));
    5900 
    5901     QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
    5902     layoutCentralWidget->addWidget(PNHIc);
    5903     QWidget *widget = tabWidget->widget(indice);
    5904     widget->setLayout(layoutCentralWidget);
    5905     tabWidget->setCurrentIndex(indice);
     5790    createTab(QString("PINHic %1").arg(cantidadPNHincidenciaiComponente),PNHIc,true);
    59065791    cantidadPNHincidenciaiComponente++;
    59075792    FI->close();
     
    60985983
    60995984                titleSeleccionar(nuevaTabla);
    6100                 tabWidget->addTab(new QWidget,QString("Seleccion %1").arg(cantidadSelecciones));
    6101                 int indice=ObtenerIndice(QString("Seleccion %1").arg(cantidadSelecciones));
    6102                 QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
    6103                 layoutCentralWidget->addWidget(nuevaTabla);
    6104                 QWidget *widget = tabWidget->widget(indice);
    6105                 widget->setLayout(layoutCentralWidget);
    6106                 tabWidget->setCurrentIndex(indice);
     5985                createTab(QString("Seleccion %1").arg(cantidadSelecciones),nuevaTabla,true);
    61075986                cantidadSelecciones++;
    61085987            }
     
    61115990}
    61125991
     5992/**
     5993    @brief Función para mostrar el formulario para la descomposicion
     5994    @date 27/09/2015
     5995    @author Rodrigo Boet
     5996*/
     5997void MainWindow::slotDescomposicion()
     5998{
     5999    formdescomposicion = new FormDescomposicion(this);
     6000    QStringList list;
     6001    foreach(int key,diccCuentasEndogenas.keys())
     6002    {
     6003        list.append(diccCuentasEndogenas[key][0]);
     6004    }
     6005    formdescomposicion->ui->listAgregar->addItems(list);
     6006    connect(formdescomposicion->ui->pushButton_3,SIGNAL(clicked()),this,SLOT(slotAgregarDescomposicion()));
     6007    formdescomposicion->show();
     6008}
     6009
     6010/**
     6011    @brief Función para seleccionar las cuentas que seran actividad/producto
     6012    @date 27/09/2015
     6013    @author Rodrigo Boet
     6014*/
     6015void MainWindow::slotAgregarDescomposicion()
     6016{
     6017    int item = formdescomposicion->ui->listSeleccionado->count();
     6018    if(item==2)
     6019    {
     6020        QStringList list;
     6021        for(int i=0;i<item;i++)
     6022        {
     6023            list.append(formdescomposicion->ui->listSeleccionado->item(i)->text());
     6024        }
     6025        if(validarDescomposicion(list))
     6026        {
     6027            QTableWidget *tw = findChild<QTableWidget *>("MatrizAn");
     6028            int filas = tw->rowCount();
     6029            Eigen::MatrixXd M1 = extractSubMatriz(tw,list.at(0),list.at(0),An);
     6030            Eigen::MatrixXd M2 = extractSubMatriz(tw,list.at(0),list.at(1),An);
     6031            Eigen::MatrixXd M3 = extractSubMatriz(tw,list.at(1),list.at(0),An);
     6032            Eigen::MatrixXd M4 = extractSubMatriz(tw,list.at(1),list.at(1),An);
     6033            QVector<double> V1 = extractDiagonal(M1);
     6034            QVector<double> V2 = extractDiagonal(M2);
     6035            QVector<double> V3 = extractDiagonal(M3);
     6036            QVector<double> V4 = extractDiagonal(M4);
     6037            QVector<double> diagonal;
     6038            if(validarDiagonal(V1))
     6039            {
     6040                appendElements(V1,diagonal);
     6041            }
     6042            if(validarDiagonal(V2))
     6043            {
     6044                appendElements(V2,diagonal);
     6045            }
     6046            if(validarDiagonal(V3))
     6047            {
     6048                appendElements(V3,diagonal);
     6049            }
     6050            if(validarDiagonal(V4))
     6051            {
     6052                appendElements(V4,diagonal);
     6053            }
     6054            for (int i = 2; i<filas;i++)
     6055            {
     6056                for(int j=2; j<filas;j++)
     6057                {
     6058                    if(tw->item(0,j)->text()!=list.at(0) and tw->item(0,j)->text()!=list.at(1))
     6059                    {
     6060                        if(i==j)
     6061                        {
     6062                            diagonal.append(An(i-2,j-2));
     6063                        }
     6064                    }
     6065                }
     6066            }
     6067            calcularA0(diagonal);
     6068            calcularAuxiliares();
     6069            calcularMatricesDescomposicion();
     6070
     6071        }
     6072        else
     6073        {
     6074            QMessageBox::warning(this,"Error","La cuenta Producto y Actividad\ndeben ser simétricas, ajuste la matriz\ne intente de nuevo");
     6075        }
     6076    }
     6077    else
     6078    {
     6079        QMessageBox::warning(this,"Alerta","Debe seleccionar dos (2) cuentas");
     6080    }
     6081
     6082}
     6083
     6084/**
     6085    @brief Función para validar que las cuentas producto y actividad sean simétricas
     6086    @date 28/09/2015
     6087    @author Rodrigo Boet
     6088    @param <cuentas> Recibe la lista con las cuentas
     6089    @return <valores> Retorna verdadera si son simétricas, falso en caso contrario
     6090*/
     6091bool MainWindow::validarDescomposicion(QStringList cuentas)
     6092{
     6093    QStringList valores;
     6094    foreach (int key, diccCuentasEndogenas.keys()) {
     6095       if (diccCuentasEndogenas[key][0]==cuentas.at(0) or diccCuentasEndogenas[key][0]==cuentas.at(1))
     6096       {
     6097           valores.append(diccCuentasEndogenas[key][1]);
     6098       }
     6099    }
     6100    if(valores.at(0)==valores.at(1))
     6101    {
     6102        return true;
     6103    }
     6104    else
     6105    {
     6106        return false;
     6107    }
     6108}
     6109
     6110/**
     6111    @brief Función para calcular A0
     6112    @date 28/09/2015
     6113    @author Rodrigo Boet
     6114    @param <diagonal> Recibe el valor de las diagonales
     6115*/
     6116void MainWindow::calcularA0(QVector<double> diagonal)
     6117{
     6118    A0 = MatrixXd::Identity(An.rows(),An.cols());
     6119    int fila = A0.rows();
     6120    for(int i=0;i<fila;i++)
     6121    {
     6122        for(int j=0;j<fila;j++)
     6123        {
     6124            if(i==j)
     6125            {
     6126                A0(i,j)=diagonal.at(i);
     6127            }
     6128        }
     6129    }
     6130    QTableWidget *MAN = findChild<QTableWidget *>("MatrizAn");
     6131    QTableWidget *tw = new QTableWidget;
     6132    CrearTablaVacia(MAN->rowCount(),tw);
     6133    noEditColZero(tw);
     6134    clonarTabla(MAN,tw,MAN->rowCount());
     6135    fila = MAN->rowCount()-1;
     6136    for(int i=2;i<fila;i++)
     6137    {
     6138        for(int j=2;j<fila;j++)
     6139        {
     6140            QTableWidgetItem *valoraInsertar = new QTableWidgetItem(QString::number(A0(i-2,j-2),'f',precission));
     6141            valoraInsertar->setFlags(valoraInsertar->flags() ^ Qt::ItemIsEditable);
     6142            tw->setItem(i,j,valoraInsertar);
     6143        }
     6144    }
     6145    createTab("A0",tw,true);
     6146    formdescomposicion->close();
     6147
     6148    MatrixXd ident = MatrixXd::Identity(An.rows(),An.cols());
     6149    M1 = ident - A0;
     6150    M1 = M1.inverse();
     6151    QTableWidget *Mm1 = new QTableWidget;
     6152    CrearTablaVacia(MAN->rowCount(),Mm1);
     6153    noEditColZero(Mm1);
     6154    clonarTabla(MAN,Mm1,MAN->rowCount());
     6155    fila = MAN->rowCount()-1;
     6156    for(int i=2;i<fila;i++)
     6157    {
     6158        for(int j=2;j<fila;j++)
     6159        {
     6160            QTableWidgetItem *valoraInsertar = new QTableWidgetItem(QString::number(M1(i-2,j-2),'f',precission));
     6161            valoraInsertar->setFlags(valoraInsertar->flags() ^ Qt::ItemIsEditable);
     6162            Mm1->setItem(i,j,valoraInsertar);
     6163        }
     6164    }
     6165    createTab("M1",Mm1);
     6166}
     6167
     6168/**
     6169    @brief Función para calcular los auxiliares de la descomposicion y también M2 y M3
     6170    @date 28/09/2015
     6171    @author Rodrigo Boet
     6172*/
     6173void MainWindow::calcularAuxiliares()
     6174{
     6175    MatrixXd ident = MatrixXd::Identity(A0.rows(),A0.cols());
     6176    MatrixXd aux = M1*(A0-An);
     6177    M2 = ident+aux;
     6178    int cantidad = diccCuentasEndogenas.count()-2;
     6179    MatrixXd ant = aux;
     6180    for(int i=0;i<cantidad;i++)
     6181    {
     6182        aux *= ant;
     6183        ant = aux;
     6184        if(i<cantidad-1)
     6185        {
     6186            M2 += aux;
     6187        }
     6188    }
     6189    M3 = ident - aux;
     6190    M3 = M3.inverse();
     6191    QTableWidget *MAN = findChild<QTableWidget *>("MatrizAn");
     6192    QTableWidget *Mm2 = new QTableWidget;
     6193    CrearTablaVacia(MAN->rowCount(),Mm2);
     6194    noEditColZero(Mm2);
     6195    clonarTabla(MAN,Mm2,MAN->rowCount());
     6196    int fila = MAN->rowCount()-1;
     6197    for(int i=2;i<fila;i++)
     6198    {
     6199        for(int j=2;j<fila;j++)
     6200        {
     6201            QTableWidgetItem *valoraInsertar = new QTableWidgetItem(QString::number(M2(i-2,j-2),'f',precission));
     6202            valoraInsertar->setFlags(valoraInsertar->flags() ^ Qt::ItemIsEditable);
     6203            Mm2->setItem(i,j,valoraInsertar);
     6204        }
     6205    }
     6206    createTab("M2",Mm2);
     6207
     6208    QTableWidget *Mm3 = new QTableWidget;
     6209    CrearTablaVacia(MAN->rowCount(),Mm3);
     6210    noEditColZero(Mm3);
     6211    clonarTabla(MAN,Mm3,MAN->rowCount());
     6212    fila = MAN->rowCount()-1;
     6213    for(int i=2;i<fila;i++)
     6214    {
     6215        for(int j=2;j<fila;j++)
     6216        {
     6217            QTableWidgetItem *valoraInsertar = new QTableWidgetItem(QString::number(M3(i-2,j-2),'f',precission));
     6218            valoraInsertar->setFlags(valoraInsertar->flags() ^ Qt::ItemIsEditable);
     6219            Mm3->setItem(i,j,valoraInsertar);
     6220        }
     6221    }
     6222    createTab("M3",Mm3);
     6223}
     6224
     6225/**
     6226    @brief Función para calcular las matrices de Transferencia (T), Open(O) y Close(C)
     6227    @date 28/09/2015
     6228    @author Rodrigo Boet
     6229*/
     6230void MainWindow::calcularMatricesDescomposicion()
     6231{
     6232    MatrixXd ident = MatrixXd::Identity(A0.rows(),A0.cols());
     6233    T = M1 - ident;
     6234    O = (M2 - ident) * M1;
     6235    C = (M3 - ident) * (M2 * M1);
     6236
     6237    QTableWidget *MAN = findChild<QTableWidget *>("MatrizAn");
     6238    QTableWidget *mt = new QTableWidget;
     6239    CrearTablaVacia(MAN->rowCount(),mt);
     6240    noEditColZero(mt);
     6241    clonarTabla(MAN,mt,MAN->rowCount());
     6242    int fila = MAN->rowCount()-1;
     6243    for(int i=2;i<fila;i++)
     6244    {
     6245        for(int j=2;j<fila;j++)
     6246        {
     6247            QTableWidgetItem *valoraInsertar = new QTableWidgetItem(QString::number(T(i-2,j-2),'f',precission));
     6248            valoraInsertar->setFlags(valoraInsertar->flags() ^ Qt::ItemIsEditable);
     6249            mt->setItem(i,j,valoraInsertar);
     6250        }
     6251    }
     6252    createTab("T",mt);
     6253
     6254    QTableWidget *mo = new QTableWidget;
     6255    CrearTablaVacia(MAN->rowCount(),mo);
     6256    noEditColZero(mo);
     6257    clonarTabla(MAN,mo,MAN->rowCount());
     6258    fila = MAN->rowCount()-1;
     6259    for(int i=2;i<fila;i++)
     6260    {
     6261        for(int j=2;j<fila;j++)
     6262        {
     6263            QTableWidgetItem *valoraInsertar = new QTableWidgetItem(QString::number(O(i-2,j-2),'f',precission));
     6264            valoraInsertar->setFlags(valoraInsertar->flags() ^ Qt::ItemIsEditable);
     6265            mo->setItem(i,j,valoraInsertar);
     6266        }
     6267    }
     6268    createTab("O",mo);
     6269
     6270    QTableWidget *mc = new QTableWidget;
     6271    CrearTablaVacia(MAN->rowCount(),mc);
     6272    noEditColZero(mc);
     6273    clonarTabla(MAN,mc,MAN->rowCount());
     6274    fila = MAN->rowCount()-1;
     6275    for(int i=2;i<fila;i++)
     6276    {
     6277        for(int j=2;j<fila;j++)
     6278        {
     6279            QTableWidgetItem *valoraInsertar = new QTableWidgetItem(QString::number(C(i-2,j-2),'f',precission));
     6280            valoraInsertar->setFlags(valoraInsertar->flags() ^ Qt::ItemIsEditable);
     6281            mc->setItem(i,j,valoraInsertar);
     6282        }
     6283    }
     6284    createTab("C",mc);
     6285}
     6286
     6287/**
     6288    @brief Función para crear un nueva pestaña
     6289    @date 28/09/2015
     6290    @author Rodrigo Boet
     6291    @param <texto> Recibe el nombre de la pestaña
     6292    @param <tw> Recibe el widget de la tabla que se insertara
     6293    @param <current> recibe un booleano (verdadero si se coloca como activo, falso en caso contrario)
     6294*/
     6295void MainWindow::createTab(QString texto, QTableWidget *tw, bool current)
     6296{
     6297    tabWidget->addTab(new QWidget,texto);
     6298    int indice=ObtenerIndice(texto);
     6299
     6300    QHBoxLayout * layoutCentralWidget = new QHBoxLayout;
     6301    layoutCentralWidget->addWidget(tw);
     6302    QWidget *widget = tabWidget->widget(indice);
     6303    widget->setLayout(layoutCentralWidget);
     6304    if(current)
     6305    {
     6306        tabWidget->setCurrentIndex(indice);
     6307    }
     6308
     6309}
     6310
Note: See TracChangeset for help on using the changeset viewer.