|
590 | 590 | 따라서, $A$는 4차원 공간 상에서 $\left(\frac45,-\frac{22}3,0,0\right)$를 지나고 두 벡터 $\left(1,22,10,0\right)$, $\left(-1,7,0,5\right)$를 basis로 하는 평면이다.
|
591 | 591 |
|
592 | 592 |
|
593 |
| -# 3. code implementation |
| 593 | +# 3. code implementation |
| 594 | + |
| 595 | +가우스 소거법의 목적은 연립방정식을 푸는 데 있다. |
| 596 | +그래서 그런지 `numpy`나 `scipy`에서 가우스 소거법을 말그대로 실행하는 코드는 찾지 못했다. |
| 597 | +연립방정식을 '푸는' 메소드 `numpy.linalg.solve(a,b)`는 있어도 가우스 소거법의 각 과정을 학습 목적상으로 구현해주는 코드는 없어 보이는 것이다. |
| 598 | +그러니까, 어떤 연립방정식이 주어졌을 때 그 연립방정식에 대해 가우스 소거법을 적용한 결과인 augmented matrix 형태를 얻을 수 있다면 참 좋겠는데, 그런 것을 제공하는 라이브러리는 못찾겠다. |
| 599 | +아마도 `numpy.linalg.solve` 내에 가우스 소거법이 들어가있겠지만, trivial한 경우 (해집합이 공집합이거나 무한집합인 경우)에 대해서는 오류를 낼 뿐이지 affine space의 단초가 되는 augmented matrix를 결과로 도출하지는 않는 것이다. |
| 600 | + |
| 601 | +물론, 그렇게 어려운 알고리즘이 아니니 직접 구현할 수도 있을 것이다. |
| 602 | +[`geeksforgeeks`](https://www.geeksforgeeks.org/dsa/gaussian-elimination/)에 보니 가우스 소거법 코드가 있다. |
| 603 | +이걸 적절히 변형하면 결과로 나오는 augmented matrix를 얻는 코드드 얻어낼 수도 있겠다. |
| 604 | + |
| 605 | +``` |
| 606 | +N = 3 |
| 607 | +def gaussianElimination(mat): |
| 608 | + for k in range(N): |
| 609 | + i_max = max(range(k, N), key=lambda i: abs(mat[i][k])) |
| 610 | + if mat[i_max][k] == 0: |
| 611 | + print("Singular Matrix.") |
| 612 | + print("Inconsistent System." if mat[i_max][N] |
| 613 | + else "May have infinitely many solutions.") |
| 614 | + return |
| 615 | + mat[k], mat[i_max] = mat[i_max], mat[k] |
| 616 | +
|
| 617 | + for i in range(k + 1, N): |
| 618 | + f = mat[i][k] / mat[k][k] |
| 619 | + mat[i][k + 1:] = [mat[i][j] - f * mat[k][j] |
| 620 | + for j in range(k + 1, N + 1)] |
| 621 | + mat[i][k] = 0 |
| 622 | +
|
| 623 | + x = [0] * N |
| 624 | + for i in range(N - 1, -1, -1): |
| 625 | + x[i] = (mat[i][N] - sum(mat[i][j] * x[j] |
| 626 | + for j in range(i + 1, N))) / mat[i][i] |
| 627 | +
|
| 628 | + print("\nSolution for the system:") |
| 629 | + for xi in x: |
| 630 | + print(f"{xi:.8f}") |
| 631 | +
|
| 632 | +mat = [[3.0, 2.0, -4.0, 3.0], [2.0, 3.0, 3.0, 15.0], [5.0, -3.0, 1.0, 14.0]] |
| 633 | +gaussianElimination(mat) |
| 634 | +``` |
| 635 | + |
| 636 | +다른 곳에도 이와 비슷한 코드들이 있는 것으로 보인다. |
| 637 | + |
| 638 | +# 4. |
| 639 | + |
| 640 | +무언가 스트레스를 받거나 일신상의 변화가 생기면, 이런 식으로 수학 글을 쓰고 싶어진다. |
| 641 | +이런 걸 순수수학이라고 해야할까, 응용수학이라고 해야 할까. |
| 642 | +순수수학이라고 하기엔 너무 기초적인 수학이고 응용수학이라고 하기엔 나는 성향상 코드 implementation이나 활용방안에 대해 관심이 있기 보다는 해당 주제의 수학적인 원리나 증명을 자세히 수행하기를 더 선호하는 것이다. |
| 643 | +결국 돈을 벌거나 '실제로 유용한' 무언가를 해낸다기 보다는 잘 알려져 있는 사실을 잘 정리하여 만족스러운 정도로 서술하는 것에서 만족감을 느낄 뿐이다. |
| 644 | + |
| 645 | +새로 시작하게 된 업무를 위해서는 DDPG를 공부해야 할 필요가 있다. |
| 646 | +어제 세미나에서 보게 된 DQN은 재미있었다. |
| 647 | +대학원에서 나는 DQN을 구현해내지 못해 사람들 앞에서 망신을 당했었다. |
| 648 | +그런데 다시 DQN의 원리를 보니 그렇게까지 어려울 것이 아니라는 생각이 문득 든다. |
| 649 | +발표해주신 분들과 커멘트를 해주신 교수님 덕이겠지만, 대학원 때는 왜 이것이 그렇게 어려웠을까 싶다. |
| 650 | + |
| 651 | +어쩌면 지도교수님의, 수학과 특유의 성향, 그러니까 위에 언급한 내가 보이는 것과 같은 성향 때문에, DRN(deep reinforcement learning)을 너무 진지하게 이해하려 했던 것이 내 머리를 경직시킨 것은 아니었을까. |
| 652 | +그때 공부했던 것이 있기에 지금 잘 이해가 되는 것이기도 하지만, 당시의 나는 머리가 움직이지 않았다. |
| 653 | +그만큼 대학원에서의 시기는 힘들었다. |
| 654 | +교수님이 얼마나 괜찮았건, 혹은 날 배려해주셨건 상관 없이 머릿속이 늘 복잡했고 압박을 받는 심리상태가 있었다. |
| 655 | + |
| 656 | +DDPG를 공부해야 한다면, 나는 공부할 수 있을 수도 있다. |
| 657 | +말하자면, 내 이해력은 그래도 충분할 지도 모르는 것이다. |
| 658 | +하지만 실제로 내가 그것을 해낼 수 있을지, 아니면 해내게 될는지 하는 것은 모르는 일이다. |
| 659 | +이제껏 많은 '이해해야 하는 것'들을 이해하지 못한 경우가 수두룩했으니. |
| 660 | +DDPG를 '구현'해내기까지 해야 한다면 더 열심히 해야 하는 부분이 있다. |
| 661 | + |
| 662 | +하지만, '열심히' 한다는 것과 '원리를 이해'하는 것은, 부차적인 문제가 되어야 한다는 것이다. |
| 663 | +중요한 것은 해당되는 일에 몰입할 수 있는 환경과 마음상태를 조성하는 것이다. |
| 664 | +그것이 갖춰지고 나면, 나는 열심히 하는 사람이고 또 원리를 이해하려고 하는 사람이라고 생각한다. |
| 665 | +나는 여건이 갖춰지면 가치있는 무언가를 만들어내는 사람이라고 생각한다. |
| 666 | +편안한 마음을 가지고 최대한 노력하자. |
| 667 | +실패한다면 뭐 어쩔 수 없겠지만, 그래도 해보면 되겠다. |
0 commit comments