Advertisement
Guest User

Untitled

a guest
Jul 16th, 2019
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 26.12 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement