<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://isaac-kwon.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://isaac-kwon.github.io/" rel="alternate" type="text/html" /><updated>2026-07-13T05:12:56+09:00</updated><id>https://isaac-kwon.github.io/feed.xml</id><title type="html">Minjae Isaac Kwon</title><subtitle>Personal Website</subtitle><author><name>Minjae Isaac Kwon</name></author><entry><title type="html">X11 Forwarding 환경에서 DISPLAY 변수 가져오기</title><link href="https://isaac-kwon.github.io/xdisplay-environment/" rel="alternate" type="text/html" title="X11 Forwarding 환경에서 DISPLAY 변수 가져오기" /><published>2023-01-25T00:00:00+09:00</published><updated>2023-01-25T00:00:00+09:00</updated><id>https://isaac-kwon.github.io/xdisplay-environment</id><content type="html" xml:base="https://isaac-kwon.github.io/xdisplay-environment/"><![CDATA[<h2 id="오류">오류</h2>

<p><code class="language-plaintext highlighter-rouge">tmux</code>나 <code class="language-plaintext highlighter-rouge">screen</code> 환경을 활용하면서 <code class="language-plaintext highlighter-rouge">X11Forwarding</code> 을 쓰고있을 때, 창을 띄우려고 하면 다음과 같은 오류가 날 때가 있습니다.</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Error: Can't open display: 127.0.0.1:1
</code></pre></div></div>

<p>본 오류는 shell 에 기존에 잡혀있던 환경변수 중 <code class="language-plaintext highlighter-rouge">DISPLAY</code> 가 현재 SSH 로 연결된 X11 소켓과 다른 경우 발생합니다. ssh 로 접속한 후 열린 shell 에서는 발생하지 않고, 접속 전부터 실행중이던 <code class="language-plaintext highlighter-rouge">tmux</code> 세션을 <code class="language-plaintext highlighter-rouge">attach</code> 했을 때, 그 세션에서 발생합니다.</p>

<h2 id="해결-방법">해결 방법</h2>

<p>본 오류는 <code class="language-plaintext highlighter-rouge">DISPLAY</code> 환경변수를 바꿔주는 것만으로 바로 작동합니다.</p>

<ol>
  <li>올바른 <code class="language-plaintext highlighter-rouge">DISPLAY</code> 환경변수가 무엇인지 찾고</li>
  <li>그 환경변수를 적용하기만 하면 됩니다.</li>
</ol>

<h3 id="초간단-적용방법">초간단 적용방법</h3>

<p>가장 간단하게는, <strong>새로운 shell 을 열고</strong> 다음과 같이 입력합니다. (tmux 세션 안에서 발생한 문제였던 경우, 그 세션을 detatch 해서 빠져나오기만 해도 됩니다.) <strong>환경변수를 참고하는 shell 에서 xclock, xeyes 등 X11Forwarding 은 작동해야합니다.</strong></p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span><span class="nb">export</span> | <span class="nb">grep </span>DISPLAY
<span class="c"># &gt;&gt; 다음과 같이 출력됩니다. ('='뒤의 것들은 다를 수 있습니다.)</span>
<span class="nb">declare</span> <span class="nt">-x</span> <span class="nv">DISPLAY</span><span class="o">=</span><span class="s2">"127.0.0.1:5"</span>
</code></pre></div></div>

<p>이것은, 처음의 shell 에서 127.0.0.1:1 가 아닌, 127.0.0.1:5 여야 한다는 것을 의미합니다.<br />
원래의 shell 로 돌아가서, 다음과 같이 입력하면 됩니다.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">export </span><span class="nv">DISPLAY</span><span class="o">=</span>127.0.0.1:5
</code></pre></div></div>

<p>그러면 해당 shell 에서도 <code class="language-plaintext highlighter-rouge">xclock</code>, <code class="language-plaintext highlighter-rouge">xeyes</code> 를 작동하였을 때에도 <code class="language-plaintext highlighter-rouge">X11Forwarding</code> 이 제대로 작동합니다.</p>

<h3 id="다른-shell-쓰지-않고-해결하기">다른 Shell 쓰지 않고 해결하기</h3>

<p>올바른 <code class="language-plaintext highlighter-rouge">DISPLAY</code> 를 찾는 방법을, 다음 StackExchange 에서 찾을 수 있습니다. <a href="https://unix.stackexchange.com/questions/429092/" target="_blank">https://unix.stackexchange.com/questions/429092/</a></p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>ps <span class="nt">-u</span> <span class="si">$(</span><span class="nb">id</span> <span class="nt">-u</span><span class="si">)</span> <span class="nt">-o</span> <span class="nv">pid</span><span class="o">=</span> |
  xargs <span class="nt">-I</span><span class="o">{}</span> <span class="nb">cat</span> /proc/<span class="o">{}</span>/environ 2&gt;/dev/null |
  <span class="nb">tr</span> <span class="s1">'\0'</span> <span class="s1">'\n'</span> |
  <span class="nb">grep</span> <span class="nt">-m1</span> <span class="s1">'^DISPLAY='</span>
<span class="c"># &gt;&gt; 다음과 같이 출력됩니다. ('='뒤의 것들은 다를 수 있습니다.)</span>
<span class="nv">DISPLAY</span><span class="o">=</span>127.0.0.1:5
</code></pre></div></div>

<p>위와 같은 결과를 얻었을 때, 결과값을 긁어다가, 다음과 같이 shell 에 입력하면 됩니다.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">export </span><span class="nv">DISPLAY</span><span class="o">=</span>127.0.0.1:5
</code></pre></div></div>

<h3 id="자동화">자동화</h3>

<p>위 과정을 한번에 묶어서 한번에 할 수 있게 <code class="language-plaintext highlighter-rouge">alias</code> 를 만들면, 다음과 같습니다. 다음과 같은 shell script 를 <code class="language-plaintext highlighter-rouge">.bash_profile</code> 이나 <code class="language-plaintext highlighter-rouge">.bashrc</code> 에 넣어두면, <code class="language-plaintext highlighter-rouge">xx</code> 만 입력해주면 올바른 DISPLAY 환경변수를 자동으로 설정해줍니다.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">alias </span><span class="nv">xx</span><span class="o">=</span><span class="s2">"export </span><span class="se">\$</span><span class="s2">(ps -u </span><span class="se">\$</span><span class="s2">(id -u) -o pid= | xargs -I{} cat /proc/{}/environ 2&gt;/dev/null | tr '</span><span class="se">\0</span><span class="s2">' '</span><span class="se">\n</span><span class="s2">' | grep -m1 '^DISPLAY=')"</span>
</code></pre></div></div>

<h2 id="참고자료">참고자료</h2>

<p><a href="https://unix.stackexchange.com/questions/429092/" target="_blank">https://unix.stackexchange.com/questions/429092/</a></p>]]></content><author><name>Minjae Isaac Kwon</name></author><summary type="html"><![CDATA[오류]]></summary></entry><entry><title type="html">macOS에서 ping 이 매우 튀는 현상</title><link href="https://isaac-kwon.github.io/posts/ping-spike-macos/" rel="alternate" type="text/html" title="macOS에서 ping 이 매우 튀는 현상" /><published>2023-01-25T00:00:00+09:00</published><updated>2023-01-25T00:00:00+09:00</updated><id>https://isaac-kwon.github.io/posts/ping-spike-macos</id><content type="html" xml:base="https://isaac-kwon.github.io/posts/ping-spike-macos/"><![CDATA[<p>macOS 에서, <strong><em>Wi-Fi 환경에서</em></strong> ping 이 가끔, 엄청 튀는 경우가 있습니다. 이러한 현상은 외부 망으로 접속하는 것 뿐만 아니라 <em>내부망</em> 에서 통신하는 경우도 발생합니다. 특징적인 부분은 <strong><em>Wi-Fi환경</em></strong> 에서만 발생한다는 것입니다. 이러한 ping 증가는 평시에는 큰 문제가 없으나, 실시간 상호작용을 하는 ping 이 매우 중요한 환경, 예를 들면 NVIDIA Geforce NOW 나 Stadia(지금은 중단됐지만)와 같은 클라우드 게이밍에서 화면과 소리가 끊기는 현상을 만들 수 있습니다.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>64 bytes from 192.168.0.254: icmp_seq=508 ttl=64 time=1.762 ms
64 bytes from 192.168.0.254: icmp_seq=509 ttl=64 time=2.015 ms
64 bytes from 192.168.0.254: icmp_seq=510 ttl=64 time=1.912 ms
64 bytes from 192.168.0.254: icmp_seq=511 ttl=64 time=72.796 ms
64 bytes from 192.168.0.254: icmp_seq=512 ttl=64 time=1.583 ms
64 bytes from 192.168.0.254: icmp_seq=513 ttl=64 time=1.733 ms
64 bytes from 192.168.0.254: icmp_seq=514 ttl=64 time=1.579 ms
64 bytes from 192.168.0.254: icmp_seq=515 ttl=64 time=1.818 ms
64 bytes from 192.168.0.254: icmp_seq=516 ttl=64 time=1.631 ms
64 bytes from 192.168.0.254: icmp_seq=517 ttl=64 time=1.504 ms
64 bytes from 192.168.0.254: icmp_seq=518 ttl=64 time=1.601 ms
64 bytes from 192.168.0.254: icmp_seq=519 ttl=64 time=3.607 ms
64 bytes from 192.168.0.254: icmp_seq=520 ttl=64 time=1.784 ms
64 bytes from 192.168.0.254: icmp_seq=521 ttl=64 time=80.346 ms
64 bytes from 192.168.0.254: icmp_seq=522 ttl=64 time=1.592 ms
64 bytes from 192.168.0.254: icmp_seq=523 ttl=64 time=3.625 ms
</code></pre></div></div>

<p>80ms 에서, 가끔은 300ms 까지 ping 이 늘어나기도 합니다. 본 현상은 macOS의 에서 활용중인 다른 기능에 의해 ping 을 잡아먹는 것이며 (주로 브로드캐스트에 의해서) 가장 간단한 해결책은 <strong><em>무선인터넷을 쓰지 않고 유선 연결을 쓰는 것</em></strong>입니다.</p>

<h2 id="예상할-수-있는-원인">예상할 수 있는 원인</h2>

<ul>
  <li>Wi-Fi 찾기</li>
  <li>AirDrop</li>
  <li>Location Service Setup</li>
</ul>

<h2 id="테스트-방법">테스트 방법</h2>

<p>여러 방법을 통해 테스트하면서 해결되었는지 파악할 수 있습니다.</p>

<h3 id="핑테스트">핑테스트</h3>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ping <span class="nt">-i</span> 0.25 192.168.0.254 <span class="nt">--apple-time</span>
</code></pre></div></div>

<h2 id="해결-방법">해결 방법</h2>

<ol>
  <li>다른 와이파이 등을 찾는 행동을 <strong>하지 않습니다</strong></li>
  <li>AirDrop 을 끕니다.</li>
  <li>(한국어) 시스템 설정 -&gt; 위치 서비스 -&gt; (가장 아래) 시스템 서비스 [상세]-&gt; 네트워킹 및 무선 (Networking and Wireless) <strong>끄기</strong>  <br />
(영어) System Setting -&gt; Location Service -&gt; System Service [Detail] -&gt; Networking and Wireless <strong>끄기</strong> <br />
<strong>또는,</strong> 위치 서비스(Location Service) 자체를 끕니다.</li>
</ol>

<h2 id="참고할만한-페이지">참고할만한 페이지</h2>

<ul>
  <li><a href="https://developer.apple.com/forums/thread/97805" target="_blank">Apple Developer Thread 97805</a></li>
  <li><a href="https://apple.stackexchange.com/questions/263638/macbook-pro-experiencing-ping-spikes-to-local-router" target="_blank">Apple StackExchange MacBook Pro experiencing ping spikes to local router</a></li>
  <li><a href="http://osxdaily.com/2016/09/22/fix-wi-fi-problems-macos-sierra/9" target="_blank">OS X Daily Fix Wi-Fi Problems in macOS Sierra</a></li>
</ul>]]></content><author><name>Minjae Isaac Kwon</name></author><category term="posts" /><category term="post" /><summary type="html"><![CDATA[macOS 에서, Wi-Fi 환경에서 ping 이 가끔, 엄청 튀는 경우가 있습니다. 이러한 현상은 외부 망으로 접속하는 것 뿐만 아니라 내부망 에서 통신하는 경우도 발생합니다. 특징적인 부분은 Wi-Fi환경 에서만 발생한다는 것입니다. 이러한 ping 증가는 평시에는 큰 문제가 없으나, 실시간 상호작용을 하는 ping 이 매우 중요한 환경, 예를 들면 NVIDIA Geforce NOW 나 Stadia(지금은 중단됐지만)와 같은 클라우드 게이밍에서 화면과 소리가 끊기는 현상을 만들 수 있습니다.]]></summary></entry><entry><title type="html">scp 와 echo</title><link href="https://isaac-kwon.github.io/scperror/" rel="alternate" type="text/html" title="scp 와 echo" /><published>2022-04-12T00:00:00+09:00</published><updated>2022-04-12T00:00:00+09:00</updated><id>https://isaac-kwon.github.io/scperror</id><content type="html" xml:base="https://isaac-kwon.github.io/scperror/"><![CDATA[<p>scp 를 할 때, 목적지 계정의 <code class="language-plaintext highlighter-rouge">.bashrc</code> 등에 <code class="language-plaintext highlighter-rouge">echo</code> 커맨드가 있는 등의, shell의 시작시 실행하는 stdout 출력이 있으면 <code class="language-plaintext highlighter-rouge">scp</code> 와 같은 <code class="language-plaintext highlighter-rouge">ssh</code> 기반 커맨드가 제대로 듣지 않을 수 있습니다.</p>

<p>그럴 경우, stdout 이 있는 커맨드보다 위에</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    <span class="k">if</span> <span class="o">[</span> <span class="nt">-z</span> <span class="s2">"</span><span class="nv">$PS1</span><span class="s2">"</span> <span class="o">]</span><span class="p">;</span> <span class="k">then
        return
    fi</span>
</code></pre></div></div>

<p>를 추가하면 됩니다.</p>

<p>shell stdin 앞단 표기되는 유저 및 호스트네임 표기부(위의 <code class="language-plaintext highlighter-rouge">$PS1</code>) 가 없는 경우, shell script 전체를 return 하는 방식입니다.</p>]]></content><author><name>Minjae Isaac Kwon</name></author><summary type="html"><![CDATA[scp 를 할 때, 목적지 계정의 .bashrc 등에 echo 커맨드가 있는 등의, shell의 시작시 실행하는 stdout 출력이 있으면 scp 와 같은 ssh 기반 커맨드가 제대로 듣지 않을 수 있습니다.]]></summary></entry><entry><title type="html">드라마: 연구소 사람들</title><link href="https://isaac-kwon.github.io/posts/drama-labpeople/" rel="alternate" type="text/html" title="드라마: 연구소 사람들" /><published>2022-04-04T00:00:00+09:00</published><updated>2022-04-04T00:00:00+09:00</updated><id>https://isaac-kwon.github.io/posts/drama-labpeople</id><content type="html" xml:base="https://isaac-kwon.github.io/posts/drama-labpeople/"><![CDATA[<p>‘기상청 사람들’ 이라는 드라마를 보다가, ‘연구소 사람들’ 이라는 드라마를 만들면 되겠다는 생각이 들어서 대충 구상해봄.</p>

<h2 id="시놉시스">시놉시스</h2>

<h2 id="상세-요소">상세 요소</h2>

<h3 id="주요-촬영-장소">주요 촬영 장소</h3>

<p>한국 중이온가속기(RAON), 스위스 유럽원자핵연구소(CERN), 미국 브룩헤이븐국립연구소(BNL), 서울대, 부산대, 고려대, 연세대, 인하대 등 주요 고에너지 입자 및 핵물리학 연구 대학</p>

<h3 id="등장-요소">등장 요소</h3>

<table>
  <thead>
    <tr>
      <th style="text-align: center">카테고리</th>
      <th style="text-align: center">요소</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center">고에너지 뽕</td>
      <td style="text-align: center">가속관, 대형 실험 검출기</td>
    </tr>
    <tr>
      <td style="text-align: center">업무 관련</td>
      <td style="text-align: center">협동 연구, 데이터 분석, 그리드/클러스터 컴퓨팅</td>
    </tr>
    <tr>
      <td style="text-align: center">학업 관련</td>
      <td style="text-align: center">디펜스, 졸업</td>
    </tr>
    <tr>
      <td style="text-align: center">기타</td>
      <td style="text-align: center">역마살, 국제학회와 발표, 수시로 물리드립</td>
    </tr>
  </tbody>
</table>

<h3 id="등장인물">등장인물</h3>

<style>
  tr, td, th {
    min-width: 4em;
  }
</style>

<table>
  <thead>
    <tr>
      <th style="text-align: center">인물명</th>
      <th style="text-align: center">분류</th>
      <th style="text-align: center">소개</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center">갑</td>
      <td style="text-align: center">주연 1</td>
      <td style="text-align: center">박사과정 1년차, 석사 과정을 고체물리학 분야로 졸업하고, 고에너지 물리학에 뜻이 있어 입학한다.</td>
    </tr>
    <tr>
      <td style="text-align: center">을</td>
      <td style="text-align: center">주연 2</td>
      <td style="text-align: center">석사과정 2년차</td>
    </tr>
    <tr>
      <td style="text-align: center">병</td>
      <td style="text-align: center">조연 1</td>
      <td style="text-align: center">박사과정 5년차(졸업연차)</td>
    </tr>
    <tr>
      <td style="text-align: center">정</td>
      <td style="text-align: center">조연 2</td>
      <td style="text-align: center"> </td>
    </tr>
    <tr>
      <td style="text-align: center">무</td>
      <td style="text-align: center">조연 3</td>
      <td style="text-align: center">박사후 연구원</td>
    </tr>
  </tbody>
</table>

<h2 id="회별-진행">회별 진행</h2>

<p>(총 15회; 3+4+3+3+2)</p>

<h3 id="phase-1">Phase 1</h3>

<blockquote>
  <p>고에너지 뽕팔이 (봄)</p>
</blockquote>

<ul>
  <li>1회<br />
을, 병, 정이 있는 대학 연구실에 갑이 들어온다. 연구 뽕을 판다. (여름방학으로 스킵) 대전 중이온가속기로 출장을 가고, 해야할 일을 배정받는다.</li>
  <li>
    <p>2회</p>
  </li>
  <li>3회</li>
</ul>

<h3 id="phase-2">Phase 2</h3>

<blockquote>
  <p>노가다와 실험 (여름-1)</p>
</blockquote>

<ul>
  <li>4회</li>
  <li>5회</li>
  <li>6회</li>
</ul>

<h3 id="phase-3">Phase 3</h3>

<blockquote>
  <p>국제 협력연구 (여름-2)</p>
</blockquote>

<ul>
  <li>7회<br />
시스템 중 하나가 유럽에서 개발된 것이어서, 동일한 시스템 구축을 위해서는 직접 유럽으로 가서 직접 노하우를 익혀와야 한다는 이야기를 듣는다. 시간이 없어 당장 갔다오라는 말에, 갑,을,병은 이틀 후 새벽 제네바행 비행기를 탄다. 급하게 숙소를 잡느라, 프랑스 사이드에 숙소를 잡는다. 하루에 국경만 4번을 넘는다.</li>
  <li>8회</li>
  <li>9회
    <ul>
      <li>LHC Central Shift</li>
      <li>실험이 조져진다<br />
옆나라에서 지진으로 바닷물이 들어와 실험이 조져진 이야기<br />
LHC 가 조져져서 2년간 학위를 못받은 이야기</li>
    </ul>
  </li>
  <li>10회<br />
국제 고위급 회담으로 제네바 시내에 시간제 통행금지가 걸린다. 귀국을 위해 국경을 넘다가, 검문을 당한다.</li>
</ul>

<h3 id="phase-4">Phase 4</h3>

<blockquote>
  <p>국제 학회; 하이원 (겨울)</p>
</blockquote>

<ul>
  <li>11회</li>
  <li>12회<br />
강원랜드 카지노에 간 참석자들 <a href="http://physicsbuzz.physicscentral.com/2015/09/one-winning-move.html" target="_blank">참고</a></li>
  <li>13회</li>
</ul>

<h3 id="마지막회">마지막회</h3>

<blockquote>
  <p>학위논문과 졸업 (초여름)</p>
</blockquote>

<ul>
  <li>14회</li>
  <li>15회</li>
</ul>]]></content><author><name>Minjae Isaac Kwon</name></author><category term="posts" /><category term="post" /><summary type="html"><![CDATA[‘기상청 사람들’ 이라는 드라마를 보다가, ‘연구소 사람들’ 이라는 드라마를 만들면 되겠다는 생각이 들어서 대충 구상해봄.]]></summary></entry><entry><title type="html">네트워크 속도 테스트 방법</title><link href="https://isaac-kwon.github.io/posts/network-test/" rel="alternate" type="text/html" title="네트워크 속도 테스트 방법" /><published>2022-02-19T00:00:00+09:00</published><updated>2022-02-19T00:00:00+09:00</updated><id>https://isaac-kwon.github.io/posts/network-test</id><content type="html" xml:base="https://isaac-kwon.github.io/posts/network-test/"><![CDATA[<h2 id="ssh-로-다운로드-테스트"><code class="language-plaintext highlighter-rouge">ssh</code> 로 다운로드 테스트</h2>

<p>참고한 <a href="https://unix.stackexchange.com/questions/610133" target="_blank">링크 1</a>, <a href="https://lateweb.info/how-to-check-the-speed-of-your-ssh-connection/" target="_blank">링크 2</a></p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Download</span>
ssh remote_host <span class="nb">cat</span> /dev/zero | pv <span class="o">&gt;</span> /dev/null
<span class="c"># Upload</span>
<span class="nb">yes</span> | pv | ssh remote_host <span class="s2">"cat &gt;/dev/null"</span>
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">pv</code> 는 별도 설치 필요 (CentOS: <code class="language-plaintext highlighter-rouge">yum install pv</code>, macOS: <code class="language-plaintext highlighter-rouge">brew install pv</code>)</p>

<h3 id="scp-에-비해-장점"><code class="language-plaintext highlighter-rouge">scp</code> 에 비해 장점</h3>

<ul>
  <li>저장장치 읽기/쓰기 병목현상을 배제한 테스트 가능.</li>
  <li><strong>원하는 시간 만큼</strong> 테스트할 수 있음. (Ctrl+C - SIGINT - 로 중지가능)
    <ul>
      <li><code class="language-plaintext highlighter-rouge">scp</code> 는 <strong>정해진 용량만큼</strong> 테스트하게 되는 것.</li>
    </ul>
  </li>
</ul>

<h2 id="speedtestnet-cli"><code class="language-plaintext highlighter-rouge">speedtest.net CLI</code></h2>

<p><a href="https://www.speedtest.net/apps/cli">정식 안내 페이지</a></p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># macOS</span>
brew tap teamookla/speedtest
brew update
<span class="c"># Example how to remove conflicting or old versions using brew</span>
<span class="c"># brew uninstall speedtest --force</span>
brew <span class="nb">install </span>speedtest <span class="nt">--force</span>

<span class="c"># CentOS</span>
<span class="c">## If migrating from prior bintray install instructions please first...</span>
<span class="c"># sudo rm /etc/yum.repos.d/bintray-ookla-rhel.repo</span>
<span class="c"># sudo yum remove speedtest</span>
<span class="c">## Other non-official binaries will conflict with Speedtest CLI</span>
<span class="c"># Example how to remove using yum</span>
<span class="c"># rpm -qa | grep speedtest | xargs -I {} sudo yum -y remove {}</span>
curl <span class="nt">-s</span> https://install.speedtest.net/app/cli/install.rpm.sh | <span class="nb">sudo </span>bash
<span class="nb">sudo </span>yum <span class="nb">install </span>speedtest
</code></pre></div></div>]]></content><author><name>Minjae Isaac Kwon</name></author><category term="posts" /><summary type="html"><![CDATA[ssh 로 다운로드 테스트]]></summary></entry><entry><title type="html">부산대학교 학위 논문 양식 (LaTeX)</title><link href="https://isaac-kwon.github.io/posts/ThesisTemplateLaTeX/" rel="alternate" type="text/html" title="부산대학교 학위 논문 양식 (LaTeX)" /><published>2021-09-05T00:00:00+09:00</published><updated>2021-09-05T00:00:00+09:00</updated><id>https://isaac-kwon.github.io/posts/ThesisTemplateLaTeX</id><content type="html" xml:base="https://isaac-kwon.github.io/posts/ThesisTemplateLaTeX/"><![CDATA[<p><del>내가 쓰려고 만듬</del></p>
<blockquote>
  <p>규정은 바뀔 수 있고, 제작자는 완벽하지 못할 수 있습니다.<br />
100% 크기로 프린트 하여 자로 잰 후, 논문 작성 지침의 수치와 맞는지 <strong>직접 확인하세요</strong>.</p>
</blockquote>

<blockquote>
  <p><a href="https://github.com/Isaac-Kwon/ThesisLaTeXPNU" target="_blank">자료 위치 (Github Repository)</a><br />
<a href="https://github.com/Isaac-Kwon/ThesisLaTeXPNU" target="_blank">(https://github.com/Isaac-Kwon/ThesisLaTeXPNU)</a></p>
</blockquote>

<h2 id="참고한-것">참고한 것</h2>

<p><a href="https://e-onestop.pusan.ac.kr/menu/common/contents?menuId=2000070502&amp;rMenu=07" target="_blank">부산대학교 학생지원시스템 &gt; 졸업 &gt; 학위청구논문 &gt; 논문 작성 지침</a></p>]]></content><author><name>Minjae Isaac Kwon</name></author><category term="posts" /><summary type="html"><![CDATA[내가 쓰려고 만듬 규정은 바뀔 수 있고, 제작자는 완벽하지 못할 수 있습니다. 100% 크기로 프린트 하여 자로 잰 후, 논문 작성 지침의 수치와 맞는지 직접 확인하세요.]]></summary></entry><entry><title type="html">측정과 통계</title><link href="https://isaac-kwon.github.io/posts/MeasureAndStatistics/" rel="alternate" type="text/html" title="측정과 통계" /><published>2021-08-08T00:00:00+09:00</published><updated>2021-08-08T00:00:00+09:00</updated><id>https://isaac-kwon.github.io/posts/MeasureAndStatistics</id><content type="html" xml:base="https://isaac-kwon.github.io/posts/MeasureAndStatistics/"><![CDATA[<p>본 포스트에선, 측정을 진행하고 그 측정 결과를 다시 실험결과로 받아들이기 위한 통계적 과정과, 각 통계요소가 가지는 의미에 대해 알아봅니다.</p>

<p>측정의 가장 간단한 예시인 “길이 측정” 을 기본으로 하며 “동전의 지름 측정” 을 예시로 들었습니다.</p>

<h2 id="세-줄-요약">세 줄 요약</h2>

<p><del>알아들을 수 있을리 만무하지만,</del> 일단 세줄 요약을 먼저 전달드립니다.</p>

<blockquote>
  <ol>
    <li>측정은 어떤 모분포를 기반으로 유한한 갯수의 표본을 뽑아내는 것이다.</li>
    <li>뽑아낸 표본을 기반으로 다시 모분포를 추정해야, 실제로 세상이 말하고자 하는 바를 알 수 있다.</li>
    <li>추정된 모분포의 성질을 추론하기 위한 것 또한 표본만으로 진행해야하나, 그 값이 참값을 정확하게 추정하는데에는 노력이 필요하다.</li>
  </ol>
</blockquote>

<p>그래서, 이런 말도 해볼 수 있습니다.</p>
<blockquote>
  <p><del>신은 모르겠고</del> 나는 주사위 놀이를 한다.</p>
</blockquote>

<h2 id="실험">실험</h2>

<p>실험은, 어떤 독립변수<sub>Independent Variable</sub>와 종속변수<sub>Dependent Variable</sub> 관계를 규명하기 위해 진행하는 것으로, <em>가설</em>의 설정과 <em>그 가설에 대한 증명</em> 으로 이루어집니다.</p>

<p>독립변수와 종속변수의 관계를 규명하려면, 당연히 그 독립변수와 종속변수를 어떻게 <strong>측정하여 수치화할 것인지</strong>에 대한 문제부터 답해야 합니다. <del>아니, 자로 재면 길이가 나오고, 스톱워치로 재면 숫자로 딱 시간이 나오는게 아니라고요?</del> <del>맞긴 한데, 내재된 오차의 형성 과정이…</del></p>

<h3 id="측정의-의미--아날로그와-디지털">측정의 의미 : 아날로그와 디지털</h3>

<p>측정이란 아날로그를 디지털로 바꾸어 수치화하는 것으로서, 전혀 기록되지 않은 어떤 현상을 기록하는 것입니다.<br />
일상생활에서 볼 수 있는 모든 현상은 아날로그로 취급할 수 있으며, 그 현상을 특정 기구에 의해 수치화되어 기록하면 디지털이 됩니다. (여기서의 <em>아날로그</em> 는 <em>참값</em> 이라는 말로, <em>디지털</em> 은 <em>측정값</em> 이라고 부르기도 합니다.)</p>

<p>주변에 있는 여러 요소들을 위 기준으로 아날로그와 디지털로 나눠보면 다음과 같습니다.</p>

<ul>
  <li>아날로그
    <ul>
      <li>어떤 물체
        <ul>
          <li>물체의 길이, 몸무게 등</li>
        </ul>
      </li>
      <li>어딘가에서 시작된 소리에 의해 생긴 마이크의 떨림</li>
      <li>전등에서 나온 불빛</li>
    </ul>
  </li>
  <li>디지털
    <ul>
      <li>어떤 물체의 길이 <em>측정값</em>
        <ul>
          <li>사람의 키 측정값</li>
        </ul>
      </li>
      <li>어떤 물체의 무게 측정값
        <ul>
          <li>어떤 사람의 몸무게 <em>측정값</em></li>
        </ul>
      </li>
      <li>마이크의 떨림을 수치화하여 기록된 시간당 떨림<em>값</em> (전류, 또는 떨린 길이의 시각당 측정값)
        <ul>
          <li>음악 파일로 기록된 음악
참고: 레코드판, 카세트테이프에 저장된 <em>소리</em> 는 아날로그임.</li>
        </ul>
      </li>
      <li>전등에서 나온 불빛을 수광다이오드로 받아 측정된 광전자의 <em>갯수 측정값</em>
        <ul>
          <li>사진 파일 (컴퓨터나 휴대전화에 저장된)<br />
참고: 필름 카메라로 찍은 <em>사진</em> 은 아날로그임.</li>
        </ul>
      </li>
    </ul>
  </li>
</ul>

<h2 id="측정값에-적용되어있는-오차">측정값에 적용되어있는 오차</h2>

<p>아날로그를 디지털로 바꾸는 것은 정해진 측정 방법에 의해 어떤 디지털 값을 정하는 것으로, 그 측정 방법은 당연히 측정 값에 영향을 줍니다. 측정 방법이 어떻게 되느냐에 따라 값은 참값이라도 다르게 측정할 수 있고, 측정값 자체가 달라질 수 있습니다. 당연히, 두개 이상의 측정자, 측정 척도, 측정 방법이 있는 경우 값의 신뢰성을 위해 교정<sub>Calibration</sub> 이 있습니다만, 서로 다른 과정 측정과정은 결국 서로 다른 오차의 형성을 가져올 수 있습니다.</p>

<p>본 장에서는, 어떠한 참값으로부터 오차가 어떻게 측정 기기를 거쳐 측정값에 영향을 미칠 수 있는지에 대해 알아봅니다.</p>

<h3 id="시스템에-의한-오차">시스템에 의한 오차</h3>

<blockquote>
  <p>동전의 지름을 측정한다고 합시다. 다만, 계산의 편의를 위해 지름의 참값이 정확하게 \(5.02\mathrm{cm}\) 이라고 합시다.</p>
</blockquote>

<p>동전의 지름을 \(15\mathrm{cm}\) 자와 같은 일반적인, \(0.1\mathrm{cm}\)간격 눈금자로 측정한다고 할 때, 여러 오차가 적용될 수 있습니다. 대표적인 오차로, <em>동전의 중심점을 통과하도록</em> 하지 못하는 것이 있습니다. 정확하게 그 점을 통과할 리는 <strong>당연히 없으니,</strong> 당연히 발생해야만 하는 오차이기도 합니다. (점은 면적이 0이므로, 당연히 평면 위에서 점과 직선이 교차할 확률도 0)</p>

<p>동전을 완벽한 원을 밑면으로 하는 원기둥이라고 가정하면, 윗면의 원의 지름 \(d_0\)을 측정할 때 원과 자의 측정선과의 거리 \(l\)에 따라 지름의 측정값에 오차 \(\Delta d\)가 얼마나 발생할 지 기하학을 활용하여 다음 그림과 같이 바로 계산할 수 있습니다.</p>

<p><img src="/assets/img/posts/gplab/ExperimentStatistics/p00_fig2.png" alt="동전 위, 아랫면의 중심으로부터 자의 측정선이 떨어진 거리에 따라 발생하는 오차의 정량적 계산" /></p>

<style>
  .width-half {
    width: 50%
}
</style>

<p><img src="/assets/img/posts/gplab/ExperimentStatistics/p00_fig3.png" alt="동전 위, 아랫면의 중심으로부터 자의 측정선이 떨어진 거리에 따라 발생하는 오차의 정량적 계산의 그래프" class="align-left width-half" /></p>

<p>그래프는, 위에서 계산된 <strong>\(l\)에 따른 \(\Delta d\) 의 변화</strong> 를 그래프로 그린 것입니다. \(l\)이 반지름인 \(2.51 \mathrm{cm}\) 을 넘는 경우의 \(\Delta d\) 는 정의되지 못하며 (수식으로 풀면 복소수로 나옴.) \(l=0\) 에서 절대값이 최소이고, \(l\) 이 증가함에 따라 절대값이 단조 증가하는 (직관적으로 자명한) 사실이 그대로 그래프에 드러납니다.</p>

<p>이 오차는 \(l\) 을 정확하게 알면 \(\Delta d\) 를 완벽하게 계산할 수 있지만, 당연히 측정자는 \(l=0\) 으로 믿는 지점에 측정자에 놓을 것이므로 그러는 것은 불가능합니다. 과학적 측정을 하려면, 어떻게든 이런 것도 분석해내야 하며 어떻게든 방법을 찾아야 합니다.</p>

<h4 id="사람은-주사위를-던진다">사람은 주사위를 던진다.</h4>

<p>측정자를 동전 위에 놓는 순간 오차 \(\Delta d\) 가 결정되는 것은 맞는 말이지만, 중심점에 정확하게 놓는 것은 불가능하며 심지어는 중심점과 측정선 사이의 거리 \(l\)도 측정할 수 없으니 \(\Delta d\)를 계산해낼 수 없습니다. 그러면, 도대체 어떻게 측정오차를 추정해야하는 것일까요?</p>

<blockquote>
  <p>\(l\) 을 적절한 범위 내에서, 적절한 분포의 확률밀도함수를 가지는 무작위변수라고 생각합니다. <del>측정오차 가챠뽑기</del></p>
</blockquote>

<p><strong>당연히</strong> \(l\) 의 확률밀도함수에 따라 \(\Delta d\)의 확률밀도함수가 달라집니다. \(l\) 의 확률밀도함수로부터 \(\Delta d\)의 확률밀도함수를 구하는 것은 수학적으로 유도할 수 있는 과정이지만, <strong>계산이 길고 지루하기 때문에 보실 분만 보시기 바랍니다.</strong></p>

<expand>
  <details>
    <summary> 클릭하여 펼치기  </summary>
    
<p><del>분명 저는 경고했습니다.</del></p>

<p>계산의 편의성을 위해, 다음과 같이 가정합니다.</p>

<ol>
  <li>\(l\) 이 전 실수 구간 (음의 실수에서도) 존재할 수 있다고 가정합니다.
    <ul>
      <li>\(D\) 또한 음의 실수 \(l\)에서도 존재할 수 있습니다: \(l\) 에 대한 요소가 전부 \(l^2\)으로만 계산되기 때문입니다.</li>
      <li>단, \(D\) 의 역함수가 필요하기 때문에, 양의 \(l\) 에 대한 함수를 \(D_+\), 음의 \(l\) 에 대한 함수를 \(D_+\) 로 정의합니다.</li>
    </ul>
  </li>
  <li>\(l\)의 참값 분포 함수 \(P_l\left(l\right)\) 를 다음과 같이 가정합니다.
\(P_l\left(l\right) = \mathrm{Uniform}\left[ l; -k,k\right]\)</li>
</ol>

<p>위와 같은 가정 하에서, \(P_l\left(l\right)\) 와 \(D\left(l\right) = 2\sqrt{\left(\frac{d_0}{2}\right)^2-l^2}\) 를 통해 측정되는 참값의 분포인 \(P_D\left(D\right)\)를 알 수 있습니다.</p>

<p>\(P_D\left(D\right)\) 를 구하기 위해서, \(P_l\left(l\right)\) 와 \(P_D\left(D\right)\) 의 부분 누적 확률 분포 사이의 관계를 활용합니다.</p>

\[P_l\left( \left\lbrace l | l &lt; a  \right\rbrace \right) = P_D\left( \left\lbrace D | D = D(l) \mathrm{~with~} l &lt; a \right\rbrace \right)\]

<p>위 식과 같이, \(l\)이 어떤 값 \(a\)보다 작을 확률은, \(l\)로부터 유도된 \(D(l)\)이, \(l &lt; a\) 일 때의 모든 확률의 합입니다.</p>

<p>우리가 구하고자 하는 것은 \(P_D\left(D\right)\) 이기 때문에, 위 식을 적절히 변형하여 \(l\) 에 대해 구성되어있는 것을 \(D\)에 대해서 정리하여야 합니다. 바로 그렇게 변형해보면,</p>

\[\require{cancel}
\begin{align}
\mathrm{(lhs.)} =&amp; \xcancel{ P_l\left ( \left\lbrace l | l = D^{(-1)}\left(D\right) \mathrm{~for~} D^{(-1)}\left(D\right) &lt; D^{(-1)}\left(b\right) \right\rbrace \right) } \\
                =&amp; ~P_l\left(  \left\lbrace l | l = D^{(-1)}_{+}\left(D\right) \mathrm{~for~} D^{(-1)}_{+}\left(D\right)   &lt; D^{(-1)}_{+}\left(b\right)  \right\rbrace \right. \\
                 &amp;\cup \left. \left\lbrace l | l = D^{(-1)}_{-}\left(D\right) \mathrm{~for~} D^{(-1)}_{-}\left(D\right)  &gt; D^{(-1)}_{-}\left(b\right)  \right\rbrace \right) \\
\mathrm{with~ }b =&amp; D(a)
\end{align}\]

<p>이어야 합니다. 맨 앞 식이 틀리고, 집합 하나가 두개로 분리된 이유는 \(D = D(l)\) 은 일반적으로 역함수가 정의되지 못하기 때문입니다. <sub>앞에서도 언급한 바 있음.</sub></p>

<p>오른쪽 항은 간단해집니다. <del>당연히 입장을 뒤집었으니까…</del></p>

\[\mathrm{(rhs.)} = P_D\left( \left\lbrace D | D &lt; b \right\rbrace \right)\]

<p>이제, 모든 집합식을 적분식으로 바꿔서 풀 차례입니다.</p>

\[\mathrm{(convert~rhs.)} = \int_{0}^{b} P_D\left(D\right)dD\]

<p>\(D\) 측정값의 최소값은 0이므로, 부분누적확률도 0부터 시작해야 합니다. 우변의 변환은 간단합니다. 좌변을 변환하면 다음과 같습니다.</p>

\[\begin{align}
\mathrm{(convert~lhs.)} = &amp; \int_{0}^{D^{(-1)}_{+}\left(b\right)}P_l\left(l\right) dl + \int_{D^{(-1)}_{-}\left(b\right)}^{0}P_l\left(l\right) dl\\
                        = &amp; \int_{D^{(-1)}_{-}\left(b\right)}^{D^{(-1)}_{+}\left(b\right)}P_l\left(l\right) dl
\end{align}\]

<p>그래서, \(\mathrm{(convert~lhs.)}\) 와 \(\mathrm{(convert~rhs.)}\) 를 같다고 놓으면,</p>

\[\int_{0}^{b} P_D\left(D\right) dD = \int_{D^{(-1)}_{-}\left(b\right)}^{D^{(-1)}_{+}\left(b\right)}P_l\left(l\right) dl\]

<p>로 정리됩니다. 구하고 싶은 것은 \(P_D\left(D\right)\) 였으니, 양 변을 \(b\) 에 대해서 미분해주고 \(b\) 를 \(D\) 로 직접치환하면 답이 나옵니다. 그렇게 정리하면,</p>

\[\begin{align}
P_D\left(b\right) &amp;= \frac{d}{db}\int_{D^{(-1)}_{-}\left(b\right)}^{D^{(-1)}_{+}\left(b\right)}P_l\left(l\right) dl\\
                  &amp;= P_l\left( D^{(-1)}_{+}\left(b\right) \right) \frac{d}{db} D^{(-1)}_{+}\left(b\right) - P_l\left( D^{(-1)}_{-}\left(b\right) \right) \frac{d}{db} D^{(-1)}_{-}\left(b\right)
\end{align}\]

<p>이 됩니다.</p>

<p>원래의 수식으로부터 이를 전부 풀기 위해, \(D^{(-1)}_{\pm}\left(D\right), \frac{d}{db} D^{(-1)}_{\pm}\left(D\right)\) 를 구하면</p>

\[\begin{align}
D_{\pm}^{\left(-1\right)}\left(b\right)              &amp;= \pm \sqrt{\left(\frac{d_0}{2}\right)^2 - \left(\frac{b}{2}\right)^2}\\
\frac{d}{db}D_{\pm}^{\left(-1\right)}\left(b\right) &amp;= \pm \frac{b}{4 \sqrt{\left(\frac{d_0}{2}\right)^2 - \left(\frac{b}{2}\right)^2}} = \frac{b}{4D_{\pm}^\left(-1\right)\left(b\right)}
\end{align}\]

<p>이고, 이것을 활용하여 \(P_D\left(b\right)\)를 더 간단하게 하면,</p>

\[P_D\left(b\right) = \frac{b}{4D_{+}^\left(-1\right)\left(b\right)}\left( P_l\left( D^{(-1)}_{+}\left(b\right) \right) + P_l\left( D^{(-1)}_{-}\left(b\right) \right) \right)\]

<p>가 된다.  이 상태에서 \(P_l\) 의 제시 없이 더이상 풀 수 없으므로, \(P_l\left(l\right) = \mathrm{Uniform}\left[ l; -k,k\right]\) 을 가져옵니다.</p>

\[P_l\left(l\right) =
\left\lbrace\begin{align}\frac{1}{2k} &amp;~~~ -k &lt; l &lt; k\\0 &amp;~~~ \mathrm{otherwise.}
\end{align}\right.\]

<p>\(P_l(-l) = P_l(+l)\) 이므로, 다음과 같이 더 간단하게 \(P_l\left(l\right)\)를 정리할 수 있습니다.</p>

\[P_D\left(b\right) = \frac{b}{2D_{+}^\left(-1\right)\left(b\right)} P_l\left( D^{(-1)}_{+}\left(b\right) \right)\]

<p>이제, 마지막으로 \(P_l(l)\) 의 분포를 활용하여 다음과 같이 정리할 수 있습니다.</p>

\[P_D\left(b\right) =
\left\lbrace\begin{align}
\frac{b}{4kD_{+}^\left(-1\right)\left(b\right)} &amp;~~~ -k &lt; D^{(-1)}_{+}\left(b\right) &lt; k\\\\
0 &amp;~~~ \mathrm{otherwise.}
\end{align}\right.\]

<p>그래서… <sub>여기까지가 수식 유도의 끝입니다. 먼 길 오셨습니다.</sub></p>


  </details>
</expand>
<p><br />
\(l\)의 참값 분포함수가 \(P_l\left(l\right) = \mathrm{Uniform}\left[ l; -k,k\right]\)일 때, 다음과 같이 측정값 분포함수 \(P_D\left(b\right)\)를 쓸 수 있습니다. <sub><a href="https://blog.daum.net/gongdjn/58" target="_blank">참고 자료 (외부, 새 창열기)</a></sub></p>

\[P_D\left(b\right) =
\left\lbrace\begin{align}
\frac{b}{4k\sqrt{\left(\frac{d_0}{2}\right)^2 - \left(\frac{b}{2}\right)^2}} &amp;~~~ 0 &lt; \sqrt{\left(\frac{d_0}{2}\right)^2 - \left(\frac{b}{2}\right)^2} &lt; k\\\\
0 &amp;~~~\mathrm{otherwise.}
\end{align}\right.\]

<blockquote>
  <p>참고: 오차가 전도되는 과정이 간단한 함수가 아닌, 꽤 많은 요소가 적용되고 계산이 복잡해져서 해석적으로 계산하기 힘든 경우에는 몬테카를로 시뮬레이션이라는 방법으로 이런 오차 관계를 계산하게 됩니다. 꽤 이야기가 많아질테니, 다음에 다루도록 하겠습니다.</p>
</blockquote>

<h3 id="주사위만-던지면-끝인가--from-analogue-to-digital">주사위만 던지면 끝인가? : From Analogue To Digital</h3>

<p><em>측정자가 잘못하면 오차가 나올 수도 있다</em> 라는 사실은 사실상 거의 모두가 알고 있었던 사실일 것입니다. 이제는… 계기의 이야기입니다.</p>

<h4 id="계측-교정문제">계측 교정문제</h4>

<p>측정자는 늘어날 수 있습니다. 온도에 의해서든, 측정자를 그간 다루던 사람이 망가뜨렸든, 아예 만들때부터 잘못되었든 측정자가 정확하지 않을 수 있습니다.</p>

<h4 id="반올림-오차">반올림 오차</h4>

<p>아날로그를 디지털로 바꾸면, 당연히 오차가 생깁니다. 가장 간단한 예시로, 어떤 길이를 측정했을 때 그 측정값이 \(5.0\mathrm{cm}\) 라고 한다면 그 물체의 길이는 정확하게 \(5.0\mathrm{cm}\) 일까요? <strong>당연히</strong> 정확한 \(5.0000000 ~\dddot{}~\mathrm{cm}\) 일 확률은 거의 없습니다. 어느 다른 참값으로 측정하고자 하는 어떤 양이 있지만, 측정되는 단위가 \(0.1\mathrm{cm}\) 이기 때문에, \(1.0\mathrm{cm}\) 이라는 깔끔한 숫자가 나왔을겁니다.</p>

<p>데이터의 참값이 \(1.02\mathrm{cm}\) 였다면, 측정값인 \(1.0\mathrm{cm}\) 와의 차이인 \(0.02\mathrm{cm}\) 가 측정 오차로 작용하게 됩니다.만약 이 거리에서 낙하한 물체의 낙하시간을 기록하여 중력가속도를 측정한다고 하면, 실제로 낙하하는 거리에 비해 측정거리가 짧으니, 중력가속도는 조금 더 크게 나오겠지요.</p>

<p>이렇게 계기상에 표기되는 숫자의 한계로 인해 발생하는 오차를 <strong><em>반올림 오차</em></strong> <sub>Round-Off Error</sub> 라고 합니다.</p>

<h5 id="계기도-주사위를-던지는가">계기도 주사위를 던지는가?</h5>

<blockquote>
  <p>한줄 요약: 네.</p>
</blockquote>

<p>반올림 오차도 측정에 단순하게 적용되지 않습니다.</p>

<blockquote>
  <p>Q: 뭐라고요? 1의 자리에서 반올림 하면 5 이상이면 10이고, 5 미만이면 0인게 아니라고요?<br />
A: 기계가 그걸 어떻게 알아요? 그렇게 될 거라고 측정하는 사람이 믿는거지…</p>
</blockquote>

<p>사람이 눈금으로 읽는 것이든 기계가 눈금을 읽어주는 것이든 반올림 되는 부분 인근에서는 측정의 불확정성을 보여줄 수 있습니다. 0 또는 1을 읽는 눈금이면, 참값이 0.5 부근이라면 0으로 읽을지 1로 읽을지  <del>당연히</del> 불분명할 것입니다. 이런 사실을 기반으로 그래프로 그리면 아래와 같은 참값에 따른 올림/버림에 대한 확률의 그래프가 나옵니다.</p>

<p><img src="/assets/img/posts/gplab/ExperimentStatistics/p01_fig1.png" alt="" />
<a href="https://gist.github.com/Isaac-Kwon/a4e674c33f3fc30d543da2f5638d38b4#file-plot2-cpp" target="_blank">Go to code (gist)</a></p>

<p>그러면, 저 \(\mathrm{sigma}\)를 어떻게 구하는지가 가장 큰 문제일 것입니다. 답은… 시도해보는 수 밖에 없습니다. 시도해볼 자신이 없다면, 측정에 필요한 정확도에 맞게, 명확하게 측정해줄 수 있는 장비를 사면 됩니다. <del>돈이면 다 됨</del></p>

<h3 id="요약">요약</h3>

<p>지금까지의 과정을 토대로 정리해보면 다음과 같습니다.</p>

<ol>
  <li>실험 환경을 구성했을 때 측정값의 분포가 결정됨.</li>
  <li>실험을 진행할 때, 반올림 오차가 적용됨.</li>
</ol>

<p>지금까지의 설명을 요약해보면 다음 그림과 같습니다.
<img src="/assets/img/posts/gplab/ExperimentStatistics/p00_fig1.png" alt="" /></p>

<h2 id="반대로-가기-digital-to-analogue">반대로 가기: Digital To Analogue</h2>

<p>어떤 참값이 측정값으로 변환되는 과정에서 반올림 오차가 발생할 수 있다는 것은 이제 알았습니다. 그런데, 물리 현상은 참값을 기준으로 일어나기 떄문에 <strong>참값을 알아야</strong> 물리 현상을 추론할 수 있습니다. 그런데…</p>

<blockquote>
  <p>측정을 하면서 잃어버린 정보를 역추적하여 다시 정보를 부풀릴 수는 없습니다.</p>
</blockquote>

<p>그래서, 잃어버린 정보를 다시 되돌려놓을 수는 없고, <em>참값의 범위</em> 만 살려서 <em>이 안에 어딘가에 내가 찾는 참값은 있겠지</em> 라고 <del>정신승리</del> 하게됩니다. <em>불확도</em> 라는 개념은 여기서 등장합니다. 그래서, \(0.1\mathrm{cm}\) 눈금으로 측정한 \(5.0\mathrm{cm}\) 측정값은 \(\left[4.95, 5.05 \right]\mathrm{cm}\) 의 범위 내에 있을 것으로 생각할 수 있고, 매번 저렇게 표기할 수는 없으니, \(5.00 \pm 0.05\mathrm{cm}\) 로 표기하여 측정값이 \(5.0\mathrm{cm}\) 이나, \(0.05\mathrm{cm}\) 만큼 위-아래로 진동할 수 있음을 나타냅니다.</p>

<p>참고로, \(0.1\mathrm{cm}\) 이 눈금 최소값이라 그 절반인 \(0.05\mathrm{cm}\) 를 불확도로 지정하는 것은 꽤 신빙성이 있긴 합니다만, 굳이 <strong>무조건</strong> 그렇게 할 이유는 없습니다. 만약 자기 눈이 충분이 좋아서 <del>몽골눈</del> \(0.1\mathrm{cm}\) 눈금 안에서 충분이 잘게 쪼개서 어림짐작하여 볼 수 있다면 \(0.01\mathrm{cm}\) 이라고 써도 무방합니다. 대부분의 경우에는 그렇지 않기도 하고, 눈금값으로 쓰는게 안전하니 그럴 수 있습니다.</p>

<p>반대로, 길이 측정을 할 대상이 측정하기에 적절하지 않아서 <del>지랄맞아서</del> 참값에 대해 측정값의 오차가 눈금값보다 더 많이 발생할 수도 있습니다. 예를 들면, 일반적인 직자(\(15\mathrm{cm}\) 나 \(30\mathrm{cm}\) 자) 로 동전의 지름을 측정한다고 하면 자가 위치한 곳에 따라 제대로 지름을 측정할 수도 있고 그렇지 않을 수도 있습니다.</p>

<h3 id="실험-통계-분석">실험 통계 분석</h3>

<blockquote>
  <p>여기서 모든 것을 설명하기에는 너무 길어지기 때문에 부연 설명은 생략하고 실험과목에서의 활용만 다룹니다.</p>
</blockquote>

<p>실험 과목에서의 “동일한 값의 여러 회 측정” 을 하면 보통 아래 두가지를 가장 자주 구합니다.</p>

<ul>
  <li>평균</li>
  <li>표준편차</li>
</ul>

<p>그리고 측정값의 평균에 활용하는 <em>측정 횟수</em>가 늘어날수록, 그 평균값은 우리가 생각하는 참값에 가까워질 것라고 (직관적으로, 아주 자연스럽게) 생각합니다.</p>

<p><strong>과연 그럴까요?</strong> <del>아니 당연하잖아</del></p>

<p><img src="/assets/img/posts/gplab/ExperimentStatistics/original_Projections_1to20.gif" alt="" />
<a href="https://gist.github.com/Isaac-Kwon/a4e674c33f3fc30d543da2f5638d38b4#file-plot1-cpp" target="_blank">Go to code (gist)<sub>Canvas4</sub></a></p>

<p>위 그림은, \(5\) 를 평균으로 하고 \(2\) 를 표준편차로 하는 정규분포를 모분포로 하는 난수 생성기로부터, \(N\)개의 실수를 무작위 추출하여 평균을 구한 것을 변량으로 하는 히스토그램입니다. (\(5\mathrm{cm}\) 가 측정값 모분포의 평균이고, \(2\mathrm{cm}\) 가 표준편차인 측정환경으로부터 측정한 값 \(N\) 개를 추출하여 평균을 취한것과 동일합니다.) 여기서의 “<em>\(N\)개의 실수를 무작위 추출한 평균</em>” 은 통계학에서 “<strong>표본평균</strong>” 이라고 부릅니다. 그리고 <em>그것과 함께 구할 수 있는 표준편차</em>는 “<strong>표본표준편차</strong>” 라고 부릅니다.</p>

<p>\(N\) 이 늘어남에 따른 표본평균의 분포를 살펴보면, 표본평균의 평균(그림의 <em>Mean</em>)은 모분포의 평균인 \(5\)로 고정되어있고, 표본평균의 표준편차(그림의 <em>STDEV</em>)는 \(N\) 이 증가할수록 그 값이 줄어드나, 그 값은 모분포의 표준편차인 \(2\)와 \(1/\sqrt{N}\)배 차이남을 볼 수 있습니다. 이는 중심극한정리에 의해 자명한 사실이니, 별도의 증명은 생략하도록 하겠습니다.<a href="https://en.wikipedia.org/wiki/Central_limit_theorem" target="_blank"><sub>Wikipedia, Central Limit Theorem</sub></a> 그리고, 여기서의 <em>표본평균의 표준편차</em>는 다른 말로 <strong>표준오차</strong> 라고도 합니다.</p>

<blockquote>
  <p>주의: 여기부터는 내용이 어려워집니다.</p>
</blockquote>

<p>중심극한정리에 의해 측정횟수 \(N\) 을 늘리면 표본평균은 모평균이 평균이고 표준편차가 0으로 수렴하는 어떤 정규분포를 만들테니, 무한정 측정하면 길이의 참값에 접근하는 표본평균을 구해서 행복해질 수 있을까요?</p>

<blockquote>
  <p>이번 측정에서는 그렇지 않을 수도 있습니다. <del>뭐라고??</del></p>
</blockquote>

<h3 id="한계">한계</h3>

<p><img src="/assets/img/posts/gplab/ExperimentStatistics/p02_fig1.png" alt="" /></p>

<p>단순하게, 위의 \(P_D(b)\) 의 분포를 \(d_0 = 5.02, k=0.1\) 로 두고, 그 평균값을 Mathematica 로 구해보면 그 값이 실제 참값 지름으로 가정했던 \(d0 (=5.02)\) 가 나오지 않습니다. <strong>당연히</strong> 측정가능한 값의 최댓값이 \(d_0\)이고 최솟값이 \(d_0\)보다 작은 값이니 평균은 그 중간의 값이여야 할 것이고, \(d_0\)가 될 수 없는 처사인 것입니다. 모평균이 \(d_0\) 와 떨어져있으니 표본평균의 평균은 \(d_0\)가 아니고, \(N\) 을 무한정 늘릴수록 \(d_0\)과는 멀리 떨어지게 됩니다. <del><a href="https://youtu.be/xLJXPq08WAI?t=56" target="_blank">아이고 맙소사, 우린 이제 글렀어</a></del></p>

<h3 id="아직-한-발-남았다"><a href="https://youtu.be/gv-TMlQUJr4?t=157" target="_blank">아직 한 발 남았다.</a></h3>

<p>아직, 눈금값 오차를 고려하지 않았습니다. 위 그림에서의 적분값은 눈금값이 무한히 자세할 때에만 적용됩니다. 실제로는 \(0.1\mathrm{cm}\) 단위로 측정을 할 수 있을것이므로, 위 그래프에서 \(\left[5.016\mathrm{cm}, 5.020\mathrm{cm}\right]\) 의 범위를 가지는 측정값은 \(0.1\mathrm{cm}\) 단위의 반올림으로 모두 \(5.0\mathrm{mm}\) 으로 측정될 것이고 몇 회 측정을 하든 측정평균값은 \(5.0\mathrm{cm}\), 표준편차는 \(0.0\mathrm{cm}\) 가 되는 마법같은 결론이 나올 것입니다.</p>

<p>그렇다면, \(0.05\mathrm{cm}\) 이하는 구별할 수 없게되는 계통적 불확도에 들어가게 되므로, 계통적 불확도와 통계적 불확도를 동시에 작성하게 되면 다음과 같습니다.</p>

\[5.0 \pm 0.00\mathrm{(stat.)} \pm 0.05\mathrm{(sys.)} \mathrm{~~with~} N=\mathrm{Any}\]

<p>그런데, 만약 \(0.01\mathrm{cm}\) 까지 구별할 수 있는 측정장치를 쓴다면, 또는 \(0.001\mathrm{cm}\) 까지 구별할 수 있는 측정장치를 쓴다면 어떻게 될까요?</p>

<p>그러면 위 그림에서의 그래프 모양을 어느정도 측정값 분포가 따라갈 수 있게 될 것이고, 그 평균값도 \(5.0\) 이 아닌, 다른 자세한 값을 가질 수 있을 것입니다. (물론 그 값은 \(5.02\mathrm{cm}\)에 수렴하지 않습니다.)</p>

<p>만약, \(0.001\mathrm{cm}\) 까지 구별할 수 있는 자로 \(N=36\)회 측정하여 \(5.018\mathrm{cm}\) 의 측정평균과 \(0.030\mathrm{cm}\) 의 측정표준편차를 얻었다면 다음과 같이 표기할 수 있을 것입니다.</p>

\[5.018 \pm 0.005\mathrm{(stat.)} \pm 0.0005\mathrm{(sys.)} \mathrm{~~with~} N=\mathrm{36}\]

<p>보통의 경우에는, 통계적 불확도 (위의 \(\mathrm{stat.}\))와 계통적 불확도(위의 \(\mathrm{sys.}\)) 를 합성 \((\sqrt{0.005^2 + 0.05^2}=0.0502)\) 하여 표기하기 때문에,</p>

\[5.018 \pm 0.05 \mathrm{~~with~} N=36\]

<p>가 됩니다. <del>정신승리</del></p>

<h3 id="그래서-우리가-할-수-있는건-이게-끝인가요">그래서, 우리가 할 수 있는건 이게 끝인가요?</h3>

<blockquote>
  <p><del>끝이겠냐</del></p>
</blockquote>

<p><del>닭 잡는데 소 잡는 칼이긴 한데</del> 측정값이 만들어지는 과정을 아주 잘 알고 있고, 그것을 어떤 방식으로든 계산으로 잘 재현할 수 있을 때, Unfolding 이라는 과정을 쓰면 측정값의 분포로부터 참값에 더 가까이 다가갈 수 있습니다. 조만간 이에 대해서 포스트를 작성해보겠지만, 그것이 언제가 될 지는…</p>

<p><strong><em>To be continued…</em></strong></p>]]></content><author><name>Minjae Isaac Kwon</name></author><category term="posts" /><category term="gplab" /><summary type="html"><![CDATA[본 포스트에선, 측정을 진행하고 그 측정 결과를 다시 실험결과로 받아들이기 위한 통계적 과정과, 각 통계요소가 가지는 의미에 대해 알아봅니다.]]></summary></entry><entry><title type="html">MS Excel 로 최소제곱법을 활용한 직선 그리기</title><link href="https://isaac-kwon.github.io/posts/TrendlineWithExcel/" rel="alternate" type="text/html" title="MS Excel 로 최소제곱법을 활용한 직선 그리기" /><published>2021-04-13T00:00:00+09:00</published><updated>2021-04-13T00:00:00+09:00</updated><id>https://isaac-kwon.github.io/posts/TrendlineWithExcel</id><content type="html" xml:base="https://isaac-kwon.github.io/posts/TrendlineWithExcel/"><![CDATA[<p>Microsoft Excel 에서 데이터를 활용하여 그래프를 그리고, 최소제곱법을 활용하여 데이터에 대해 가장 맞는 직선을 그리는 방법에 대해 다룹니다.</p>

<p>최소제곱법을 활용한 가장 맞는 직선을 구하는 방법 (피팅)에 대한 자세한 내용은 다른 포스트에서 설명하고 있습니다. <sub>(<a href="/posts/trendline-basic/">Link</a>)</sub></p>

<h2 id="그래프-그리기">그래프 그리기</h2>

<p>무엇이든 그래프를 그리려면, 데이터가 있어야 합니다. 그래프를 그린다는 것은 데이터를 두 개 이상의 좌표축을 가지는 어떤 좌표 평면 상(또는 공간, 그 이상)에 위치하도록 하는 것이니요. \(i\) 번째 데이터를 \(x_i\), \(y_i\) 로 생각하고, 다음과 같은 데이터가 있다고 합시다.</p>

<p>이 데이터는 \(x_i\) 의 순서에 따라 정렬되어있으나 원칙적으로는 <em>정렬되어있을 필요</em> 는 없습니다.</p>

<table>
  <thead>
    <tr>
      <th style="text-align: center">\(i\)</th>
      <th style="text-align: center">\(x_i\)</th>
      <th style="text-align: center">\(y_i\)</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: center">1</td>
      <td style="text-align: center">1</td>
      <td style="text-align: center">5</td>
    </tr>
    <tr>
      <td style="text-align: center">2</td>
      <td style="text-align: center">2</td>
      <td style="text-align: center">11</td>
    </tr>
    <tr>
      <td style="text-align: center">3</td>
      <td style="text-align: center">3</td>
      <td style="text-align: center">15</td>
    </tr>
    <tr>
      <td style="text-align: center">4</td>
      <td style="text-align: center">4</td>
      <td style="text-align: center">13</td>
    </tr>
    <tr>
      <td style="text-align: center">5</td>
      <td style="text-align: center">5</td>
      <td style="text-align: center">18</td>
    </tr>
    <tr>
      <td style="text-align: center">6</td>
      <td style="text-align: center">6</td>
      <td style="text-align: center">22</td>
    </tr>
    <tr>
      <td style="text-align: center">7</td>
      <td style="text-align: center">7</td>
      <td style="text-align: center">24</td>
    </tr>
  </tbody>
</table>

<p>위 표의 \(x_i\) 와 \(y_i\) 를 이용하여, 데이터포인트를 그래프 위에 찍어보도록 합니다.</p>

<ol>
  <li>일단 엑셀을 켜고 <del>제일 중요함</del></li>
  <li>
    <p>다음 그림과 같이 데이터를 표 형태로 입력합니다. (맨 왼쪽의 \(i\) 세트열은 입력하지 않아도 됩니다.)
 <img src="/assets/img/posts/gplab/TrendlineWithExcel/fig1-1.png" alt="표 형태로 입력한 데이터" /></p>
  </li>
  <li>
    <p>그래프를 그릴 데이터포인트 X,Y 를 한번에 드래그하여 선택하고, 상단 바에서 삽입(Insert) 을 클릭한 이후, Recommended Charts (권장 차트?) 옆의 여러 차트들 중 가로 세로 축 사이에 점들이 몇개 찍혀있는 버튼을 클릭한 이후, <strong>분산형 그래프 분류의 선 없이 점만 찍혀있는 그래프</strong>를 선택합니다.
 <img src="/assets/img/posts/gplab/TrendlineWithExcel/fig1-2.png" alt="데이터를 선택한 후 그래프를 삽입하기 위해 선없는 분산형 그래프를 선택함" /></p>
  </li>
  <li>
    <p>그러면 아래 그림과 같이 데이터를 기반으로 그래프가 그려집니다.
 <img src="/assets/img/posts/gplab/TrendlineWithExcel/fig1-3.png" alt="그래프를 그린 후의 상태" /></p>
  </li>
  <li>참고로, 축 이름이나 단위는 따로 표기해줘야 하는데, 알아서 찾아보길 바랍니다. <del>조금만 둘러보면 있음</del></li>
</ol>

<h2 id="그래프-위에-최소제곱법을-이용한-직선식-그리기">그래프 위에 최소제곱법을 이용한 직선식 그리기</h2>
<p>최소제곱법을 활용하여 그래프를 그리기 위해 일반물리학실험실 총괄 홈페이지<sub><a href="https://gplab.pusan.ac.kr/">link</a></sub> 에 업로드된 최소제곱법 엑셀 시트<sub><a href="https://gplab.pusan.ac.kr/gplab/40433/subview.do?enc=Zm5jdDF8QEB8JTJGYmJzJTJGZ3BsYWIlMkY5MjQxJTJGNzMzNDE4JTJGYXJ0Y2xWaWV3LmRvJTNGYmJzT3BlbldyZFNlcSUzRCUyNmlzVmlld01pbmUlM0RmYWxzZSUyNnNyY2hDb2x1bW4lM0QlMjZwYWdlJTNEMSUyNnNyY2hXcmQlM0QlMjZyZ3NCZ25kZVN0ciUzRCUyNmJic0NsU2VxJTNEJTI2cGFzc3dvcmQlM0QlMjZyZ3NFbmRkZVN0ciUzRCUyNg%3D%3D">link</a></sub>나, 손으로 구하는 수식을 쓰는 것은 매우 노가다스러운 측면이 있습니다. 하지만, 엑셀 <sub>(또는 한컴오피스, macOS 넘버스, MATLAB, Mathematica, SPSS 등 데이터 분석을 조금이라도 끼고 있는 소프트웨어는 다 있음.)</sub> 에는 기본적으로 수식을 구해주는 기능과 직선식 플로팅 기능이 있습니다.</p>

<p>다음과 같이 안내해드리니, 유용하게 활용하세요.</p>

<ol>
  <li>
    <p>(그려진 그래프에서) 그래프의 데이터 포인트 점에 마우스 커서를 대고 한번 클릭하면, 아래와 같이 데이터포인트 전체가 선택됩니다.<br />
 <img src="/assets/img/posts/gplab/TrendlineWithExcel/fig2-1.png" alt="데이터가 포함된 분산형그래프에서, 데이터포인트 바로 위를 클릭하여 그래프 데이터포인트가 선택된 상태" /></p>
  </li>
  <li>
    <p>선택된 그 이후, 그 포인트 위에서 오른쪽 클릭을 하면, 드롭다운 메뉴가 뜹니다. 거기서 Add Trendline (추세선 추가) 를 클릭합니다.<br />
 <img src="/assets/img/posts/gplab/TrendlineWithExcel/fig2-2.png" alt="그래프 데이터포인트 위에서 오른쪽 클릭을 한 후 표시된 드롭다운 메뉴에서 추세선 추가에 커서를 올린 상태" /></p>
  </li>
  <li>
    <p><del>이게 최소제곱법으로 구한게 맞는진 아직 모르겠지만</del> 뭔가 직선이 추가되었습니다!<br />
 <img src="/assets/img/posts/gplab/TrendlineWithExcel/fig2-3.png" alt="그래프 데이터포인트와 추세선이 동시에 표시된 상태" /></p>
  </li>
  <li>
    <p>그 이후 오른쪽에 뜨는 차트 디자인 메뉴를 밑으로 내려보면 “Display Equation on chart (차트에 방정식 표시)” 와 “Display R-square value on chart (차트에 R² 표시)” 가 있습니다. 체크해주면, 그래프에 방정식과 R² (결정계수) 가 표시됩니다. <del>결정계수가 뭔지는 알아서 찾아보쇼</del>
 <img src="/assets/img/posts/gplab/TrendlineWithExcel/fig2-4.png" alt="그래프와 직선, 그리고 방정식, 결정계수가 모두 표시된 상태" /></p>
  </li>
  <li>
    <p>만약, 이게 최소제곱법으로 구한게 맞는지 의심된다면, 따로 한번 더 구해서 저 수식과 비교해보면 됩니다. <del>그런데 아무도 안해보겠지</del></p>
  </li>
</ol>

<h2 id="데이터포인트를-설명하는-직선식에서-계수의-정확한-값-불확도-통계량-구하기">데이터포인트를 설명하는 직선식에서 계수의 정확한 값, 불확도, 통계량 구하기</h2>

<blockquote>
  <p>Q: 그런데, 직선 식 다 구했는데 직선식에 그 불확도 안구해주니까 그 뻘짓은 또 해야하는 것 아닌지요?<br />
A: <del>아이고 불확도 구할거라는 생각만 해도 장하다</del> 아뇨. 사실 저 그래프의 계수들을 구해주는 함수는 따로 있고 그걸 그래프에서 끌어쓴 다음 일부분만 그림에서 보여주는거라 그 과정 전부의 통계치를 구하는 함수인 <strong>LINEST</strong> 를 쓰면 편안합니다.</p>
</blockquote>

<h3 id="linest-함수">LINEST 함수</h3>

<p>자세한 건 Excel 의 LINEST 함수를 따로 찾아보셔도 되지만 (<a href="https://support.office.com/ko-kr/article/linest-함수-84d7d0d9-6e50-4101-977a-fa7abf772b6d">한글판 설명서</a>, <a href="https://support.office.com/en-us/article/linest-function-84d7d0d9-6e50-4101-977a-fa7abf772b6d">영어판 설명서</a>), 일단 설명만 드리면, 여러 변수에 대해 <strong>Lin</strong>ear 한 함수로 <strong>Est</strong>imation 하는겁니다. n(n&gt;2)개의 변수열에 대해 서로간의 관계를 선형식으로 예측하는 방법입니다.</p>

<p>그래서, 2차원 축을 가지는 평면의 점에서 직선을 찾거나, 3차원 축의 공간에서 평면의 수식에 대한 계수 (등 n 차원 공간에 대해 n-1 차원 요소의 계수) 를 찾습니다.</p>

<blockquote>
  <p>=LINEST(Y열,  X열, TRUE, TRUE)<br />
로 수식을 한 칸에 입력해주면, 연달아서 여러 값이 생겨납니다.</p>
</blockquote>

<p><em>$C$2:$C$8</em> 과 <em>$B$2:$B$8</em> 을 일일히 입력해줄 필요는 없고, <em>=LINEST(</em> 까지 입력한 다음에 데이터 범위를 마우스로 긁어주면 <sub>(수식을 입력하던걸 취소하지 말고 긁어주면 자동으로 범위가 입력됩니다.)</sub>됩니다. 한 범위를 입력하고, 콤마를 찍은 후 다음 범위를 선택하고 엔터를 치면 됩니다.
    <img src="/assets/img/posts/gplab/TrendlineWithExcel/fig3-1.png" alt="" /></p>

<p>자, 그러면 이제 저기에 생긴 숫자들이 뭘까요…?
숫자를 봐서는… 맨 위 두 숫자가 계수를 뜻하는건 아주 잘 알겠고, 위에서 세번째 왼쪽 것이 R² 인것도 알겠어요. 나머지는 뭘까요…?
    <img src="/assets/img/posts/gplab/TrendlineWithExcel/fig3-2.png" alt="" /></p>

<p>이럴땐 <a href="https://support.office.com/ko-kr/article/linest-함수-84d7d0d9-6e50-4101-977a-fa7abf772b6d">매뉴얼</a>을 보면 됩니다.</p>

<p><img src="https://support.content.office.net/ko-kr/media/e0d97b28-95d9-4cb2-888c-78db54378381.gif" alt="" /></p>

<p>위에서부터, 각 행은 다음과 같은 의미입니다.</p>

<ol>
  <li>추정된 계수
    <ul>
      <li>본 데이터에서 계수가 2개만 나온 것은, \(y=ax+b\) 피팅이어서, \(a\) 와 \(b\)가 나온 것입니다.</li>
      <li>\(n=2\) 이 넘는 다변수통계를 쓰면 (\(z=ax+by+c\) 등) 그 이후 계수도 구할 수 있습니다.</li>
    </ul>
  </li>
  <li>각 계수의 불확도</li>
  <li>결정통계량
    <ul>
      <li>R²</li>
      <li>y 추정의 총괄 표준오차</li>
    </ul>
  </li>
  <li>검수통계량
    <ul>
      <li>F통계량 <sub>(찾아봐요, 딱히 필요하진 않음)</sub></li>
      <li>df (Degree of Freedom) : 포인트 갯수가 7개이고, 계수가 2개라 자유도가 5입니다. 자유도가 0보다 작으면 피팅이 불가합니다.</li>
    </ul>
  </li>
  <li>거리통계량
    <ul>
      <li>회귀제곱합 <sub>(딱히 불필요)</sub></li>
      <li>잔차제곱합(이걸 최소화하는걸 찾는 방법)</li>
    </ul>
  </li>
</ol>

<p>네. 이런 방법으로 좀 더 편하게 계수들을 찾을 수 있습니다. 우리 모두 ‘노가다 해서 힘들어할 시간’ 에 결과에 대한 탐구를 더 하면 됩니다.</p>

<h2 id="그래서-이걸-어디다가-쓰면-되나요">그래서 이걸 어디다가 쓰면 되나요?</h2>

<blockquote>
  <p><del>아이고 다 쓸모없는 짓이었네</del> <del>툴이 뭘 뜻하는질 모르면 쓰지를 맙시다</del></p>
</blockquote>

<p>직선 식 추정은 <em>계수를 구하기 위해</em> 하는 것입니다. <sub>(<a href="/posts/trendline-basic/">다른 포스트 참고: Link</a>)</sub></p>

<p>이론에 의해 예측된 수식의 개형이 <strong>직선일 때</strong> 그 계수를 구하거나, 또는 종속변수가 독립변수에 대해 <strong>선형으로</strong> 비례한다는 것을 보이고 싶을 때 (\(R^2\) 통계치, \(\chi^2/\mathrm{ndf}\) 로) 사용합니다.  일반물리실험의 보고서에서는, 데이터 간 관계를 수식으로 규명할 수 있을 시 반드시 써야합니다.</p>

<p><strong>당연히</strong> 예측된 수식의 개형은 직선이 아닐 수 있습니다. 대부분의 예측형은 직선으로 재변환이 가능합니다만, <del>굳이 귀찮게</del> 몇몇 수식은 그러지 않아도 됩니다. Excel 에는 데이터 분산이 없는 최소제곱법에 대해, Trivial Solution 이 있는 몇몇 수식 개형은 최소제곱법 수식 계산을 지원합니다.</p>

<h3 id="excel-에서-지원하는-최소제곱법-20210413">Excel 에서 지원하는 최소제곱법 <sub>(2021.04.13)</sub></h3>

<ul>
  <li>선형 - <em>linear</em><br />
\(y=ax+b\)</li>
  <li>n차 다항식 - <em>n<sup>th</sup> polynomial</em><br />
\(y=\sum_{i=0}^{n} a_i x^i\)</li>
  <li>지수 함수 - <em>exponential function</em><br />
\(y=a e^{bx}\)</li>
  <li>로그 함수 - <em>logarithm</em><br />
\(y=a \ln^{x} + b\)</li>
  <li>멱함수 - <em>power function</em><br />
\(y=a x^b\)</li>
</ul>

<p>선형 함수의 <strong>LINEST</strong> 를 제외하고는 사실상 셀 함수 형태의 숫자 계산은 내장되어있지 않다고 해도 무방합니다만, 실험 통계를 조금 배워보시면 <strong>LINEST</strong> 만으로 다른 모든 함수 개형도 계수를 계산할수 있음을 알 수 있을겁니다. (여기서 따로 다루지는 않겠습니다.)</p>

<h3 id="trivial-solution-이-없는-경우의-최소제곱법의-활용">Trivial Solution 이 없는 경우의 최소제곱법의 활용</h3>

<p>예를 들면, \(y=Ae^{bx}+C\) 은 물리학에서는 아주 일반적인 수식인데도 엑셀에서 곧바로 피팅을 할 수 없습니다. 그러면 어떻게 해야할까요?</p>

<ol>
  <li>개노가다
    <ul>
      <li>일단, \(y=a e^{bx}\) 는 지원하니까, 모든 \(y_i\) 에서 같은 숫자 \(C\) 를 빼고, \(y=a e^{bx}\) 로 피팅하면 될겁니다.</li>
      <li>\(R^2\) 이 피팅이 잘 되었는지나 그렇지 않은지를 판정해주니, 그것만 보고 손으로 잘 \(C\)를 정해주면 됩니다. <del>(뭐?)</del></li>
    </ul>
  </li>
  <li>노가다는 싫다
    <ul>
      <li>그렇습니다. 세상 사람들이 그렇게 멍청하지는 않습니다. 선지자는 아주 좋은 방법을 잘 마련해두었습니다.</li>
      <li>MATLAB, Origin, Numpy(Python), ROOT(C++) 등 다른 프로그램을 쓰세요. <del>제발 메소드는 고생말고 사서 드세요</del></li>
      <li>Non-Linear Chi-Square Minimization 이라는 방법인데 <del>말 그대로임</del> 경사하강 등의 수치 해석적 최소화 방법을 씁니다.</li>
    </ul>
  </li>
</ol>

<h3 id="그래프-그리고도-욕먹는-경우-감점당하는-경우">그래프 그리고도 <del>욕먹는 경우</del> 감점당하는 경우</h3>

<p>그래프를 고생해서 그렸지만, 다음 경우에는 그 그래프가 오히려 감점 요인이 될 수 있습니다.</p>

<ul>
  <li>그래프에 활용한 데이터 간 <strong>절대 관계가 없을 경우</strong>.
    <ul>
      <li>실험원리상 관련이 있거나,</li>
      <li>실험 분석에서 관련이 있음을 기술하면 해야 함.
        <ul>
          <li><strong><em>그래프를 그리는 이유가 있어야 함</em></strong></li>
        </ul>
      </li>
    </ul>
  </li>
  <li>최소제곱법에 활용한 수식 개형이 잘못되었을 시
    <ul>
      <li>예1) Exponential 의 함수 개형 \((y=Ae^{bx}+C)\)을 써야하나, 선형\((y=ax+b)\)를 썼을 경우</li>
      <li>예2) \(y=ax^2+bx+c\) 의 2차 함수 개형으로 충분하나, \(y=ax^6+bx^5+~\dddot~+g\) 와 같이 불필요하게 많은 계수를 적용한 경우
        <ul>
          <li>파라메터 4개면 코끼리도 그립니다. <sub><a href="https://aapt.scitation.org/doi/abs/10.1119/1.3254017">paper link</a></sub>  <sub><a href="https://www.johndcook.com/blog/2011/06/21/how-to-fit-an-elephant/">그림 출처</a></sub><br />
<img src="https://www.johndcook.com/elephant.png" alt="파라메터 4개로 그린 코끼리 그림" /></li>
          <li><del>아뇨 하나면 되는데</del> <sub><a href="https://aip.scitation.org/doi/10.1063/1.5031956"><del>paper link</del></a></sub>  <sub><a href="https://aip.scitation.org/doi/10.1063/1.5031956"><del>그림 출처</del></a></sub><br />
<img src="https://aip.scitation.org/na101/home/literatum/publisher/aip/journals/content/adv/2018/adv.2018.8.issue-9/1.5031956/20180927/images/medium/1.5031956.figures.online.f1.jpg" alt="파라메터 1개로 그린 코끼리 그림" /></li>
        </ul>
      </li>
    </ul>
  </li>
</ul>]]></content><author><name>Minjae Isaac Kwon</name></author><category term="posts" /><category term="gplab" /><summary type="html"><![CDATA[Microsoft Excel 에서 데이터를 활용하여 그래프를 그리고, 최소제곱법을 활용하여 데이터에 대해 가장 맞는 직선을 그리는 방법에 대해 다룹니다.]]></summary></entry><entry><title type="html">실전 전산물리학</title><link href="https://isaac-kwon.github.io/posts/ComputationalPhysics-00/" rel="alternate" type="text/html" title="실전 전산물리학" /><published>2021-04-07T00:00:00+09:00</published><updated>2021-04-07T00:00:00+09:00</updated><id>https://isaac-kwon.github.io/posts/ComputationalPhysics-00</id><content type="html" xml:base="https://isaac-kwon.github.io/posts/ComputationalPhysics-00/"><![CDATA[<blockquote>
  <p><strong>실전 전산물리학</strong>: <em>Computational Physics in a nutshell</em></p>
</blockquote>

<h2 id="도입">도입</h2>

<p><em>실전 전산물리학</em> 은 다음을 질문들을 위해 작성됩니다.<br />
물론, 계획은 거창하지만… 추후 변경될 수 있습니다.</p>

<ul>
  <li>물리학에서 하는 계산들에는 무엇이 있을까?</li>
  <li>물리 실험을 설명하기 위한 모델(가설)을 어떻게 실험값과 비교할 수 있을까?</li>
  <li>물리 실험을 어떻게 컴퓨터를 이용하여 시뮬레이션 할까?</li>
  <li>물리 실험을 시뮬레이션하기 위해 무엇이 필요할까?</li>
  <li>이 세상의 다른 물리 시뮬레이션은 어떻게 구동될까?
    <ul>
      <li>계획적으로 프로그래밍을 할 수 있을까?
        <ul>
          <li>시뮬레이션을 위해 만든 것을 조금 재사용을 잘 할 수 있도록 만들 수 있을까?</li>
        </ul>
      </li>
      <li>실전에서 활용되는 물리 시뮬레이션은 어떻게 구성되어 있을까?</li>
      <li><del>세상은 컴퓨터로 이루어져 있을까?</del></li>
    </ul>
  </li>
  <li>실전에서 물리 시뮬레이션은 어떻게 활용될까?
    <ul>
      <li>자주 겪을 수 있는 문제는 무엇일까?</li>
    </ul>
  </li>
  <li>물리학 실험값의 분석을 어떻게 해야할까?</li>
  <li><del>GO TO STACK-OVERFLOW</del></li>
</ul>

<p><del>내용에 대한 구상은 거의 다 했는데 언제 작문을 해서… 코딩을 해서… 포스팅이 될 지 기약이 좀 없음</del></p>

<h2 id="포함할-내용">포함할 내용</h2>

<ul>
  <li>도입
    <ul>
      <li>계산기</li>
      <li>계산기로서의 컴퓨터</li>
      <li>물리학에서 하는 계산들</li>
    </ul>
  </li>
  <li>물리 실험에서의 모델링 (일반물리학실험을 기반으로 하여)
    <ul>
      <li>물리적 모델링, 이론과 실험</li>
      <li>중력가속도 실험의 실험 과정</li>
      <li>실험결과를 설명하기 위한 모든 것</li>
      <li>실전 계산</li>
      <li>오차의 발생과 전파</li>
      <li>다회 실험과 몬테카를로방법</li>
    </ul>
  </li>
  <li>컴퓨팅 세상으로 들어가기
    <ul>
      <li>컴퓨터를 왜 쓸까?</li>
      <li>컴퓨터가 일하는 방법</li>
      <li>컴퓨터 시뮬레이션과 실험의 공통점</li>
    </ul>
  </li>
  <li>날코딩과 계획코딩
    <ul>
      <li>컴퓨터에게 기초부터 가르치기
        <ul>
          <li><del>기초는 개뿔 사드세요 제발</del></li>
        </ul>
      </li>
      <li>물리적 모델을 계산기에 넣기</li>
      <li>물리적 모델을 <em>구조적</em>으로 계산기에 넣기</li>
      <li>실험 기구를 만들고 세팅하기</li>
      <li>구동 예시와 내부 구조</li>
      <li>최적화</li>
      <li>적용 예시</li>
    </ul>
  </li>
  <li>실전에서 쓸 수 있는 패키지 코딩
    <ul>
      <li>물리학 이론도 결국에는 전산질이 된다</li>
      <li>실전에서 구축한 모델링 예시</li>
    </ul>
  </li>
  <li>최적화와 실전에서의 문제, 예시
    <ul>
      <li>필요에 따른 계산정확도 구성</li>
      <li>독립연산 구성과 병렬화</li>
      <li>정수와 실수 문제, 데이터 타이핑문제</li>
      <li>메모리와 저장공간 소모, 그리고 극단분석</li>
      <li>바퀴의 재발명?</li>
    </ul>
  </li>
  <li>데이터 분석
    <ul>
      <li>아날로그 데이터와 디지털 데이터</li>
      <li>진정한 의미의 디지털 데이터</li>
      <li>유의미한 값 측정하기</li>
      <li>측정된 값의 계산</li>
      <li>통계질</li>
    </ul>
  </li>
</ul>

<p>내용 전개 상황에 따라 내용이 추가될 수도 있고, 통합되거나 삭제될수도 있습니다.<br />
내용 전개의 순서만을 나타낼 뿐, <strong>각각의 줄이 하나의 포스트를 뜻하는 것은 아닙니다.</strong></p>]]></content><author><name>Minjae Isaac Kwon</name></author><category term="posts" /><category term="ComputationalPhysics" /><category term="실전전산물리학" /><summary type="html"><![CDATA[실전 전산물리학: Computational Physics in a nutshell]]></summary></entry><entry><title type="html">GOST: General Optics SimulaTion</title><link href="https://isaac-kwon.github.io/posts/GOST-00/" rel="alternate" type="text/html" title="GOST: General Optics SimulaTion" /><published>2021-04-07T00:00:00+09:00</published><updated>2021-04-07T00:00:00+09:00</updated><id>https://isaac-kwon.github.io/posts/GOST-00</id><content type="html" xml:base="https://isaac-kwon.github.io/posts/GOST-00/"><![CDATA[<p>[개발중인 라이브러리]</p>

<blockquote>
  <p><strong>일반 광학 모의 실험</strong>: <em>GOST</em> - General Optics SimulaTion</p>
</blockquote>

<p>Repository is in <a href="https://github.com/Isaac-Kwon/GOST">github</a> [현재 개발중임.]</p>

<h2 id="도입">도입</h2>
<p>GOST 는 빛의 경로를 기하광학적으로 모의실험하기 위한 라이브러리로, 계면의 기하학적 정의와 투과와 반사의 정의를 위한 계면의 논리적 정의를 모두 포함하여 개발됩니다.</p>

<!-- ## 개발 요소

### 계면들
### 투과와 반사의 정의 -->]]></content><author><name>Minjae Isaac Kwon</name></author><category term="posts" /><category term="GOST" /><category term="ComputationalPhysics" /><summary type="html"><![CDATA[[개발중인 라이브러리]]]></summary></entry></feed>