SHARE
TWEET

Untitled

a guest Jul 16th, 2019 57 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. {
  2.   "cells": [
  3.     {
  4.       "metadata": {
  5.         "trusted": true
  6.       },
  7.       "cell_type": "code",
  8.       "source": "using LinearAlgebra\nusing RowEchelon\nusing BenchmarkTools",
  9.       "execution_count": 1,
  10.       "outputs": []
  11.     },
  12.     {
  13.       "metadata": {
  14.         "trusted": true
  15.       },
  16.       "cell_type": "code",
  17.       "source": "B = Float64[\n    1 2 1 3\n    4 5 1 6\n    7 8 1 9\n    1 2 2 3\n]\nB = Matrix(B')",
  18.       "execution_count": 2,
  19.       "outputs": [
  20.         {
  21.           "output_type": "execute_result",
  22.           "execution_count": 2,
  23.           "data": {
  24.             "text/plain": "4×4 Array{Float64,2}:\n 1.0  4.0  7.0  1.0\n 2.0  5.0  8.0  2.0\n 1.0  1.0  1.0  2.0\n 3.0  6.0  9.0  3.0"
  25.           },
  26.           "metadata": {}
  27.         }
  28.       ]
  29.     },
  30.     {
  31.       "metadata": {
  32.         "trusted": true
  33.       },
  34.       "cell_type": "code",
  35.       "source": "qr(B)",
  36.       "execution_count": 3,
  37.       "outputs": [
  38.         {
  39.           "output_type": "execute_result",
  40.           "execution_count": 3,
  41.           "data": {
  42.             "text/plain": "LinearAlgebra.QRCompactWY{Float64,Array{Float64,2}}\nQ factor:\n4×4 LinearAlgebra.QRCompactWYQ{Float64,Array{Float64,2}}:\n -0.258199   0.774597  -0.562294  -0.130991\n -0.516398   0.258199   0.693285  -0.431304\n -0.258199  -0.516398  -0.431304  -0.693285\n -0.774597  -0.258199  -0.130991   0.562294\nR factor:\n4×4 Array{Float64,2}:\n -3.87298  -8.52056  -13.1681       -4.13118 \n  0.0       2.32379    4.64758      -0.516398\n  0.0       0.0        4.17184e-15  -0.431304\n  0.0       0.0        0.0          -0.693285"
  43.           },
  44.           "metadata": {}
  45.         }
  46.       ]
  47.     },
  48.     {
  49.       "metadata": {
  50.         "trusted": true
  51.       },
  52.       "cell_type": "code",
  53.       "source": "rref(B)",
  54.       "execution_count": 4,
  55.       "outputs": [
  56.         {
  57.           "output_type": "execute_result",
  58.           "execution_count": 4,
  59.           "data": {
  60.             "text/plain": "4×4 Array{Float64,2}:\n 1.0  0.0  -1.0  0.0\n 0.0  1.0   2.0  0.0\n 0.0  0.0   0.0  1.0\n 0.0  0.0   0.0  0.0"
  61.           },
  62.           "metadata": {}
  63.         }
  64.       ]
  65.     },
  66.     {
  67.       "metadata": {
  68.         "trusted": true
  69.       },
  70.       "cell_type": "code",
  71.       "source": "@benchmark qr(B)",
  72.       "execution_count": 5,
  73.       "outputs": [
  74.         {
  75.           "output_type": "execute_result",
  76.           "execution_count": 5,
  77.           "data": {
  78.             "text/plain": "BenchmarkTools.Trial: \n  memory estimate:  656 bytes\n  allocs estimate:  4\n  --------------\n  minimum time:     3.441 μs (0.00% GC)\n  median time:      3.791 μs (0.00% GC)\n  mean time:        4.592 μs (16.16% GC)\n  maximum time:     5.622 ms (99.83% GC)\n  --------------\n  samples:          10000\n  evals/sample:     8"
  79.           },
  80.           "metadata": {}
  81.         }
  82.       ]
  83.     },
  84.     {
  85.       "metadata": {
  86.         "trusted": true
  87.       },
  88.       "cell_type": "code",
  89.       "source": "@benchmark rref(B)",
  90.       "execution_count": 6,
  91.       "outputs": [
  92.         {
  93.           "output_type": "execute_result",
  94.           "execution_count": 6,
  95.           "data": {
  96.             "text/plain": "BenchmarkTools.Trial: \n  memory estimate:  1.02 KiB\n  allocs estimate:  9\n  --------------\n  minimum time:     468.913 ns (0.00% GC)\n  median time:      483.194 ns (0.00% GC)\n  mean time:        594.480 ns (12.76% GC)\n  maximum time:     233.954 μs (99.62% GC)\n  --------------\n  samples:          10000\n  evals/sample:     196"
  97.           },
  98.           "metadata": {}
  99.         }
  100.       ]
  101.     },
  102.     {
  103.       "metadata": {
  104.         "trusted": true
  105.       },
  106.       "cell_type": "code",
  107.       "source": "function equilibrium_qr(A::AbstractMatrix)\n    @assert size(A, 1) == size(A, 2)\n    R = qr(A).R\n    n = size(A, 1)\n    v = zeros(eltype(A), n)\n    a = abs.(diag(R))\n    m, k = findmin(a)\n    v[k] = 1\n    for i in k-1:-1:1\n        s = zero(eltype(A))\n        for j in i+1:n\n            s += R[i,j] * v[j]\n        end\n        v[i] = -s / R[i,i]\n    end\n    return v ./ norm(v)\nend",
  108.       "execution_count": 7,
  109.       "outputs": [
  110.         {
  111.           "output_type": "execute_result",
  112.           "execution_count": 7,
  113.           "data": {
  114.             "text/plain": "equilibrium_qr (generic function with 1 method)"
  115.           },
  116.           "metadata": {}
  117.         }
  118.       ]
  119.     },
  120.     {
  121.       "metadata": {
  122.         "trusted": true
  123.       },
  124.       "cell_type": "code",
  125.       "source": "function equilibrium_rref(A::AbstractMatrix)\n    @assert size(A, 1) == size(A, 2)\n    R = rref!(copy(A), size(A,1)*eps(norm(A,Inf)))\n    n = size(A, 1)\n    v = zeros(eltype(A), n)\n    a = abs.(diag(R))\n    m, k = findmin(a)\n    v[k] = 1\n    for i in k-1:-1:1\n        s = zero(eltype(A))\n        for j in i+1:n\n            s += R[i,j] * v[j]\n        end\n        v[i] = -s / R[i,i]\n    end\n    return v ./ norm(v)\nend",
  126.       "execution_count": 8,
  127.       "outputs": [
  128.         {
  129.           "output_type": "execute_result",
  130.           "execution_count": 8,
  131.           "data": {
  132.             "text/plain": "equilibrium_rref (generic function with 1 method)"
  133.           },
  134.           "metadata": {}
  135.         }
  136.       ]
  137.     },
  138.     {
  139.       "metadata": {
  140.         "trusted": true
  141.       },
  142.       "cell_type": "code",
  143.       "source": "@show x = equilibrium_qr(B)\nextrema(B*x)",
  144.       "execution_count": 9,
  145.       "outputs": [
  146.         {
  147.           "output_type": "stream",
  148.           "text": "x = equilibrium_qr(B) = [0.408248, -0.816497, 0.408248, 0.0]\n",
  149.           "name": "stdout"
  150.         },
  151.         {
  152.           "output_type": "execute_result",
  153.           "execution_count": 9,
  154.           "data": {
  155.             "text/plain": "(-6.661338147750939e-16, 1.7763568394002505e-15)"
  156.           },
  157.           "metadata": {}
  158.         }
  159.       ]
  160.     },
  161.     {
  162.       "metadata": {
  163.         "trusted": true
  164.       },
  165.       "cell_type": "code",
  166.       "source": "@show y = equilibrium_rref(B)\nextrema(B*y)",
  167.       "execution_count": 10,
  168.       "outputs": [
  169.         {
  170.           "output_type": "stream",
  171.           "text": "y = equilibrium_rref(B) = [0.408248, -0.816497, 0.408248, 0.0]\n",
  172.           "name": "stdout"
  173.         },
  174.         {
  175.           "output_type": "execute_result",
  176.           "execution_count": 10,
  177.           "data": {
  178.             "text/plain": "(0.0, 0.0)"
  179.           },
  180.           "metadata": {}
  181.         }
  182.       ]
  183.     },
  184.     {
  185.       "metadata": {
  186.         "trusted": true
  187.       },
  188.       "cell_type": "code",
  189.       "source": "@show z = nullspace(B)\nextrema(B*z)",
  190.       "execution_count": 11,
  191.       "outputs": [
  192.         {
  193.           "output_type": "stream",
  194.           "text": "z = nullspace(B) = [0.408248; -0.816497; 0.408248; 7.77156e-16]\n",
  195.           "name": "stdout"
  196.         },
  197.         {
  198.           "output_type": "execute_result",
  199.           "execution_count": 11,
  200.           "data": {
  201.             "text/plain": "(-1.1102230246251565e-16, 9.992007221626409e-16)"
  202.           },
  203.           "metadata": {}
  204.         }
  205.       ]
  206.     },
  207.     {
  208.       "metadata": {
  209.         "trusted": true
  210.       },
  211.       "cell_type": "code",
  212.       "source": "@benchmark equilibrium_qr(B)",
  213.       "execution_count": 12,
  214.       "outputs": [
  215.         {
  216.           "output_type": "execute_result",
  217.           "execution_count": 12,
  218.           "data": {
  219.             "text/plain": "BenchmarkTools.Trial: \n  memory estimate:  1.28 KiB\n  allocs estimate:  9\n  --------------\n  minimum time:     3.791 μs (0.00% GC)\n  median time:      3.966 μs (0.00% GC)\n  mean time:        5.706 μs (14.74% GC)\n  maximum time:     6.155 ms (99.82% GC)\n  --------------\n  samples:          10000\n  evals/sample:     8"
  220.           },
  221.           "metadata": {}
  222.         }
  223.       ]
  224.     },
  225.     {
  226.       "metadata": {
  227.         "trusted": true
  228.       },
  229.       "cell_type": "code",
  230.       "source": "@benchmark equilibrium_rref(B)",
  231.       "execution_count": 13,
  232.       "outputs": [
  233.         {
  234.           "output_type": "execute_result",
  235.           "execution_count": 13,
  236.           "data": {
  237.             "text/plain": "BenchmarkTools.Trial: \n  memory estimate:  1.45 KiB\n  allocs estimate:  13\n  --------------\n  minimum time:     663.571 ns (0.00% GC)\n  median time:      698.348 ns (0.00% GC)\n  mean time:        915.809 ns (12.82% GC)\n  maximum time:     298.575 μs (99.68% GC)\n  --------------\n  samples:          10000\n  evals/sample:     161"
  238.           },
  239.           "metadata": {}
  240.         }
  241.       ]
  242.     },
  243.     {
  244.       "metadata": {
  245.         "trusted": true
  246.       },
  247.       "cell_type": "code",
  248.       "source": "@benchmark nullspace(B)",
  249.       "execution_count": 14,
  250.       "outputs": [
  251.         {
  252.           "output_type": "execute_result",
  253.           "execution_count": 14,
  254.           "data": {
  255.             "text/plain": "BenchmarkTools.Trial: \n  memory estimate:  3.63 KiB\n  allocs estimate:  12\n  --------------\n  minimum time:     6.251 μs (0.00% GC)\n  median time:      6.905 μs (0.00% GC)\n  mean time:        10.602 μs (16.89% GC)\n  maximum time:     11.580 ms (99.86% GC)\n  --------------\n  samples:          10000\n  evals/sample:     5"
  256.           },
  257.           "metadata": {}
  258.         }
  259.       ]
  260.     },
  261.     {
  262.       "metadata": {
  263.         "trusted": true
  264.       },
  265.       "cell_type": "code",
  266.       "source": "n = 30\n# k = rand(1:n)\nk = n ÷ 2\n@show n, k\nQ = randn(n,n)\ntmp = randn(k-1)\nQ[:,k] = Q[:,1:k-1]*tmp\nsol = [tmp[1:k-1]; -1.0; zeros(n-k)]\nsol = sol/norm(sol)\nextrema(Q*sol)",
  267.       "execution_count": 15,
  268.       "outputs": [
  269.         {
  270.           "output_type": "stream",
  271.           "text": "(n, k) = (30, 15)\n",
  272.           "name": "stdout"
  273.         },
  274.         {
  275.           "output_type": "execute_result",
  276.           "execution_count": 15,
  277.           "data": {
  278.             "text/plain": "(-4.440892098500626e-16, 4.440892098500626e-16)"
  279.           },
  280.           "metadata": {}
  281.         }
  282.       ]
  283.     },
  284.     {
  285.       "metadata": {
  286.         "trusted": true
  287.       },
  288.       "cell_type": "code",
  289.       "source": "a = equilibrium_qr(Q)\nextrema(Q*a)",
  290.       "execution_count": 16,
  291.       "outputs": [
  292.         {
  293.           "output_type": "execute_result",
  294.           "execution_count": 16,
  295.           "data": {
  296.             "text/plain": "(-4.996003610813204e-16, 5.551115123125783e-16)"
  297.           },
  298.           "metadata": {}
  299.         }
  300.       ]
  301.     },
  302.     {
  303.       "metadata": {
  304.         "trusted": true
  305.       },
  306.       "cell_type": "code",
  307.       "source": "b = equilibrium_rref(Q)\nextrema(Q*b)",
  308.       "execution_count": 17,
  309.       "outputs": [
  310.         {
  311.           "output_type": "execute_result",
  312.           "execution_count": 17,
  313.           "data": {
  314.             "text/plain": "(-4.440892098500626e-16, 8.881784197001252e-16)"
  315.           },
  316.           "metadata": {}
  317.         }
  318.       ]
  319.     },
  320.     {
  321.       "metadata": {
  322.         "trusted": true
  323.       },
  324.       "cell_type": "code",
  325.       "source": "c = nullspace(Q)\nextrema(Q*c)",
  326.       "execution_count": 18,
  327.       "outputs": [
  328.         {
  329.           "output_type": "execute_result",
  330.           "execution_count": 18,
  331.           "data": {
  332.             "text/plain": "(-2.220446049250313e-15, 1.3877787807814457e-15)"
  333.           },
  334.           "metadata": {}
  335.         }
  336.       ]
  337.     },
  338.     {
  339.       "metadata": {
  340.         "trusted": true
  341.       },
  342.       "cell_type": "code",
  343.       "source": "@benchmark equilibrium_qr(Q)",
  344.       "execution_count": 19,
  345.       "outputs": [
  346.         {
  347.           "output_type": "execute_result",
  348.           "execution_count": 19,
  349.           "data": {
  350.             "text/plain": "BenchmarkTools.Trial: \n  memory estimate:  30.09 KiB\n  allocs estimate:  9\n  --------------\n  minimum time:     296.714 μs (0.00% GC)\n  median time:      356.897 μs (0.00% GC)\n  mean time:        380.742 μs (2.94% GC)\n  maximum time:     70.192 ms (98.22% GC)\n  --------------\n  samples:          10000\n  evals/sample:     1"
  351.           },
  352.           "metadata": {}
  353.         }
  354.       ]
  355.     },
  356.     {
  357.       "metadata": {
  358.         "trusted": true
  359.       },
  360.       "cell_type": "code",
  361.       "source": "@benchmark equilibrium_rref(Q)",
  362.       "execution_count": 20,
  363.       "outputs": [
  364.         {
  365.           "output_type": "execute_result",
  366.           "execution_count": 20,
  367.           "data": {
  368.             "text/plain": "BenchmarkTools.Trial: \n  memory estimate:  20.97 KiB\n  allocs estimate:  65\n  --------------\n  minimum time:     20.060 μs (0.00% GC)\n  median time:      22.393 μs (0.00% GC)\n  mean time:        31.517 μs (22.87% GC)\n  maximum time:     48.760 ms (99.89% GC)\n  --------------\n  samples:          10000\n  evals/sample:     1"
  369.           },
  370.           "metadata": {}
  371.         }
  372.       ]
  373.     },
  374.     {
  375.       "metadata": {
  376.         "trusted": true,
  377.         "scrolled": false
  378.       },
  379.       "cell_type": "code",
  380.       "source": "@benchmark nullspace(Q)",
  381.       "execution_count": 21,
  382.       "outputs": [
  383.         {
  384.           "output_type": "execute_result",
  385.           "execution_count": 21,
  386.           "data": {
  387.             "text/plain": "BenchmarkTools.Trial: \n  memory estimate:  47.52 KiB\n  allocs estimate:  12\n  --------------\n  minimum time:     293.916 μs (0.00% GC)\n  median time:      322.841 μs (0.00% GC)\n  mean time:        379.750 μs (3.03% GC)\n  maximum time:     52.384 ms (99.23% GC)\n  --------------\n  samples:          10000\n  evals/sample:     1"
  388.           },
  389.           "metadata": {}
  390.         }
  391.       ]
  392.     },
  393.     {
  394.       "metadata": {
  395.         "trusted": true
  396.       },
  397.       "cell_type": "code",
  398.       "source": "n = 100\n# k = rand(1:n)\nk = n ÷ 2\n@show n, k\nQ = randn(n,n)\ntmp = randn(k-1)\nQ[:,k] = Q[:,1:k-1]*tmp\nsol = [tmp[1:k-1]; -1.0; zeros(n-k)]\nsol = sol/norm(sol)\nextrema(Q*sol)",
  399.       "execution_count": 22,
  400.       "outputs": [
  401.         {
  402.           "output_type": "stream",
  403.           "text": "(n, k) = (100, 50)\n",
  404.           "name": "stdout"
  405.         },
  406.         {
  407.           "output_type": "execute_result",
  408.           "execution_count": 22,
  409.           "data": {
  410.             "text/plain": "(-6.661338147750939e-16, 6.661338147750939e-16)"
  411.           },
  412.           "metadata": {}
  413.         }
  414.       ]
  415.     },
  416.     {
  417.       "metadata": {
  418.         "trusted": true
  419.       },
  420.       "cell_type": "code",
  421.       "source": "a = equilibrium_qr(Q)\nextrema(Q*a)",
  422.       "execution_count": 23,
  423.       "outputs": [
  424.         {
  425.           "output_type": "execute_result",
  426.           "execution_count": 23,
  427.           "data": {
  428.             "text/plain": "(-1.3322676295501878e-15, 1.5543122344752192e-15)"
  429.           },
  430.           "metadata": {}
  431.         }
  432.       ]
  433.     },
  434.     {
  435.       "metadata": {
  436.         "trusted": true
  437.       },
  438.       "cell_type": "code",
  439.       "source": "b = equilibrium_rref(Q)\nextrema(Q*b)",
  440.       "execution_count": 24,
  441.       "outputs": [
  442.         {
  443.           "output_type": "execute_result",
  444.           "execution_count": 24,
  445.           "data": {
  446.             "text/plain": "(-5.10702591327572e-15, 5.10702591327572e-15)"
  447.           },
  448.           "metadata": {}
  449.         }
  450.       ]
  451.     },
  452.     {
  453.       "metadata": {
  454.         "trusted": true
  455.       },
  456.       "cell_type": "code",
  457.       "source": "c = nullspace(Q)\nextrema(Q*c)",
  458.       "execution_count": 25,
  459.       "outputs": [
  460.         {
  461.           "output_type": "execute_result",
  462.           "execution_count": 25,
  463.           "data": {
  464.             "text/plain": "(-2.6645352591003757e-15, 2.886579864025407e-15)"
  465.           },
  466.           "metadata": {}
  467.         }
  468.       ]
  469.     },
  470.     {
  471.       "metadata": {
  472.         "trusted": true
  473.       },
  474.       "cell_type": "code",
  475.       "source": "@benchmark equilibrium_qr(Q)",
  476.       "execution_count": 26,
  477.       "outputs": [
  478.         {
  479.           "output_type": "execute_result",
  480.           "execution_count": 26,
  481.           "data": {
  482.             "text/plain": "BenchmarkTools.Trial: \n  memory estimate:  216.34 KiB\n  allocs estimate:  13\n  --------------\n  minimum time:     2.656 ms (0.00% GC)\n  median time:      2.949 ms (0.00% GC)\n  mean time:        3.127 ms (1.87% GC)\n  maximum time:     60.029 ms (94.73% GC)\n  --------------\n  samples:          1595\n  evals/sample:     1"
  483.           },
  484.           "metadata": {}
  485.         }
  486.       ]
  487.     },
  488.     {
  489.       "metadata": {
  490.         "trusted": true
  491.       },
  492.       "cell_type": "code",
  493.       "source": "@benchmark equilibrium_rref(Q)",
  494.       "execution_count": 27,
  495.       "outputs": [
  496.         {
  497.           "output_type": "execute_result",
  498.           "execution_count": 27,
  499.           "data": {
  500.             "text/plain": "BenchmarkTools.Trial: \n  memory estimate:  180.61 KiB\n  allocs estimate:  206\n  --------------\n  minimum time:     513.186 μs (0.00% GC)\n  median time:      542.111 μs (0.00% GC)\n  mean time:        591.065 μs (2.37% GC)\n  maximum time:     49.252 ms (98.73% GC)\n  --------------\n  samples:          8424\n  evals/sample:     1"
  501.           },
  502.           "metadata": {}
  503.         }
  504.       ]
  505.     },
  506.     {
  507.       "metadata": {
  508.         "trusted": true,
  509.         "scrolled": false
  510.       },
  511.       "cell_type": "code",
  512.       "source": "@benchmark nullspace(Q)",
  513.       "execution_count": 28,
  514.       "outputs": [
  515.         {
  516.           "output_type": "execute_result",
  517.           "execution_count": 28,
  518.           "data": {
  519.             "text/plain": "BenchmarkTools.Trial: \n  memory estimate:  483.72 KiB\n  allocs estimate:  15\n  --------------\n  minimum time:     5.191 ms (0.00% GC)\n  median time:      6.131 ms (0.00% GC)\n  mean time:        6.439 ms (1.84% GC)\n  maximum time:     62.886 ms (89.39% GC)\n  --------------\n  samples:          775\n  evals/sample:     1"
  520.           },
  521.           "metadata": {}
  522.         }
  523.       ]
  524.     },
  525.     {
  526.       "metadata": {
  527.         "trusted": true
  528.       },
  529.       "cell_type": "code",
  530.       "source": "n = 300\n# k = rand(1:n)\nk = n ÷ 2\n@show n, k\nQ = randn(n,n)\ntmp = randn(k-1)\nQ[:,k] = Q[:,1:k-1]*tmp\nsol = [tmp[1:k-1]; -1.0; zeros(n-k)]\nsol = sol/norm(sol)\nextrema(Q*sol)",
  531.       "execution_count": 29,
  532.       "outputs": [
  533.         {
  534.           "output_type": "stream",
  535.           "text": "(n, k) = (300, 150)\n",
  536.           "name": "stdout"
  537.         },
  538.         {
  539.           "output_type": "execute_result",
  540.           "execution_count": 29,
  541.           "data": {
  542.             "text/plain": "(-2.4424906541753444e-15, 1.3322676295501878e-15)"
  543.           },
  544.           "metadata": {}
  545.         }
  546.       ]
  547.     },
  548.     {
  549.       "metadata": {
  550.         "trusted": true
  551.       },
  552.       "cell_type": "code",
  553.       "source": "a = equilibrium_qr(Q)\nextrema(Q*a)",
  554.       "execution_count": 30,
  555.       "outputs": [
  556.         {
  557.           "output_type": "execute_result",
  558.           "execution_count": 30,
  559.           "data": {
  560.             "text/plain": "(-1.7763568394002505e-15, 2.220446049250313e-15)"
  561.           },
  562.           "metadata": {}
  563.         }
  564.       ]
  565.     },
  566.     {
  567.       "metadata": {
  568.         "trusted": true
  569.       },
  570.       "cell_type": "code",
  571.       "source": "b = equilibrium_rref(Q)\nextrema(Q*b)",
  572.       "execution_count": 31,
  573.       "outputs": [
  574.         {
  575.           "output_type": "execute_result",
  576.           "execution_count": 31,
  577.           "data": {
  578.             "text/plain": "(-1.2434497875801753e-14, 1.84297022087776e-14)"
  579.           },
  580.           "metadata": {}
  581.         }
  582.       ]
  583.     },
  584.     {
  585.       "metadata": {
  586.         "trusted": true
  587.       },
  588.       "cell_type": "code",
  589.       "source": "c = nullspace(Q)\nextrema(Q*c)",
  590.       "execution_count": 32,
  591.       "outputs": [
  592.         {
  593.           "output_type": "execute_result",
  594.           "execution_count": 32,
  595.           "data": {
  596.             "text/plain": "(-5.094685062006425e-15, 4.831242609835234e-15)"
  597.           },
  598.           "metadata": {}
  599.         }
  600.       ]
  601.     },
  602.     {
  603.       "metadata": {
  604.         "trusted": true
  605.       },
  606.       "cell_type": "code",
  607.       "source": "@benchmark equilibrium_qr(Q)",
  608.       "execution_count": 33,
  609.       "outputs": [
  610.         {
  611.           "output_type": "execute_result",
  612.           "execution_count": 33,
  613.           "data": {
  614.             "text/plain": "BenchmarkTools.Trial: \n  memory estimate:  1.55 MiB\n  allocs estimate:  13\n  --------------\n  minimum time:     11.598 ms (0.00% GC)\n  median time:      12.640 ms (0.00% GC)\n  mean time:        13.028 ms (2.26% GC)\n  maximum time:     75.597 ms (82.57% GC)\n  --------------\n  samples:          384\n  evals/sample:     1"
  615.           },
  616.           "metadata": {}
  617.         }
  618.       ]
  619.     },
  620.     {
  621.       "metadata": {
  622.         "trusted": true
  623.       },
  624.       "cell_type": "code",
  625.       "source": "@benchmark equilibrium_rref(Q)",
  626.       "execution_count": 34,
  627.       "outputs": [
  628.         {
  629.           "output_type": "execute_result",
  630.           "execution_count": 34,
  631.           "data": {
  632.             "text/plain": "BenchmarkTools.Trial: \n  memory estimate:  1.46 MiB\n  allocs estimate:  606\n  --------------\n  minimum time:     16.774 ms (0.00% GC)\n  median time:      17.592 ms (0.00% GC)\n  mean time:        20.066 ms (1.57% GC)\n  maximum time:     72.141 ms (72.59% GC)\n  --------------\n  samples:          249\n  evals/sample:     1"
  633.           },
  634.           "metadata": {}
  635.         }
  636.       ]
  637.     },
  638.     {
  639.       "metadata": {
  640.         "trusted": true,
  641.         "scrolled": true
  642.       },
  643.       "cell_type": "code",
  644.       "source": "@benchmark nullspace(Q)",
  645.       "execution_count": 35,
  646.       "outputs": [
  647.         {
  648.           "output_type": "execute_result",
  649.           "execution_count": 35,
  650.           "data": {
  651.             "text/plain": "BenchmarkTools.Trial: \n  memory estimate:  4.16 MiB\n  allocs estimate:  16\n  --------------\n  minimum time:     53.393 ms (0.00% GC)\n  median time:      57.721 ms (0.00% GC)\n  mean time:        58.873 ms (1.84% GC)\n  maximum time:     110.145 ms (49.05% GC)\n  --------------\n  samples:          85\n  evals/sample:     1"
  652.           },
  653.           "metadata": {}
  654.         }
  655.       ]
  656.     },
  657.     {
  658.       "metadata": {
  659.         "trusted": true
  660.       },
  661.       "cell_type": "code",
  662.       "source": "n = 1000\n# k = rand(1:n)\nk = n ÷ 2\n@show n, k\nQ = randn(n,n)\ntmp = randn(k-1)\nQ[:,k] = Q[:,1:k-1]*tmp\nsol = [tmp[1:k-1]; -1.0; zeros(n-k)]\nsol = sol/norm(sol)\nextrema(Q*sol)",
  663.       "execution_count": 36,
  664.       "outputs": [
  665.         {
  666.           "output_type": "stream",
  667.           "text": "(n, k) = (1000, 500)\n",
  668.           "name": "stdout"
  669.         },
  670.         {
  671.           "output_type": "execute_result",
  672.           "execution_count": 36,
  673.           "data": {
  674.             "text/plain": "(-2.220446049250313e-15, 2.220446049250313e-15)"
  675.           },
  676.           "metadata": {}
  677.         }
  678.       ]
  679.     },
  680.     {
  681.       "metadata": {
  682.         "trusted": true
  683.       },
  684.       "cell_type": "code",
  685.       "source": "a = equilibrium_qr(Q)\nextrema(Q*a)",
  686.       "execution_count": 37,
  687.       "outputs": [
  688.         {
  689.           "output_type": "execute_result",
  690.           "execution_count": 37,
  691.           "data": {
  692.             "text/plain": "(-2.6645352591003757e-15, 3.1086244689504383e-15)"
  693.           },
  694.           "metadata": {}
  695.         }
  696.       ]
  697.     },
  698.     {
  699.       "metadata": {
  700.         "trusted": true
  701.       },
  702.       "cell_type": "code",
  703.       "source": "b = equilibrium_rref(Q)\nextrema(Q*b)",
  704.       "execution_count": 38,
  705.       "outputs": [
  706.         {
  707.           "output_type": "execute_result",
  708.           "execution_count": 38,
  709.           "data": {
  710.             "text/plain": "(-1.1246559239452836e-13, 7.638334409421077e-14)"
  711.           },
  712.           "metadata": {}
  713.         }
  714.       ]
  715.     },
  716.     {
  717.       "metadata": {
  718.         "trusted": true
  719.       },
  720.       "cell_type": "code",
  721.       "source": "c = nullspace(Q)\nextrema(Q*c)",
  722.       "execution_count": 39,
  723.       "outputs": [
  724.         {
  725.           "output_type": "execute_result",
  726.           "execution_count": 39,
  727.           "data": {
  728.             "text/plain": "(-6.573094430595726e-15, 3.076616599214022e-14)"
  729.           },
  730.           "metadata": {}
  731.         }
  732.       ]
  733.     },
  734.     {
  735.       "metadata": {
  736.         "trusted": true
  737.       },
  738.       "cell_type": "code",
  739.       "source": "@benchmark equilibrium_qr(Q)",
  740.       "execution_count": 40,
  741.       "outputs": [
  742.         {
  743.           "output_type": "execute_result",
  744.           "execution_count": 40,
  745.           "data": {
  746.             "text/plain": "BenchmarkTools.Trial: \n  memory estimate:  15.84 MiB\n  allocs estimate:  13\n  --------------\n  minimum time:     89.966 ms (0.00% GC)\n  median time:      98.310 ms (2.00% GC)\n  mean time:        102.481 ms (2.73% GC)\n  maximum time:     177.349 ms (29.93% GC)\n  --------------\n  samples:          50\n  evals/sample:     1"
  747.           },
  748.           "metadata": {}
  749.         }
  750.       ]
  751.     },
  752.     {
  753.       "metadata": {
  754.         "trusted": true
  755.       },
  756.       "cell_type": "code",
  757.       "source": "@benchmark equilibrium_rref(Q)",
  758.       "execution_count": 41,
  759.       "outputs": [
  760.         {
  761.           "output_type": "execute_result",
  762.           "execution_count": 41,
  763.           "data": {
  764.             "text/plain": "BenchmarkTools.Trial: \n  memory estimate:  15.59 MiB\n  allocs estimate:  2006\n  --------------\n  minimum time:     5.239 s (0.00% GC)\n  median time:      5.239 s (0.00% GC)\n  mean time:        5.239 s (0.00% GC)\n  maximum time:     5.239 s (0.00% GC)\n  --------------\n  samples:          1\n  evals/sample:     1"
  765.           },
  766.           "metadata": {}
  767.         }
  768.       ]
  769.     },
  770.     {
  771.       "metadata": {
  772.         "trusted": true
  773.       },
  774.       "cell_type": "code",
  775.       "source": "@benchmark nullspace(Q)",
  776.       "execution_count": 42,
  777.       "outputs": [
  778.         {
  779.           "output_type": "execute_result",
  780.           "execution_count": 42,
  781.           "data": {
  782.             "text/plain": "BenchmarkTools.Trial: \n  memory estimate:  45.91 MiB\n  allocs estimate:  16\n  --------------\n  minimum time:     872.940 ms (0.46% GC)\n  median time:      914.451 ms (0.83% GC)\n  mean time:        918.522 ms (2.72% GC)\n  maximum time:     984.217 ms (7.14% GC)\n  --------------\n  samples:          6\n  evals/sample:     1"
  783.           },
  784.           "metadata": {}
  785.         }
  786.       ]
  787.     },
  788.     {
  789.       "metadata": {
  790.         "trusted": true
  791.       },
  792.       "cell_type": "code",
  793.       "source": "",
  794.       "execution_count": null,
  795.       "outputs": []
  796.     }
  797.   ],
  798.   "metadata": {
  799.     "kernelspec": {
  800.       "name": "julia-1.1",
  801.       "display_name": "Julia 1.1.1",
  802.       "language": "julia"
  803.     },
  804.     "toc": {
  805.       "nav_menu": {},
  806.       "number_sections": true,
  807.       "sideBar": true,
  808.       "skip_h1_title": false,
  809.       "base_numbering": 1,
  810.       "title_cell": "Table of Contents",
  811.       "title_sidebar": "Contents",
  812.       "toc_cell": false,
  813.       "toc_position": {},
  814.       "toc_section_display": true,
  815.       "toc_window_display": false
  816.     },
  817.     "language_info": {
  818.       "file_extension": ".jl",
  819.       "name": "julia",
  820.       "mimetype": "application/julia",
  821.       "version": "1.1.1"
  822.     },
  823.     "@webio": {
  824.       "lastKernelId": null,
  825.       "lastCommId": null
  826.     },
  827.     "gist": {
  828.       "id": "",
  829.       "data": {
  830.         "description": "QR vs. RREF",
  831.         "public": true
  832.       }
  833.     }
  834.   },
  835.   "nbformat": 4,
  836.   "nbformat_minor": 2
  837. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top