Untitled

 avatar
unknown
c_cpp
a year ago
1.2 kB
7
Indexable
#include <iostream>
#include <Eigen/Dense>

using Eigen::MatrixXd;


double Absd(double X)
{
    if (X < 0)
    {
        return -X;
    }
    return X;
}

bool CloseToOne(MatrixXd state)
{
    double Threshold = 0.0001;

    if (Absd(state(0, 0) - 1.0) <= Threshold) return true;
    if (Absd(state(1, 0) - 1.0) <= Threshold) return true;
    if (Absd(state(2, 0) - 1.0) <= Threshold) return true;
}

int main()
{
    MatrixXd transition(3, 3);

    transition(0, 0) = 0.9; transition(0, 1) = 0.1;  transition(0, 2) = 0.0;
    transition(1, 0) = 0.0; transition(1, 1) = 0.8;  transition(1, 2) = 0.2;
    transition(2, 0) = 0.0; transition(2, 1) = 0.0;  transition(2, 2) = 1.0;


    MatrixXd initial_state(3, 1);
    initial_state(0, 0) = 0.0;
    initial_state(1, 0) = 0.0;
    initial_state(2, 0) = 1.0;


  
    for (int i = 0; i < 10000; ++i)
    {
        MatrixXd next_state = transition * initial_state;


        if (CloseToOne(next_state))
        {
            std::cout << "Pure Aloha at index i = " << i << " \n";
            break;
        }
        initial_state = next_state;
    }
}
Editor is loading...
Leave a Comment