{
  "cells": [
    {
      "cell_type": "code",
      "execution_count": 2,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "irCdVIKDw9IF",
        "outputId": "681c0ed2-219e-4190-c38c-b51faea0895c"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Step # 1\n",
            "[0.9901 0.01   0.01  ]\n",
            "\n",
            "Step # 2\n",
            "[0.019801 0.9901   0.9901  ]\n",
            "\n",
            "Step # 3\n",
            "[0.98039701 0.019801   0.019801  ]\n",
            "\n",
            "Step # 4\n",
            "[0.02940696 0.98039701 0.98039701]\n",
            "\n",
            "Step # 5\n",
            "[0.97088711 0.02940696 0.02940696]\n",
            "\n",
            "Step # 6\n",
            "[0.03882176 0.97088711 0.97088711]\n",
            "\n",
            "Step # 7\n",
            "[0.96156646 0.03882176 0.03882176]\n",
            "\n",
            "Step # 8\n",
            "[0.04804921 0.96156646 0.96156646]\n",
            "\n",
            "Step # 9\n",
            "[0.95243128 0.04804921 0.04804921]\n",
            "\n",
            "Step # 10\n",
            "[0.05709303 0.95243128 0.95243128]\n",
            "\n",
            "Step # 11\n",
            "[0.9434779  0.05709303 0.05709303]\n",
            "\n",
            "Step # 12\n",
            "[0.06595688 0.9434779  0.9434779 ]\n",
            "\n",
            "Step # 13\n",
            "[0.93470269 0.06595688 0.06595688]\n",
            "\n",
            "Step # 14\n",
            "[0.07464434 0.93470269 0.93470269]\n",
            "\n",
            "Step # 15\n",
            "[0.92610211 0.07464434 0.07464434]\n",
            "\n",
            "Step # 16\n",
            "[0.08315891 0.92610211 0.92610211]\n",
            "\n",
            "Step # 17\n",
            "[0.91767268 0.08315891 0.08315891]\n",
            "\n",
            "Step # 18\n",
            "[0.09150405 0.91767268 0.91767268]\n",
            "\n",
            "Step # 19\n",
            "[0.90941099 0.09150405 0.09150405]\n",
            "\n",
            "Step # 20\n",
            "[0.09968312 0.90941099 0.90941099]\n",
            "\n",
            "Step # 21\n",
            "[0.90131371 0.09968312 0.09968312]\n",
            "\n",
            "Step # 22\n",
            "[0.10769943 0.90131371 0.90131371]\n",
            "\n",
            "Step # 23\n",
            "[0.89337757 0.10769943 0.10769943]\n",
            "\n",
            "Step # 24\n",
            "[0.11555621 0.89337757 0.89337757]\n",
            "\n",
            "Step # 25\n",
            "[0.88559935 0.11555621 0.11555621]\n",
            "\n",
            "Step # 26\n",
            "[0.12325664 0.88559935 0.88559935]\n",
            "\n",
            "Step # 27\n",
            "[0.87797593 0.12325664 0.12325664]\n",
            "\n",
            "Step # 28\n",
            "[0.13080383 0.87797593 0.87797593]\n",
            "\n",
            "Step # 29\n",
            "[0.87050421 0.13080383 0.13080383]\n",
            "\n",
            "Step # 30\n",
            "[0.13820084 0.87050421 0.87050421]\n",
            "\n",
            "Step # 31\n",
            "[0.86318117 0.13820084 0.13820084]\n",
            "\n",
            "Step # 32\n",
            "[0.14545064 0.86318117 0.86318117]\n",
            "\n",
            "Step # 33\n",
            "[0.85600387 0.14545064 0.14545064]\n",
            "\n",
            "Step # 34\n",
            "[0.15255617 0.85600387 0.85600387]\n",
            "\n",
            "Step # 35\n",
            "[0.84896939 0.15255617 0.15255617]\n",
            "\n",
            "Step # 36\n",
            "[0.1595203  0.84896939 0.84896939]\n",
            "\n",
            "Step # 37\n",
            "[0.8420749 0.1595203 0.1595203]\n",
            "\n",
            "Step # 38\n",
            "[0.16634585 0.8420749  0.8420749 ]\n",
            "\n",
            "Step # 39\n",
            "[0.83531761 0.16634585 0.16634585]\n",
            "\n",
            "Step # 40\n",
            "[0.17303557 0.83531761 0.83531761]\n",
            "\n",
            "Step # 41\n",
            "[0.82869479 0.17303557 0.17303557]\n",
            "\n",
            "Step # 42\n",
            "[0.17959216 0.82869479 0.82869479]\n",
            "\n",
            "Step # 43\n",
            "[0.82220376 0.17959216 0.17959216]\n",
            "\n",
            "Step # 44\n",
            "[0.18601828 0.82220376 0.82220376]\n",
            "\n",
            "Step # 45\n",
            "[0.81584191 0.18601828 0.18601828]\n",
            "\n",
            "Step # 46\n",
            "[0.19231651 0.81584191 0.81584191]\n",
            "\n",
            "Step # 47\n",
            "[0.80960665 0.19231651 0.19231651]\n",
            "\n",
            "Step # 48\n",
            "[0.19848941 0.80960665 0.80960665]\n",
            "\n",
            "Step # 49\n",
            "[0.80349548 0.19848941 0.19848941]\n",
            "\n",
            "Step # 50\n",
            "[0.20453947 0.80349548 0.80349548]\n",
            "\n",
            "Step # 51\n",
            "[0.79750592 0.20453947 0.20453947]\n",
            "\n",
            "Step # 52\n",
            "[0.21046914 0.79750592 0.79750592]\n",
            "\n",
            "Step # 53\n",
            "[0.79163555 0.21046914 0.21046914]\n",
            "\n",
            "Step # 54\n",
            "[0.2162808  0.79163555 0.79163555]\n",
            "\n",
            "Step # 55\n",
            "[0.78588201 0.2162808  0.2162808 ]\n",
            "\n",
            "Step # 56\n",
            "[0.22197681 0.78588201 0.78588201]\n",
            "\n",
            "Step # 57\n",
            "[0.78024295 0.22197681 0.22197681]\n",
            "\n",
            "Step # 58\n",
            "[0.22755948 0.78024295 0.78024295]\n",
            "\n",
            "Step # 59\n",
            "[0.77471612 0.22755948 0.22755948]\n",
            "\n",
            "Step # 60\n",
            "[0.23303104 0.77471612 0.77471612]\n",
            "\n",
            "Step # 61\n",
            "[0.76929927 0.23303104 0.23303104]\n",
            "\n",
            "Step # 62\n",
            "[0.23839372 0.76929927 0.76929927]\n",
            "\n",
            "Step # 63\n",
            "[0.76399021 0.23839372 0.23839372]\n",
            "\n",
            "Step # 64\n",
            "[0.24364969 0.76399021 0.76399021]\n",
            "\n",
            "Step # 65\n",
            "[0.75878681 0.24364969 0.24364969]\n",
            "\n",
            "Step # 66\n",
            "[0.24880106 0.75878681 0.75878681]\n",
            "\n",
            "Step # 67\n",
            "[0.75368695 0.24880106 0.24880106]\n",
            "\n",
            "Step # 68\n",
            "[0.25384992 0.75368695 0.75368695]\n",
            "\n",
            "Step # 69\n",
            "[0.74868858 0.25384992 0.25384992]\n",
            "\n",
            "Step # 70\n",
            "[0.25879831 0.74868858 0.74868858]\n",
            "\n",
            "Step # 71\n",
            "[0.74378968 0.25879831 0.25879831]\n",
            "\n",
            "Step # 72\n",
            "[0.26364822 0.74378968 0.74378968]\n",
            "\n",
            "Step # 73\n",
            "[0.73898826 0.26364822 0.26364822]\n",
            "\n",
            "Step # 74\n",
            "[0.26840162 0.73898826 0.73898826]\n",
            "\n",
            "Step # 75\n",
            "[0.7342824  0.26840162 0.26840162]\n",
            "\n",
            "Step # 76\n",
            "[0.27306043 0.7342824  0.7342824 ]\n",
            "\n",
            "Step # 77\n",
            "[0.72967018 0.27306043 0.27306043]\n",
            "\n",
            "Step # 78\n",
            "[0.27762653 0.72967018 0.72967018]\n",
            "\n",
            "Step # 79\n",
            "[0.72514974 0.27762653 0.27762653]\n",
            "\n",
            "Step # 80\n",
            "[0.28210176 0.72514974 0.72514974]\n",
            "\n",
            "Step # 81\n",
            "[0.72071926 0.28210176 0.28210176]\n",
            "\n",
            "Step # 82\n",
            "[0.28648793 0.72071926 0.72071926]\n",
            "\n",
            "Step # 83\n",
            "[0.71637695 0.28648793 0.28648793]\n",
            "\n",
            "Step # 84\n",
            "[0.29078682 0.71637695 0.71637695]\n",
            "\n",
            "Step # 85\n",
            "[0.71212105 0.29078682 0.29078682]\n",
            "\n",
            "Step # 86\n",
            "[0.29500017 0.71212105 0.71212105]\n",
            "\n",
            "Step # 87\n",
            "[0.70794984 0.29500017 0.29500017]\n",
            "\n",
            "Step # 88\n",
            "[0.29912966 0.70794984 0.70794984]\n",
            "\n",
            "Step # 89\n",
            "[0.70386163 0.29912966 0.29912966]\n",
            "\n",
            "Step # 90\n",
            "[0.30317698 0.70386163 0.70386163]\n",
            "\n",
            "Step # 91\n",
            "[0.69985479 0.30317698 0.30317698]\n",
            "\n",
            "Step # 92\n",
            "[0.30714376 0.69985479 0.69985479]\n",
            "\n",
            "Step # 93\n",
            "[0.69592768 0.30714376 0.30714376]\n",
            "\n",
            "Step # 94\n",
            "[0.3110316  0.69592768 0.69592768]\n",
            "\n",
            "Step # 95\n",
            "[0.69207872 0.3110316  0.3110316 ]\n",
            "\n",
            "Step # 96\n",
            "[0.31484207 0.69207872 0.69207872]\n",
            "\n",
            "Step # 97\n",
            "[0.68830635 0.31484207 0.31484207]\n",
            "\n",
            "Step # 98\n",
            "[0.31857671 0.68830635 0.68830635]\n",
            "\n",
            "Step # 99\n",
            "[0.68460905 0.31857671 0.31857671]\n",
            "\n",
            "Step # 100\n",
            "[0.32223704 0.68460905 0.68460905]\n",
            "\n",
            "Step # 101\n",
            "[0.68098533 0.32223704 0.32223704]\n",
            "\n"
          ]
        }
      ],
      "source": [
        "import numpy as np\n",
        "\n",
        "eps = 0.01\n",
        "#T = np.array([[1/3., 1/3., 1/3.], [1/2., 1/2., 0], [0, 1/4., 3/4.]]) # Example 1\n",
        "T = np.array([[0+eps, 1/2.-eps/2, 1/2.-eps/2], [1, 0, 0], [1, 0, 0]]) # Example 2\n",
        "\n",
        "\n",
        "p0 = np.array([1, 0, 0])\n",
        "\n",
        "prev_p = p0\n",
        "p = T.dot(prev_p)\n",
        "step = 0\n",
        "while not np.allclose(p, prev_p):\n",
        "#while not np.array_equal(p, prev_p):\n",
        "    step += 1\n",
        "    prev_p = p\n",
        "    p = T.dot(prev_p)\n",
        "    print(\"Step #\", step)\n",
        "    print(p)\n",
        "    print()\n",
        "    if step > 100:\n",
        "        break\n"
      ]
    }
  ],
  "metadata": {
    "kernelspec": {
      "display_name": "Python 3",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.8.8"
    },
    "colab": {
      "provenance": []
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}