1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- #include "HierarchicalAnalysis.h"
- #include <QtMath>
- #include <QDebug>
- HierarchicalAnalysis::HierarchicalAnalysis(const QStringList& nodes, const QVector<qreal>& nxnValus)
- : m_nodes(nodes),
- m_sqartnValues(QVector<double>(nodes.count(), 0)),
- m_weights(QVector<double>(nodes.count(), 0)),
- m_averageWeights(QVector<double>(nodes.count(), 0)),
- m_CI(0),
- m_CR(0)
- {
- // qDebug() << "HierarchicalAnalysis nodes" << nodes;
- calc(nxnValus);
- }
- void HierarchicalAnalysis::calc(const QVector<qreal>& nxnValus)
- {
- // qDebug() << "HierarchicalAnalysis nxnValus" << nxnValus;
- QVector<qreal> nodeMul(m_nodes.count(), 1);
- for (int m = 0; m < m_nodes.count(); ++m)
- {
- for (int n = 0; n < m_nodes.count(); ++n)
- {
- nodeMul[m] *= nxnValus[m * m_nodes.count() + n];
- }
- }
- // qDebug() << "nodeMul" << nodeMul;
- qreal nSum = 0;
- for (int n = 0; n < m_sqartnValues.count(); ++n)
- {
- m_sqartnValues[n] = qPow(nodeMul[n], (qreal)1 / m_sqartnValues.count());
- nSum += m_sqartnValues[n];
- }
- // qDebug() << "sqartnValues" << m_sqartnValues;
- for (int w = 0; w < m_weights.count(); ++w)
- {
- m_weights[w] = m_sqartnValues[w] / nSum;
- }
- // qDebug() << "weights" << m_weights;
- // m0*w0+m1*w1+m2*w2+m3*w3...mn*wn
- for (int m = 0; m < m_nodes.count(); ++m)
- {
- for (int n = 0; n < m_nodes.count(); ++n)
- {
- m_averageWeights[m] += nxnValus[m * m_nodes.count() + n] * m_weights[n];
- }
- }
- // qDebug() << "averageWeights" << m_averageWeights;
- // Awi/Wi
- QVector<qreal> awiDividedWi(m_nodes.count(), 0);
- qreal awiDividedWiAverage = 0;
- for (int m = 0; m < m_nodes.count(); ++m)
- {
- awiDividedWi[m] = m_averageWeights[m] / m_weights[m];
- awiDividedWiAverage += awiDividedWi[m];
- }
- awiDividedWiAverage /= m_nodes.count();
- // qDebug() << "awiDividedWi" << awiDividedWi;
- // CI=(λ-n)/(n-1)
- m_CI = (awiDividedWiAverage - m_nodes.count()) / (m_nodes.count() - 1);
- qreal result = RI[m_nodes.count() - 1];
- if (result == 0)
- {
- m_CR = 0;
- }
- else
- {
- m_CR = m_CI / RI[m_nodes.count() - 1];
- }
- // qDebug() << RI[m_nodes.count() - 1] << "m_CI" << m_CI << "m_CR" << m_CR;
- }
|