<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://ulysseszh.github.io/feed/tags/hamiltonian.xml" rel="self" type="application/atom+xml" /><link href="https://ulysseszh.github.io/" rel="alternate" type="text/html" hreflang="en-US" /><updated>2026-04-30T17:49:58-07:00</updated><id>https://ulysseszh.github.io/feed/tags/hamiltonian.xml</id><title type="html"><![CDATA[Ulysses’ trip]]></title><subtitle>Here we are at the awesome (awful) blog written by UlyssesZhan!</subtitle><author><name>UlyssesZhan</name><email>ulysseszhan@gmail.com</email></author><entry><title type="html"><![CDATA[Simulating a mechanical system using rpg_core.js]]></title><link href="https://ulysseszh.github.io/physics/2020/05/14/simulation-rpgmv.html" rel="alternate" type="text/html" title="Simulating a mechanical system using rpg_core.js" /><published>2020-05-13T09:57:39-07:00</published><updated>2020-05-13T09:57:39-07:00</updated><id>https://ulysseszh.github.io/physics/2020/05/14/simulation-rpgmv</id><content type="html" xml:base="https://ulysseszh.github.io/physics/2020/05/14/simulation-rpgmv.html"><![CDATA[<p>This post is the continuation of <a href="/physics/2020/04/28/simulation-rgss.html">the last post</a>.</p>
<p>If you visit <a href="/rpg/mechsimul/">the page</a> I have just created, you may find the simulation of a mechanical system.</p>
<figure>
<img src="/assets/images/figures/2020-05-14-simulation-rpgmv/rpgmv_simul.png" alt="Result of simulation"/>

</figure>
<p>It is currently <span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi mathvariant="script">H</mi><mo>=</mo><msubsup><mi>p</mi><mn>1</mn><mn>2</mn></msubsup><mo>+</mo><msubsup><mi>p</mi><mn>2</mn><mn>2</mn></msubsup><mo>−</mo><mi>cos</mi><mo>⁡</mo><msub><mi>q</mi><mn>1</mn></msub><mo>−</mo><mi>cos</mi><mo>⁡</mo><msub><mi>q</mi><mn>2</mn></msub><mo>−</mo><mi>cos</mi><mo>⁡</mo><mtext> ⁣</mtext><mrow><mo fence="true">(</mo><msub><mi>q</mi><mn>1</mn></msub><mo>−</mo><msub><mi>q</mi><mn>2</mn></msub><mo fence="true">)</mo></mrow></mrow><annotation encoding="application/x-tex">
    \mathcal H=p_1^2+p_2^2-\cos q_1-\cos q_2-
    \cos\!\left(q_1-q_2\right)
</annotation></semantics></math></span></span></span> depicting two pendulum coupled with a spring (with <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>l</mi><mn>1</mn></msub><mo>=</mo><msub><mi>l</mi><mn>2</mn></msub></mrow><annotation encoding="application/x-tex">l_1=l_2</annotation></semantics></math></span></span> and <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>m</mi><mn>1</mn></msub><mo>=</mo><msub><mi>m</mi><mn>2</mn></msub></mrow><annotation encoding="application/x-tex">m_1=m_2</annotation></semantics></math></span></span>, and the original length of the spring is zero, and the two hanging points overlap),</p>
<figure>
<img src="/assets/images/figures/2020-05-14-simulation-rpgmv/spring_coupled_pendulum.png" class="dark-adaptive" alt="Spring-coupled pendulums"/>

</figure>
<p class="no-indent">
which is a classical example of non-linearly coupled system.
</p>
<p>The pattern of the oscillation can be analyzed using discrete Fourier transformation, whose result can be found by clicking the buttons in the up-left corner (after the simulator has detected a period).</p>
<figure>
<img src="/assets/images/figures/2020-05-14-simulation-rpgmv/rpgmv_simul_fft.png" alt="Result of DFT"/>

</figure>
<p class="no-indent">
Hitting the space bar can make the simulation pause.
</p>
<p>If you want to use it to simulate other mechanical systems, you can study <a href="/rpg/mechsimul/js/mechsimul.js">the codes</a> I wrote and write your own codes in the console.</p>
<p>By the way, the <a href="https://github.com/UlyssesZh/OpenRGSS/" target="_blank" rel="external">OpenRGSS</a> version of the simulator is open-source <a href="https://github.com/UlyssesZh/mechsimul/" target="_blank" rel="external">here</a>. Please star the repo if you like it.</p>]]></content><author><name>UlyssesZhan</name><email>ulysseszhan@gmail.com</email></author><category term="physics" /><category term="javascript" /><category term="rgss" /><category term="hamiltonian" /><category term="calculus" /><category term="ode" /><category term="web" /><category term="fourier transform" /><summary type="html"><![CDATA[Continuing my last work of simulating a mechanical system using RGSS3, I made a new version using rpg_core.js, the game scripting system shipped with RPG Maker MV. This version is live <a href="/rpg/mechsimul">on web</a>!]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ulysseszh.github.io/assets/images/covers/2020-05-14-simulation-rpgmv.png" /><media:content medium="image" url="https://ulysseszh.github.io/assets/images/covers/2020-05-14-simulation-rpgmv.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html"><![CDATA[Simulating a mechanical system using RGSS3]]></title><link href="https://ulysseszh.github.io/physics/2020/04/28/simulation-rgss.html" rel="alternate" type="text/html" title="Simulating a mechanical system using RGSS3" /><published>2020-04-27T20:51:17-07:00</published><updated>2020-04-27T20:51:17-07:00</updated><id>https://ulysseszh.github.io/physics/2020/04/28/simulation-rgss</id><content type="html" xml:base="https://ulysseszh.github.io/physics/2020/04/28/simulation-rgss.html"><![CDATA[<p>Our goal is to simulate a mechanical system according to its Hamiltonian <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="script">H</mi><mtext> ⁣</mtext><mrow><mo fence="true">(</mo><mi mathvariant="bold">q</mi><mo separator="true">,</mo><mi mathvariant="bold">p</mi><mo separator="true">,</mo><mi>t</mi><mo fence="true">)</mo></mrow></mrow><annotation encoding="application/x-tex">\mathcal H\!\left(\mathbf q,\mathbf p,t\right)</annotation></semantics></math></span></span>.</p>
<p>To utilize the canonical equations <span id="eq:canonical" data-label="(1)"><span class="katex-display-table"> <span class="katex-display-numbered"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mfrac><mrow><mi mathvariant="normal">d</mi><mi mathvariant="bold">q</mi></mrow><mrow><mi mathvariant="normal">d</mi><mi>t</mi></mrow></mfrac><mo>=</mo><mfrac><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="script">H</mi></mrow><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="bold">p</mi></mrow></mfrac><mo separator="true">,</mo><mspace width="1em"/><mfrac><mrow><mi mathvariant="normal">d</mi><mi mathvariant="bold">p</mi></mrow><mrow><mi mathvariant="normal">d</mi><mi>t</mi></mrow></mfrac><mo>=</mo><mo>−</mo><mfrac><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="script">H</mi></mrow><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="bold">p</mi></mrow></mfrac><mo separator="true">,</mo></mrow><annotation encoding="application/x-tex">\frac{\mathrm d\mathbf q}{\mathrm dt}=
    \frac{\partial\mathcal H}{\partial\mathbf p},\quad
    \frac{\mathrm d\mathbf p}{\mathrm dt}=
    -\frac{\partial\mathcal H}{\partial\mathbf p},</annotation></semantics></math></span></span></span></span> <span class="katex-display-number"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mo stretchy="false">(</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(1)</annotation></semantics></math></span></span></span></span> </span></span> we need to calculate the partial derivatives of <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="script">H</mi></mrow><annotation encoding="application/x-tex">\mathcal H</annotation></semantics></math></span></span>. Here is a simple code to calculate partial derivatives.</p>
<table class="rouge-table">
  <tbody>
    <tr>
      <td class="highlight language-ruby">
        <pre>
          <code>
            <span class="line line-1"><span class="k">def</span> <span class="nf">div</span> <span class="n">x0</span><span class="p">,</span> <span class="n">dx</span><span class="p">,</span> <span class="n">f</span>
</span>
            <span class="line line-2">	<span class="n">f0</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="p">(</span><span class="n">x0</span><span class="p">)</span>
</span>
            <span class="line line-3">	<span class="n">n</span> <span class="o">=</span> <span class="n">x0</span><span class="p">.</span><span class="nf">size</span>
</span>
            <span class="line line-4">	<span class="no">Array</span><span class="p">.</span><span class="nf">new</span> <span class="n">n</span> <span class="k">do</span> <span class="o">|</span><span class="n">i</span><span class="o">|</span>
</span>
            <span class="line line-5">		<span class="p">(</span><span class="n">f</span><span class="o">.</span><span class="p">(</span><span class="n">x0</span> <span class="o">+</span> <span class="no">Vector</span><span class="p">.</span><span class="nf">basis</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span> <span class="o">*</span> <span class="n">dx</span><span class="p">)</span> <span class="o">-</span> <span class="n">f0</span><span class="p">)</span> <span class="o">/</span> <span class="n">dx</span>
</span>
            <span class="line line-6">	<span class="k">end</span>
</span>
            <span class="line line-7"><span class="k">end</span>
</span>
          </code>
        </pre>
      </td>
    </tr>
  </tbody>
</table>
<p class="no-indent">
(RGSS do not have <code>matrix.rb</code>, you can copy one from the attached file below.) Here <code>x0</code> is a <code>Vector</code>, <code>f</code> is a <code>call</code>-able object as a function of vectors, <code>dx</code> is a small scalar which we are going to take <code>1e-6</code>.
</p>
<p>Let <code>x = Vector[*q, *p]</code>, and then Formula <a href="#eq:canonical">1</a> has the form <span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mfrac><mrow><mi mathvariant="normal">d</mi><mi mathvariant="bold">x</mi></mrow><mrow><mi mathvariant="normal">d</mi><mi>t</mi></mrow></mfrac><mo>=</mo><mi>f</mi><mtext> ⁣</mtext><mrow><mo fence="true">(</mo><mi mathvariant="bold">x</mi><mo fence="true">)</mo></mrow><mi mathvariant="normal">.</mi></mrow><annotation encoding="application/x-tex">\frac{\mathrm d\mathbf x}{\mathrm dt}=f\!\left(\mathbf x\right).</annotation></semantics></math></span></span></span> To solve this equation numerically, we need to use a famous method called the (explicit) Runge–Kutta method.</p>
<table class="rouge-table">
  <tbody>
    <tr>
      <td class="highlight language-ruby">
        <pre>
          <code>
            <span class="line line-1"><span class="k">def</span> <span class="nf">runge_kutta</span> <span class="n">initial</span><span class="p">,</span> <span class="n">max_t</span><span class="p">,</span> <span class="n">dt</span><span class="p">,</span> <span class="p">(</span><span class="o">*</span><span class="n">pyramid</span><span class="p">,</span> <span class="n">coefs</span><span class="p">),</span> <span class="n">func</span>
</span>
            <span class="line line-2">	<span class="p">(</span><span class="mi">0</span><span class="o">..</span><span class="n">max_t</span><span class="p">).</span><span class="nf">step</span><span class="p">(</span><span class="n">dt</span><span class="p">).</span><span class="nf">reduce</span> <span class="n">initial</span> <span class="k">do</span> <span class="o">|</span><span class="n">ret</span><span class="p">,</span> <span class="n">t</span><span class="o">|</span>
</span>
            <span class="line line-3">		<span class="vg">$canvas</span><span class="p">.</span><span class="nf">trace</span> <span class="n">t</span><span class="p">,</span> <span class="n">ret</span> <span class="k">if</span> <span class="vg">$canvas</span>
</span>
            <span class="line line-4">		<span class="n">coefs</span><span class="p">.</span><span class="nf">zip</span><span class="p">(</span><span class="n">pyramid</span><span class="p">).</span><span class="nf">each_with_object</span><span class="p">([]).</span><span class="nf">sum</span> <span class="k">do</span> <span class="o">|</span><span class="p">(</span><span class="n">coef</span><span class="p">,</span> <span class="n">row</span><span class="p">),</span> <span class="n">ary</span><span class="o">|</span>
</span>
            <span class="line line-5">			<span class="n">coef</span> <span class="o">*</span> <span class="n">ary</span><span class="p">.</span><span class="nf">push</span><span class="p">(</span><span class="n">func</span><span class="o">.</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">row</span><span class="p">.</span><span class="nf">inner</span><span class="p">(</span><span class="n">ary</span><span class="p">)</span> <span class="o">*</span> <span class="n">dt</span> <span class="o">+</span> <span class="n">ret</span><span class="p">)).</span><span class="nf">last</span>
</span>
            <span class="line line-6">		<span class="k">end</span> <span class="o">*</span> <span class="n">dt</span> <span class="o">+</span> <span class="n">ret</span><span class="c1">#p(ret)</span>
</span>
            <span class="line line-7">	<span class="k">end</span>
</span>
            <span class="line line-8"><span class="k">end</span>
</span>
          </code>
        </pre>
      </td>
    </tr>
  </tbody>
</table>
<p class="no-indent">
Note that Runge–Kutta is a family of methods. The argument <code>(*pyramid, coefs)</code> takes one of the following, each of which is a single Runge–Kutta method.
</p>
<table class="rouge-table">
  <tbody>
    <tr>
      <td class="highlight language-ruby">
        <pre>
          <code>
            <span class="line line-1"><span class="no">FORWARD_EULER</span> <span class="o">=</span> <span class="p">[[],[</span><span class="mi">1</span><span class="p">]]</span>
</span>
            <span class="line line-2"><span class="no">EXPLICIT_MIDPOINT</span> <span class="o">=</span> <span class="p">[[],[</span><span class="mi">1</span><span class="o">/</span><span class="mf">2.0</span><span class="p">],[</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">]]</span>
</span>
            <span class="line line-3"><span class="no">HEUN</span> <span class="o">=</span> <span class="p">[[],[</span><span class="mi">1</span><span class="p">],[</span><span class="mi">1</span><span class="o">/</span><span class="mf">2.0</span><span class="p">,</span><span class="mi">1</span><span class="o">/</span><span class="mf">2.0</span><span class="p">]]</span>
</span>
            <span class="line line-4"><span class="no">RALSTON</span> <span class="o">=</span> <span class="p">[[],[</span><span class="mi">2</span><span class="o">/</span><span class="mf">3.0</span><span class="p">],[</span><span class="mi">1</span><span class="o">/</span><span class="mf">4.0</span><span class="p">,</span><span class="mi">3</span><span class="o">/</span><span class="mf">4.0</span><span class="p">]]</span>
</span>
            <span class="line line-5"><span class="no">KUTTA_3RD</span> <span class="o">=</span> <span class="p">[[],[</span><span class="mi">1</span><span class="o">/</span><span class="mf">2.0</span><span class="p">],[</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">],[</span><span class="mi">1</span><span class="o">/</span><span class="mf">6.0</span><span class="p">,</span><span class="mi">2</span><span class="o">/</span><span class="mf">3.0</span><span class="p">,</span><span class="mi">1</span><span class="o">/</span><span class="mf">6.0</span><span class="p">]]</span>
</span>
            <span class="line line-6"><span class="no">HEUN_3RD</span> <span class="o">=</span> <span class="p">[[],[</span><span class="mi">1</span><span class="o">/</span><span class="mf">3.0</span><span class="p">],[</span><span class="mi">0</span><span class="p">,</span><span class="mi">2</span><span class="o">/</span><span class="mf">3.0</span><span class="p">],[</span><span class="mi">1</span><span class="o">/</span><span class="mf">4.0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">3</span><span class="o">/</span><span class="mf">4.0</span><span class="p">]]</span>
</span>
            <span class="line line-7"><span class="no">RALSTON_3RD</span> <span class="o">=</span> <span class="p">[[],[</span><span class="mi">1</span><span class="o">/</span><span class="mf">2.0</span><span class="p">],[</span><span class="mi">0</span><span class="p">,</span><span class="mi">3</span><span class="o">/</span><span class="mf">4.0</span><span class="p">],[</span><span class="mi">2</span><span class="o">/</span><span class="mf">9.0</span><span class="p">,</span><span class="mi">1</span><span class="o">/</span><span class="mf">3.0</span><span class="p">,</span><span class="mi">4</span><span class="o">/</span><span class="mf">9.0</span><span class="p">]]</span>
</span>
            <span class="line line-8"><span class="no">SSPRK3</span> <span class="o">=</span> <span class="p">[[],[</span><span class="mi">1</span><span class="p">],[</span><span class="mi">1</span><span class="o">/</span><span class="mf">4.0</span><span class="p">,</span><span class="mi">1</span><span class="o">/</span><span class="mf">4.0</span><span class="p">],[</span><span class="mi">1</span><span class="o">/</span><span class="mf">6.0</span><span class="p">,</span><span class="mi">1</span><span class="o">/</span><span class="mf">6.0</span><span class="p">,</span><span class="mi">2</span><span class="o">/</span><span class="mf">3.0</span><span class="p">]]</span>
</span>
            <span class="line line-9"><span class="no">CLASSIC_4TH</span> <span class="o">=</span> <span class="p">[[],[</span><span class="mi">1</span><span class="o">/</span><span class="mf">2.0</span><span class="p">],[</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="o">/</span><span class="mf">2.0</span><span class="p">],[</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">],[</span><span class="mi">1</span><span class="o">/</span><span class="mf">6.0</span><span class="p">,</span><span class="mi">1</span><span class="o">/</span><span class="mf">3.0</span><span class="p">,</span><span class="mi">1</span><span class="o">/</span><span class="mf">3.0</span><span class="p">,</span><span class="mi">1</span><span class="o">/</span><span class="mf">6.0</span><span class="p">]]</span>
</span>
            <span class="line line-10"><span class="no">RALSTON_4TH</span> <span class="o">=</span> <span class="p">[[],[</span><span class="mf">0.4</span><span class="p">],[</span><span class="mf">0.29697761</span><span class="p">,</span><span class="mf">0.15875964</span><span class="p">],[</span><span class="mf">0.21810040</span><span class="p">,</span><span class="o">-</span><span class="mf">3.05096516</span><span class="p">,</span>
</span>
            <span class="line line-11">		<span class="mf">3.83286476</span><span class="p">],[</span><span class="mf">0.17476028</span><span class="p">,</span> <span class="o">-</span><span class="mf">0.55148066</span><span class="p">,</span> <span class="mf">1.20553560</span><span class="p">,</span> <span class="mf">0.17118478</span><span class="p">]]</span>
</span>
            <span class="line line-12"><span class="no">THREE_EIGHTH_4TH</span> <span class="o">=</span> <span class="p">[[],[</span><span class="mi">1</span><span class="o">/</span><span class="mf">3.0</span><span class="p">],[</span><span class="o">-</span><span class="mi">1</span><span class="o">/</span><span class="mf">3.0</span><span class="p">,</span><span class="mi">1</span><span class="p">],[</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">],[</span><span class="mi">1</span><span class="o">/</span><span class="mf">8.0</span><span class="p">,</span><span class="mi">3</span><span class="o">/</span><span class="mf">8.0</span><span class="p">,</span><span class="mi">3</span><span class="o">/</span><span class="mf">8.0</span><span class="p">,</span><span class="mi">1</span><span class="o">/</span><span class="mf">8.0</span><span class="p">]]</span>
</span>
          </code>
        </pre>
      </td>
    </tr>
  </tbody>
</table>
<p>Here we are going to take <code>CLASSIC_4TH</code>.</p>
<p>The <code>$canvas</code> appearing here is an object that is going to draw the result onto the screen.</p>
<p>Here we also need to have some patches to get it work.</p>
<table class="rouge-table">
  <tbody>
    <tr>
      <td class="highlight language-ruby">
        <pre>
          <code>
            <span class="line line-1"><span class="k">class</span> <span class="nc">Float</span>
</span>
            <span class="line line-2">	<span class="k">alias</span> <span class="n">ulysses20200426121236_add</span> <span class="o">+</span>
</span>
            <span class="line line-3">	<span class="k">def</span> <span class="nf">+</span> <span class="n">other</span>
</span>
            <span class="line line-4">		<span class="k">if</span> <span class="n">zero?</span> <span class="o">&amp;&amp;</span> <span class="p">[</span><span class="no">Vector</span><span class="p">,</span> <span class="no">Matrix</span><span class="p">].</span><span class="nf">any?</span> <span class="p">{</span> <span class="o">|</span><span class="n">c</span><span class="o">|</span> <span class="n">other</span><span class="p">.</span><span class="nf">is_a?</span> <span class="n">c</span> <span class="p">}</span>
</span>
            <span class="line line-5">			<span class="n">other</span>
</span>
            <span class="line line-6">		<span class="k">else</span>
</span>
            <span class="line line-7">			<span class="n">ulysses20200426121236_add</span> <span class="n">other</span>
</span>
            <span class="line line-8">		<span class="k">end</span>
</span>
            <span class="line line-9">	<span class="k">end</span>
</span>
            <span class="line line-10"><span class="k">end</span>
</span>
            <span class="line line-11"><span class="k">module</span> <span class="nn">Enumerable</span>
</span>
            <span class="line line-12">	<span class="k">def</span> <span class="nf">sum</span> <span class="n">init</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">block</span>
</span>
            <span class="line line-13">		<span class="p">(</span><span class="n">block</span> <span class="p">?</span> <span class="n">map</span><span class="p">(</span><span class="o">&amp;</span><span class="n">block</span><span class="p">)</span> <span class="p">:</span> <span class="nb">self</span><span class="p">).</span><span class="nf">reduce</span> <span class="n">init</span><span class="p">,</span> <span class="p">:</span><span class="o">+</span>
</span>
            <span class="line line-14">	<span class="k">end</span>
</span>
            <span class="line line-15"><span class="k">end</span>
</span>
            <span class="line line-16"><span class="k">class</span> <span class="nc">Array</span>
</span>
            <span class="line line-17">	<span class="k">def</span> <span class="nf">inner</span> <span class="n">other</span>
</span>
            <span class="line line-18">		<span class="n">zip</span><span class="p">(</span><span class="n">other</span><span class="p">).</span><span class="nf">sum</span> <span class="p">{</span> <span class="o">|</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="o">|</span> <span class="n">a</span> <span class="o">*</span> <span class="n">b</span> <span class="p">}</span>
</span>
            <span class="line line-19">	<span class="k">end</span>
</span>
            <span class="line line-20"><span class="k">end</span>
</span>
          </code>
        </pre>
      </td>
    </tr>
  </tbody>
</table>
<p class="no-indent">
(Again, note that this is Ruby 1.9.2.)
</p>
<p>Finally, just combine them up, and we can solve a Hamiltonian numerically.</p>
<table class="rouge-table">
  <tbody>
    <tr>
      <td class="highlight language-ruby">
        <pre>
          <code>
            <span class="line line-1"><span class="k">def</span> <span class="nf">solve_hamiltonian</span> <span class="n">n</span><span class="p">,</span> <span class="n">qp0</span><span class="p">,</span> <span class="n">max_t</span><span class="p">,</span> <span class="n">dt</span><span class="p">,</span> <span class="n">hamiltonian</span>
</span>
            <span class="line line-2">	<span class="n">runge_kutta</span> <span class="n">qp0</span><span class="p">,</span> <span class="n">max_t</span><span class="p">,</span> <span class="n">dt</span><span class="p">,</span> <span class="no">CLASSIC_4TH</span><span class="p">,</span> <span class="o">-&gt;</span><span class="n">t</span><span class="p">,</span> <span class="n">qp</span> <span class="k">do</span>
</span>
            <span class="line line-3">		<span class="n">dqpdt</span> <span class="o">=</span> <span class="n">div</span> <span class="n">qp</span><span class="p">,</span> <span class="mf">1e-6</span><span class="p">,</span> <span class="o">-&gt;</span><span class="n">x</span> <span class="p">{</span> <span class="n">hamiltonian</span><span class="o">.</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span> <span class="p">}</span>
</span>
            <span class="line line-4">		<span class="no">Vector</span><span class="p">[</span><span class="o">*</span><span class="n">dqpdt</span><span class="p">[</span><span class="n">n</span><span class="o">...</span><span class="n">n</span><span class="o">*</span><span class="mi">2</span><span class="p">],</span> <span class="o">*</span><span class="n">dqpdt</span><span class="p">[</span><span class="mi">0</span><span class="o">...</span><span class="n">n</span><span class="p">].</span><span class="nf">map</span><span class="p">(</span><span class="o">&amp;</span><span class="ss">:-@</span><span class="p">)]</span>
</span>
            <span class="line line-5">	<span class="k">end</span>
</span>
            <span class="line line-6"><span class="k">end</span>
</span>
          </code>
        </pre>
      </td>
    </tr>
  </tbody>
</table>
<p>For example, let’s simulate a double pendulum.</p>
<table class="rouge-table">
  <tbody>
    <tr>
      <td class="highlight language-ruby">
        <pre>
          <code>
            <span class="line line-1"><span class="n">solve_hamiltonian</span> <span class="mi">2</span><span class="p">,</span><span class="no">Vector</span><span class="p">[</span><span class="no">PI</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span><span class="mf">0.0</span><span class="p">,</span><span class="mf">0.0</span><span class="p">,</span><span class="mf">0.0</span><span class="p">],</span><span class="no">Float</span><span class="o">::</span><span class="no">INFINITY</span><span class="p">,</span><span class="mf">1e-3</span><span class="p">,</span>
</span>
            <span class="line line-2">		<span class="o">-&gt;</span><span class="n">t</span><span class="p">,(</span><span class="n">q1</span><span class="p">,</span><span class="n">q2</span><span class="p">,</span><span class="n">p1</span><span class="p">,</span><span class="n">p2</span><span class="p">){</span><span class="n">p1</span><span class="o">**</span><span class="mi">2</span><span class="o">+</span><span class="n">p2</span><span class="o">**</span><span class="mi">2</span><span class="o">/</span><span class="mi">2</span><span class="o">+</span><span class="n">cos</span><span class="p">(</span><span class="n">q1</span><span class="o">-</span><span class="n">q2</span><span class="p">)</span><span class="o">*</span><span class="n">p1</span><span class="o">*</span><span class="n">p2</span><span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">q1</span><span class="p">)</span><span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">q2</span><span class="p">)}</span>
</span>
          </code>
        </pre>
      </td>
    </tr>
  </tbody>
</table>
<figure>
<img src="/assets/images/figures/2020-04-28-simulation-rgss/double_pendulum.gif" alt="The simulated motion of a double pendulum."/>

</figure>
<p>The codes are not complete in this post. See the <a href="/assets/codes/RungeKutta.rar">attached file</a> for details. You can open the project using <a href="https://store.steampowered.com/app/220700/RPG_Maker_VX_Ace" target="_blank" rel="external">RPG Maker VX Ace</a>. The <code>Game.exe</code> file is not the official <code>Game.exe</code> executable but the third-party improved version of it called <a href="http://cirno.blog/archives/290" target="_blank" rel="external">RGD</a> (of version 1.3.2, while the latest till now is 1.5.1).</p>]]></content><author><name>UlyssesZhan</name><email>ulysseszhan@gmail.com</email></author><category term="physics" /><category term="ruby" /><category term="rgss" /><category term="hamiltonian" /><category term="calculus" /><category term="ode" /><summary type="html"><![CDATA[Hamiltonian mechanics gives us a good way to simulate mechanical systems as long as we can get its Hamiltonian and its initial conditions. I implemented this simulation in RGSS3, the game scripting system shipped with RPG Maker VX Ace.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ulysseszh.github.io/assets/images/covers/2020-04-28-simulation-rgss.png" /><media:content medium="image" url="https://ulysseszh.github.io/assets/images/covers/2020-04-28-simulation-rgss.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html"><![CDATA[Use complex numbers as canonical variables]]></title><link href="https://ulysseszh.github.io/physics/2020/01/06/complex-canonical.html" rel="alternate" type="text/html" title="Use complex numbers as canonical variables" /><published>2020-01-05T22:09:47-08:00</published><updated>2020-01-05T22:09:47-08:00</updated><id>https://ulysseszh.github.io/physics/2020/01/06/complex-canonical</id><content type="html" xml:base="https://ulysseszh.github.io/physics/2020/01/06/complex-canonical.html"><![CDATA[<h2 data-label="0.1" id="introduction">Introduction</h2>
<p>In Hamiltonian mechanics, if we let <span id="eq:def-c" data-label="(1)"><span class="katex-display-table"> <span class="katex-display-numbered"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi mathvariant="bold">c</mi><mo><mi mathvariant="normal">≔</mi></mo><mi>α</mi><mi mathvariant="bold">q</mi><mo>+</mo><mi mathvariant="normal">i</mi><mi>β</mi><mi mathvariant="bold">p</mi><mo separator="true">,</mo></mrow><annotation encoding="application/x-tex">\mathbf c\coloneqq\alpha\mathbf q+\mathrm i\beta\mathbf p,</annotation></semantics></math></span></span></span></span> <span class="katex-display-number"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mo stretchy="false">(</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(1)</annotation></semantics></math></span></span></span></span> </span></span> where <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>α</mi></mrow><annotation encoding="application/x-tex">\alpha</annotation></semantics></math></span></span> and <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>β</mi></mrow><annotation encoding="application/x-tex">\beta</annotation></semantics></math></span></span> are non-zero real numbers, then two real vectors <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="bold">q</mi></mrow><annotation encoding="application/x-tex">\mathbf q</annotation></semantics></math></span></span> and <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="bold">p</mi></mrow><annotation encoding="application/x-tex">\mathbf p</annotation></semantics></math></span></span> becomes a complex vector <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="bold">c</mi></mrow><annotation encoding="application/x-tex">\mathbf c</annotation></semantics></math></span></span>. In other words, we use <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi></mrow><annotation encoding="application/x-tex">s</annotation></semantics></math></span></span> complex numbers instead of <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn><mi>s</mi></mrow><annotation encoding="application/x-tex">2s</annotation></semantics></math></span></span> real numbers to represent the status of a system, where <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi></mrow><annotation encoding="application/x-tex">s</annotation></semantics></math></span></span> is the DOF.</p>
<p>We are going to find out the form of some theorems in Hamiltonian mechanics with respect to the complex variable that we have just defined.</p>
<p>Note that if you do not care about the units, it is recommended to let <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>α</mi><mo>=</mo><mi>β</mi><mo>=</mo><mfrac><mn>1</mn><msqrt><mn>2</mn></msqrt></mfrac></mrow><annotation encoding="application/x-tex">\alpha=\beta=\frac1{\sqrt2}</annotation></semantics></math></span></span> due to the convenience.</p>
<h2 data-label="0.2" id="hamiltonian">Hamiltonian</h2>
<p>In this way, the Hamiltonian is a function of real value with respect to a complex vector. To be clear, <span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi mathvariant="script">H</mi><mtext> ⁣</mtext><mrow><mo fence="true">(</mo><mi mathvariant="bold">c</mi><mo separator="true">,</mo><mi>t</mi><mo fence="true">)</mo></mrow><mo>=</mo><mi mathvariant="script">H</mi><mtext> ⁣</mtext><mrow><mo fence="true">(</mo><mi mathvariant="bold">q</mi><mo separator="true">,</mo><mi mathvariant="bold">p</mi><mo separator="true">,</mo><mi>t</mi><mo fence="true">)</mo></mrow><mi mathvariant="normal">.</mi></mrow><annotation encoding="application/x-tex">
    \mathcal H\!\left(\mathbf c,t\right)=
    \mathcal H\!\left(\mathbf q,\mathbf p,t\right).
</annotation></semantics></math></span></span></span> The Hamiltonian is not an analytical function, so we need to redefine how a function can be differentiated in order that the Hamiltonian is “differentiable.” The approach to this is to use the average of the limit along the real axis and that along the imaginary axis, which means <span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mfrac><mi mathvariant="normal">d</mi><mrow><mi mathvariant="normal">d</mi><mrow><mo fence="true">(</mo><mi>x</mi><mo>+</mo><mi mathvariant="normal">i</mi><mi>y</mi><mo fence="true">)</mo></mrow></mrow></mfrac><mo><mi mathvariant="normal">≔</mi></mo><mfrac><mn>1</mn><mn>2</mn></mfrac><mrow><mo fence="true">(</mo><mfrac><mi mathvariant="normal">∂</mi><mrow><mi mathvariant="normal">∂</mi><mi>x</mi></mrow></mfrac><mo>−</mo><mi mathvariant="normal">i</mi><mfrac><mi mathvariant="normal">∂</mi><mrow><mi mathvariant="normal">∂</mi><mi>y</mi></mrow></mfrac><mo fence="true">)</mo></mrow><mi mathvariant="normal">.</mi></mrow><annotation encoding="application/x-tex">
    \frac{\mathrm d}{\mathrm d\left(x+\mathrm iy\right)}\coloneqq
    \frac12\left(\frac\partial{\partial x}-
    \mathrm i\frac\partial{\partial y}\right).
</annotation></semantics></math></span></span></span> Thus, <span id="eq:d-dc" data-label="(2)"><span class="katex-display-table"> <span class="katex-display-numbered"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mfrac><mi mathvariant="normal">∂</mi><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="bold">c</mi></mrow></mfrac><mo>=</mo><mfrac><mn>1</mn><mrow><mn>2</mn><mi>α</mi></mrow></mfrac><mfrac><mi mathvariant="normal">∂</mi><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="bold">q</mi></mrow></mfrac><mo>−</mo><mfrac><mi mathvariant="normal">i</mi><mrow><mn>2</mn><mi>β</mi></mrow></mfrac><mfrac><mi mathvariant="normal">∂</mi><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="bold">p</mi></mrow></mfrac><mi mathvariant="normal">.</mi></mrow><annotation encoding="application/x-tex">
    \frac\partial{\partial\mathbf c}=
    \frac1{2\alpha}\frac\partial{\partial\mathbf q}-
    \frac{\mathrm i}{2\beta}\frac\partial{\partial\mathbf p}.
</annotation></semantics></math></span></span></span></span> <span class="katex-display-number"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mo stretchy="false">(</mo><mn>2</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(2)</annotation></semantics></math></span></span></span></span> </span></span> There is also an obvious property that for any function <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi><mo>:</mo><mi mathvariant="double-struck">C</mi><mo>→</mo><mi mathvariant="double-struck">R</mi></mrow><annotation encoding="application/x-tex">f:\mathbb C\rightarrow\mathbb R</annotation></semantics></math></span></span>, we have <span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mfrac><mrow><mi mathvariant="normal">∂</mi><mi>f</mi></mrow><mrow><mi mathvariant="normal">∂</mi><msup><mi>z</mi><mo>∗</mo></msup></mrow></mfrac><mo>=</mo><msup><mrow><mo fence="true">(</mo><mfrac><mrow><mi mathvariant="normal">∂</mi><mi>f</mi></mrow><mrow><mi mathvariant="normal">∂</mi><mi>z</mi></mrow></mfrac><mo fence="true">)</mo></mrow><mo>∗</mo></msup><mi mathvariant="normal">.</mi></mrow><annotation encoding="application/x-tex">
    \frac{\partial f}{\partial z^*}=
    \left(\frac{\partial f}{\partial z}\right)^*.
</annotation></semantics></math></span></span></span> Furthermore, <span id="eq:d-dq-d-dp" data-label="(3)"><span class="katex-display-table"> <span class="katex-display-numbered"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mfrac><mi mathvariant="normal">∂</mi><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="bold">q</mi></mrow></mfrac><mo>=</mo><mi>α</mi><mrow><mo fence="true">(</mo><mfrac><mi mathvariant="normal">∂</mi><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="bold">c</mi></mrow></mfrac><mo>+</mo><mfrac><mi mathvariant="normal">∂</mi><mrow><mi mathvariant="normal">∂</mi><msup><mi mathvariant="bold">c</mi><mo>∗</mo></msup></mrow></mfrac><mo fence="true">)</mo></mrow><mo separator="true">,</mo><mspace width="1em"/><mfrac><mi mathvariant="normal">∂</mi><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="bold">p</mi></mrow></mfrac><mo>=</mo><mi mathvariant="normal">i</mi><mi>β</mi><mrow><mo fence="true">(</mo><mfrac><mi mathvariant="normal">∂</mi><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="bold">c</mi></mrow></mfrac><mo>−</mo><mfrac><mi mathvariant="normal">∂</mi><mrow><mi mathvariant="normal">∂</mi><msup><mi mathvariant="bold">c</mi><mo>∗</mo></msup></mrow></mfrac><mo fence="true">)</mo></mrow><mi mathvariant="normal">.</mi></mrow><annotation encoding="application/x-tex">
    \frac\partial{\partial\mathbf q}=
    \alpha\left(\frac\partial{\partial\mathbf c}+
    \frac\partial{\partial\mathbf c^*}\right),\quad
    \frac\partial{\partial\mathbf p}=
    \mathrm i\beta\left(\frac\partial{\partial\mathbf c}-
    \frac\partial{\partial\mathbf c^*}\right).
</annotation></semantics></math></span></span></span></span> <span class="katex-display-number"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mo stretchy="false">(</mo><mn>3</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(3)</annotation></semantics></math></span></span></span></span> </span></span></p>
<h2 data-label="0.3" id="canonical-equations">Canonical equations</h2>
<p>Now we may be curious about what will the canonical equations <span id="eq:canonical-eq" data-label="(4)"><span class="katex-display-table"> <span class="katex-display-numbered"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mfrac><mrow><mi mathvariant="normal">d</mi><mi mathvariant="bold">q</mi></mrow><mrow><mi mathvariant="normal">d</mi><mi>t</mi></mrow></mfrac><mo>=</mo><mfrac><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="script">H</mi></mrow><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="bold">p</mi></mrow></mfrac><mo separator="true">,</mo><mspace width="1em"/><mfrac><mrow><mi mathvariant="normal">d</mi><mi mathvariant="bold">p</mi></mrow><mrow><mi mathvariant="normal">d</mi><mi>t</mi></mrow></mfrac><mo>=</mo><mo>−</mo><mfrac><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="script">H</mi></mrow><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="bold">q</mi></mrow></mfrac></mrow><annotation encoding="application/x-tex">\frac{\mathrm d\mathbf q}{\mathrm dt}=
    \frac{\partial\mathcal H}{\partial\mathbf p},\quad
    \frac{\mathrm d\mathbf p}{\mathrm dt}=
    -\frac{\partial\mathcal H}{\partial\mathbf q}
</annotation></semantics></math></span></span></span></span> <span class="katex-display-number"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mo stretchy="false">(</mo><mn>4</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(4)</annotation></semantics></math></span></span></span></span> </span></span> change into after <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="bold">c</mi></mrow><annotation encoding="application/x-tex">\mathbf c</annotation></semantics></math></span></span> is introduced.</p>
<p>Apply Formula <a href="#eq:d-dc">2</a> to <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn><mi mathvariant="normal">i</mi><mi>α</mi><mi>β</mi><mi mathvariant="script">H</mi></mrow><annotation encoding="application/x-tex">2\mathrm i\alpha\beta\mathcal H</annotation></semantics></math></span></span>, and we can derive that <span id="eq:dH-dc" data-label="(5)"><span class="katex-display-table"> <span class="katex-display-numbered"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mn>2</mn><mi mathvariant="normal">i</mi><mi>α</mi><mi>β</mi><mfrac><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="script">H</mi></mrow><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="bold">c</mi></mrow></mfrac><mo>=</mo><mi>α</mi><mfrac><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="script">H</mi></mrow><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="bold">p</mi></mrow></mfrac><mo>+</mo><mi mathvariant="normal">i</mi><mi>β</mi><mfrac><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="script">H</mi></mrow><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="bold">q</mi></mrow></mfrac><mi mathvariant="normal">.</mi></mrow><annotation encoding="application/x-tex">2\mathrm i\alpha\beta\frac{\partial\mathcal H}{\partial\mathbf c}=
   \alpha\frac{\partial\mathcal H}{\partial\mathbf p}+
   \mathrm i\beta\frac{\partial\mathcal H}{\partial\mathbf q}.</annotation></semantics></math></span></span></span></span> <span class="katex-display-number"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mo stretchy="false">(</mo><mn>5</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(5)</annotation></semantics></math></span></span></span></span> </span></span> On the other hand, take the derivative of both sides of Formula <a href="#eq:def-c">1</a>, and substitute Formula <a href="#eq:canonical-eq">4</a> into it, and then we can derive that <span id="eq:dc-dt" data-label="(6)"><span class="katex-display-table"> <span class="katex-display-numbered"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mfrac><mrow><mi mathvariant="normal">d</mi><mi mathvariant="bold">c</mi></mrow><mrow><mi mathvariant="normal">d</mi><mi>t</mi></mrow></mfrac><mo>=</mo><mi>α</mi><mfrac><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="script">H</mi></mrow><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="bold">p</mi></mrow></mfrac><mo>−</mo><mi mathvariant="normal">i</mi><mi>β</mi><mfrac><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="script">H</mi></mrow><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="bold">q</mi></mrow></mfrac><mi mathvariant="normal">.</mi></mrow><annotation encoding="application/x-tex">\frac{\mathrm d\mathbf c}{\mathrm dt}=
    \alpha\frac{\partial\mathcal H}{\partial\mathbf p}-
    \mathrm i\beta\frac{\partial\mathcal H}{\partial\mathbf q}.
</annotation></semantics></math></span></span></span></span> <span class="katex-display-number"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mo stretchy="false">(</mo><mn>6</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(6)</annotation></semantics></math></span></span></span></span> </span></span> Compare Formula <a href="#eq:dH-dc">5</a> and <a href="#eq:dc-dt">6</a>, we get the useful formula <span id="eq:new-canonical-eq" data-label="(7)"><span class="katex-display-table"> <span class="katex-display-numbered"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mfrac><mrow><mi mathvariant="normal">d</mi><mi mathvariant="bold">c</mi></mrow><mrow><mi mathvariant="normal">d</mi><mi>t</mi></mrow></mfrac><mo>=</mo><mo>−</mo><mn>2</mn><mi mathvariant="normal">i</mi><mi>α</mi><mi>β</mi><mfrac><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="script">H</mi></mrow><mrow><mi mathvariant="normal">∂</mi><msup><mi mathvariant="bold">c</mi><mo>∗</mo></msup></mrow></mfrac><mi mathvariant="normal">.</mi></mrow><annotation encoding="application/x-tex">
    \frac{\mathrm d\mathbf c}{\mathrm dt}=
    -2\mathrm i\alpha\beta
    \frac{\partial\mathcal H}{\partial\mathbf c^*}.
</annotation></semantics></math></span></span></span></span> <span class="katex-display-number"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mo stretchy="false">(</mo><mn>7</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(7)</annotation></semantics></math></span></span></span></span> </span></span> The new canonical equations are a set of <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi></mrow><annotation encoding="application/x-tex">s</annotation></semantics></math></span></span> ODEs of <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn></mrow><annotation encoding="application/x-tex">1</annotation></semantics></math></span></span>st degree, and there should be only <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi></mrow><annotation encoding="application/x-tex">s</annotation></semantics></math></span></span> (instead of <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn><mi>s</mi></mrow><annotation encoding="application/x-tex">2s</annotation></semantics></math></span></span>) arbitrary constants in the solution.</p>
<h2 data-label="0.4" id="poisson-bracket">Poisson bracket</h2>
<p>The Poisson bracket <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo fence="true">{</mo><mo>⋅</mo><mo separator="true">,</mo><mo>⋅</mo><mo fence="true">}</mo></mrow><annotation encoding="application/x-tex">\left\{\cdot,\cdot\right\}</annotation></semantics></math></span></span> can be defined just as usual: <span id="eq:def-poisson" data-label="(8)"><span class="katex-display-table"> <span class="katex-display-numbered"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mrow><mo fence="true">{</mo><mi>f</mi><mo separator="true">,</mo><mi>g</mi><mo fence="true">}</mo></mrow><mo><mi mathvariant="normal">≔</mi></mo><mfrac><mrow><mi mathvariant="normal">∂</mi><mi>f</mi></mrow><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="bold">q</mi></mrow></mfrac><mo>⋅</mo><mfrac><mrow><mi mathvariant="normal">∂</mi><mi>g</mi></mrow><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="bold">p</mi></mrow></mfrac><mo>−</mo><mfrac><mrow><mi mathvariant="normal">∂</mi><mi>f</mi></mrow><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="bold">p</mi></mrow></mfrac><mo>⋅</mo><mfrac><mrow><mi mathvariant="normal">∂</mi><mi>g</mi></mrow><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="bold">q</mi></mrow></mfrac><mo separator="true">;</mo></mrow><annotation encoding="application/x-tex">
    \left\{f,g\right\}\coloneqq
    \frac{\partial f}{\partial\mathbf q}\cdot
    \frac{\partial g}{\partial\mathbf p}-
    \frac{\partial f}{\partial\mathbf p}\cdot
    \frac{\partial g}{\partial\mathbf q};
</annotation></semantics></math></span></span></span></span> <span class="katex-display-number"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mo stretchy="false">(</mo><mn>8</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(8)</annotation></semantics></math></span></span></span></span> </span></span> while something beautiful will occur if we substitute Formula <a href="#eq:d-dq-d-dp">3</a> into <a href="#eq:def-poisson">8</a>: <span id="eq:new-poisson" data-label="(9)"><span class="katex-display-table"> <span class="katex-display-numbered"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mrow><mo fence="true">{</mo><mi>f</mi><mo separator="true">,</mo><mi>g</mi><mo fence="true">}</mo></mrow><mo>=</mo><mo>−</mo><mn>2</mn><mi mathvariant="normal">i</mi><mi>α</mi><mi>β</mi><mrow><mo fence="true">(</mo><mfrac><mrow><mi mathvariant="normal">∂</mi><mi>f</mi></mrow><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="bold">c</mi></mrow></mfrac><mo>⋅</mo><mfrac><mrow><mi mathvariant="normal">∂</mi><mi>g</mi></mrow><mrow><mi mathvariant="normal">∂</mi><msup><mi mathvariant="bold">c</mi><mo>∗</mo></msup></mrow></mfrac><mo>−</mo><mfrac><mrow><mi mathvariant="normal">∂</mi><mi>f</mi></mrow><mrow><mi mathvariant="normal">∂</mi><msup><mi mathvariant="bold">c</mi><mo>∗</mo></msup></mrow></mfrac><mo>⋅</mo><mfrac><mrow><mi mathvariant="normal">∂</mi><mi>g</mi></mrow><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="bold">c</mi></mrow></mfrac><mo fence="true">)</mo></mrow><mi mathvariant="normal">.</mi></mrow><annotation encoding="application/x-tex">
    \left\{f,g\right\}=-2\mathrm i\alpha\beta
    \left(\frac{\partial f}{\partial\mathbf c}\cdot
    \frac{\partial g}{\partial\mathbf c^*}-
    \frac{\partial f}{\partial\mathbf c^*}\cdot
    \frac{\partial g}{\partial\mathbf c}\right).
</annotation></semantics></math></span></span></span></span> <span class="katex-display-number"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mo stretchy="false">(</mo><mn>9</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(9)</annotation></semantics></math></span></span></span></span> </span></span> With Formula <a href="#eq:new-poisson">9</a>, you can also verify that <span id="eq:d-dt-poisson" data-label="(10)"><span class="katex-display-table"> <span class="katex-display-numbered"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mfrac><mi mathvariant="normal">d</mi><mrow><mi mathvariant="normal">d</mi><mi>t</mi></mrow></mfrac><mo>=</mo><mfrac><mi mathvariant="normal">∂</mi><mrow><mi mathvariant="normal">∂</mi><mi>t</mi></mrow></mfrac><mo>−</mo><mrow><mo fence="true">{</mo><mi mathvariant="script">H</mi><mo separator="true">,</mo><mo>⋅</mo><mo fence="true">}</mo></mrow><mi mathvariant="normal">.</mi></mrow><annotation encoding="application/x-tex">
    \frac{\mathrm d}{\mathrm dt}=
    \frac\partial{\partial t}-\left\{\mathcal H,\cdot\right\}.
</annotation></semantics></math></span></span></span></span> <span class="katex-display-number"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mo stretchy="false">(</mo><mn>10</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(10)</annotation></semantics></math></span></span></span></span> </span></span></p>
<h2 data-label="0.5" id="canonical-transformation">Canonical transformation</h2>
<p>Consider some kind of transformation <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi mathvariant="bold">c</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><mo>=</mo><msup><mi mathvariant="bold">c</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><mtext> ⁣</mtext><mrow><mo fence="true">(</mo><mi mathvariant="bold">c</mi><mo fence="true">)</mo></mrow></mrow><annotation encoding="application/x-tex">\mathbf c'=\mathbf c'\!\left(\mathbf c\right)</annotation></semantics></math></span></span> that will preserve the form of the canonical equation, which means <span id="eq:transformed-canonical-eq" data-label="(11)"><span class="katex-display-table"> <span class="katex-display-numbered"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mfrac><mrow><mi mathvariant="normal">d</mi><msup><mi mathvariant="bold">c</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup></mrow><mrow><mi mathvariant="normal">d</mi><mi>t</mi></mrow></mfrac><mo>=</mo><mo>−</mo><mn>2</mn><mi mathvariant="normal">i</mi><mi>α</mi><mi>β</mi><mfrac><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="script">H</mi></mrow><mrow><mi mathvariant="normal">∂</mi><msup><mi mathvariant="bold">c</mi><mrow><mo mathvariant="normal">′</mo><mo>∗</mo></mrow></msup></mrow></mfrac><mi mathvariant="normal">.</mi></mrow><annotation encoding="application/x-tex">
    \frac{\mathrm d\mathbf c'}{\mathrm dt}=
    -2\mathrm i\alpha\beta
    \frac{\partial\mathcal H}{\partial\mathbf c'^*}.
</annotation></semantics></math></span></span></span></span> <span class="katex-display-number"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mo stretchy="false">(</mo><mn>11</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(11)</annotation></semantics></math></span></span></span></span> </span></span> (We do not consider those transformations that involves <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>t</mi></mrow><annotation encoding="application/x-tex">t</annotation></semantics></math></span></span>. As we all know, if a canonical transformation involves <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>t</mi></mrow><annotation encoding="application/x-tex">t</annotation></semantics></math></span></span>, an additional part should be added to <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="script">H</mi></mrow><annotation encoding="application/x-tex">\mathcal H</annotation></semantics></math></span></span>.)</p>
<p>Apply Formula <a href="#eq:d-dt-poisson">10</a> to <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi mathvariant="bold">c</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup></mrow><annotation encoding="application/x-tex">\mathbf c'</annotation></semantics></math></span></span> and make use of Formula <a href="#eq:transformed-canonical-eq">11</a>, we can derive that <span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mfrac><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="script">H</mi></mrow><mrow><mi mathvariant="normal">∂</mi><msup><mi mathvariant="bold">c</mi><mrow><mo mathvariant="normal">′</mo><mo>∗</mo></mrow></msup></mrow></mfrac><mo>=</mo><mrow><mo fence="true">{</mo><msup><mi mathvariant="bold">c</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><mo separator="true">,</mo><mi mathvariant="script">H</mi><mo fence="true">}</mo></mrow><mi mathvariant="normal">.</mi></mrow><annotation encoding="application/x-tex">
    \frac{\partial\mathcal H}{\partial\mathbf c'^*}=
    \left\{\mathbf c',\mathcal H\right\}.
</annotation></semantics></math></span></span></span> The equation should be true for all <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="script">H</mi></mrow><annotation encoding="application/x-tex">\mathcal H</annotation></semantics></math></span></span>. In other words, <span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mfrac><mi mathvariant="normal">∂</mi><mrow><mi mathvariant="normal">∂</mi><msup><mi mathvariant="bold">c</mi><mrow><mo mathvariant="normal">′</mo><mo>∗</mo></mrow></msup></mrow></mfrac><mo>=</mo><mrow><mo fence="true">{</mo><msup><mi mathvariant="bold">c</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><mo separator="true">,</mo><mo>⋅</mo><mo fence="true">}</mo></mrow><mo separator="true">,</mo></mrow><annotation encoding="application/x-tex">
    \frac\partial{\partial\mathbf c'^*}=
    \left\{\mathbf c',\cdot\right\},
</annotation></semantics></math></span></span></span> so <span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mfrac><mrow><mi mathvariant="normal">∂</mi><msup><mi mathvariant="bold">c</mi><mo>∗</mo></msup></mrow><mrow><mi mathvariant="normal">∂</mi><msup><mi mathvariant="bold">c</mi><mrow><mo mathvariant="normal">′</mo><mo>∗</mo></mrow></msup></mrow></mfrac><mfrac><mi mathvariant="normal">∂</mi><mrow><mi mathvariant="normal">∂</mi><msup><mi mathvariant="bold">c</mi><mo>∗</mo></msup></mrow></mfrac><mo>+</mo><mfrac><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="bold">c</mi></mrow><mrow><mi mathvariant="normal">∂</mi><msup><mi mathvariant="bold">c</mi><mrow><mo mathvariant="normal">′</mo><mo>∗</mo></mrow></msup></mrow></mfrac><mfrac><mi mathvariant="normal">∂</mi><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="bold">c</mi></mrow></mfrac><mo>=</mo><mfrac><mrow><mi mathvariant="normal">∂</mi><msup><mi mathvariant="bold">c</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup></mrow><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="bold">c</mi></mrow></mfrac><mfrac><mi mathvariant="normal">∂</mi><mrow><mi mathvariant="normal">∂</mi><msup><mi mathvariant="bold">c</mi><mo>∗</mo></msup></mrow></mfrac><mo>−</mo><mfrac><mrow><mi mathvariant="normal">∂</mi><msup><mi mathvariant="bold">c</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup></mrow><mrow><mi mathvariant="normal">∂</mi><msup><mi mathvariant="bold">c</mi><mo>∗</mo></msup></mrow></mfrac><mfrac><mi mathvariant="normal">∂</mi><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="bold">c</mi></mrow></mfrac><mi mathvariant="normal">.</mi></mrow><annotation encoding="application/x-tex">
    \frac{\partial\mathbf c^*}{\partial\mathbf c'^*}
    \frac\partial{\partial\mathbf c^*}+
    \frac{\partial\mathbf c}{\partial\mathbf c'^*}
    \frac\partial{\partial\mathbf c}=
    \frac{\partial\mathbf c'}{\partial\mathbf c}
    \frac\partial{\partial\mathbf c^*}-
    \frac{\partial\mathbf c'}{\partial\mathbf c^*}
    \frac\partial{\partial\mathbf c}.
</annotation></semantics></math></span></span></span>
Note that usually <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mi mathvariant="normal">∂</mi><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="bold">c</mi></mrow></mfrac></mrow><annotation encoding="application/x-tex">\frac\partial{\partial\mathbf c}</annotation></semantics></math></span></span> and <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mi mathvariant="normal">∂</mi><mrow><mi mathvariant="normal">∂</mi><msup><mi mathvariant="bold">c</mi><mo>∗</mo></msup></mrow></mfrac></mrow><annotation encoding="application/x-tex">\frac\partial{\partial\mathbf c^*}</annotation></semantics></math></span></span> are linearly independent, so we can derive that <span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mfrac><mrow><mi mathvariant="normal">∂</mi><msup><mi mathvariant="bold">c</mi><mo>∗</mo></msup></mrow><mrow><mi mathvariant="normal">∂</mi><msup><mi mathvariant="bold">c</mi><mrow><mo mathvariant="normal">′</mo><mo>∗</mo></mrow></msup></mrow></mfrac><mo>=</mo><mfrac><mrow><mi mathvariant="normal">∂</mi><msup><mi mathvariant="bold">c</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup></mrow><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="bold">c</mi></mrow></mfrac><mo separator="true">,</mo><mspace width="1em"/><mfrac><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="bold">c</mi></mrow><mrow><mi mathvariant="normal">∂</mi><msup><mi mathvariant="bold">c</mi><mrow><mo mathvariant="normal">′</mo><mo>∗</mo></mrow></msup></mrow></mfrac><mo>=</mo><mo>−</mo><mfrac><mrow><mi mathvariant="normal">∂</mi><msup><mi mathvariant="bold">c</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup></mrow><mrow><mi mathvariant="normal">∂</mi><msup><mi mathvariant="bold">c</mi><mo>∗</mo></msup></mrow></mfrac><mi mathvariant="normal">.</mi></mrow><annotation encoding="application/x-tex">
    \frac{\partial\mathbf c^*}{\partial\mathbf c'^*}=
    \frac{\partial\mathbf c'}{\partial\mathbf c},\quad
    \frac{\partial\mathbf c}{\partial\mathbf c'^*}=
    -\frac{\partial\mathbf c'}{\partial\mathbf c^*}.
</annotation></semantics></math></span></span></span> Here it is a much more convenient way to judge whether a transformation is a canonical transformation than to find a generating function.</p>
<p>With the property we have just found, it is easy to find out that the Poisson brackets corresponding to different set of canonical variables have the same value, which is to say that <span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mrow><mo fence="true">{</mo><mi>f</mi><mo separator="true">,</mo><mi>g</mi><mo fence="true">}</mo></mrow><mi mathvariant="bold">c</mi></msub><mo>=</mo><msub><mrow><mo fence="true">{</mo><mi>f</mi><mo separator="true">,</mo><mi>g</mi><mo fence="true">}</mo></mrow><msup><mi mathvariant="bold">c</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup></msub><mi mathvariant="normal">.</mi></mrow><annotation encoding="application/x-tex">
    \left\{f,g\right\}_{\mathbf c}=\left\{f,g\right\}_{\mathbf c'}.
</annotation></semantics></math></span></span></span></p>
<h2 data-label="0.6" id="phase-space">Phase space</h2>
<p>With the introduction of the complex variable <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="bold">c</mi></mrow><annotation encoding="application/x-tex">\mathbf c</annotation></semantics></math></span></span>, the phase space becomes the vector space of <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="bold">c</mi></mrow><annotation encoding="application/x-tex">\mathbf c</annotation></semantics></math></span></span>, which is <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi mathvariant="double-struck">C</mi><mi>s</mi></msup></mrow><annotation encoding="application/x-tex">\mathbb C^s</annotation></semantics></math></span></span>.</p>
<p>I have not learned differential geometry about complex manifold, so maybe there is some awesome extensions that can be made in the phase space, while I will not be able to find them out…</p>
<h2 data-label="0.7" id="some-examples">Some examples</h2>
<h3 data-label="0.7.1" id="free-particle">Free particle</h3>
<p>The Hamiltonian of a free particle is <span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi mathvariant="script">H</mi><mo>=</mo><mfrac><msup><mrow><mo fence="true">(</mo><mi mathvariant="normal">Im</mi><mo>⁡</mo><mi mathvariant="bold">c</mi><mo fence="true">)</mo></mrow><mn>2</mn></msup><mrow><mn>2</mn><mi>m</mi></mrow></mfrac><mo separator="true">,</mo></mrow><annotation encoding="application/x-tex">
    \mathcal H=\frac{\left(\Im\mathbf c\right)^2}{2m},
</annotation></semantics></math></span></span></span> where <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="bold">c</mi></mrow><annotation encoding="application/x-tex">\mathbf c</annotation></semantics></math></span></span> is a <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>3</mn></mrow><annotation encoding="application/x-tex">3</annotation></semantics></math></span></span>-dimensional complex vector, <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>α</mi><mo>=</mo><mi>β</mi><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">\alpha=\beta=1</annotation></semantics></math></span></span>. Substitute it into <a href="#eq:new-canonical-eq">7</a>, and then we can derive that <span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mfrac><mrow><mi mathvariant="normal">d</mi><mi mathvariant="bold">c</mi></mrow><mrow><mi mathvariant="normal">d</mi><mi>t</mi></mrow></mfrac><mo>=</mo><mfrac><mrow><mi mathvariant="normal">Im</mi><mo>⁡</mo><mi mathvariant="bold">c</mi></mrow><mi>m</mi></mfrac><mi mathvariant="normal">.</mi></mrow><annotation encoding="application/x-tex">
    \frac{\mathrm d\mathbf c}{\mathrm dt}=
    \frac{\Im\mathbf c}m.
</annotation></semantics></math></span></span></span> By solving it, we can derive that <span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi mathvariant="bold">c</mi><mo>=</mo><mfrac><mrow><mi mathvariant="normal">Im</mi><mo>⁡</mo><msub><mi mathvariant="bold">c</mi><mn>0</mn></msub></mrow><mi>m</mi></mfrac><mi>t</mi><mo>+</mo><msub><mi mathvariant="bold">c</mi><mn>0</mn></msub><mo separator="true">,</mo></mrow><annotation encoding="application/x-tex">
    \mathbf c=\frac{\Im\mathbf c_0}mt+\mathbf c_0,
</annotation></semantics></math></span></span></span> where <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi mathvariant="bold">c</mi><mn>0</mn></msub></mrow><annotation encoding="application/x-tex">\mathbf c_0</annotation></semantics></math></span></span> is <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>3</mn></mrow><annotation encoding="application/x-tex">3</annotation></semantics></math></span></span> arbitrary complex constants.</p>
<h3 data-label="0.7.2" id="harmonic-oscillator">Harmonic oscillator</h3>
<p>The Hamiltonian of a harmonic oscillator is <span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi mathvariant="script">H</mi><mo>=</mo><mfrac><msup><mrow><mo fence="true">∣</mo><mi>c</mi><mo fence="true">∣</mo></mrow><mn>2</mn></msup><mn>2</mn></mfrac><mo separator="true">,</mo></mrow><annotation encoding="application/x-tex">
    \mathcal H=\frac{\left|c\right|^2}2,
</annotation></semantics></math></span></span></span> where <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>c</mi></mrow><annotation encoding="application/x-tex">c</annotation></semantics></math></span></span> is a complex number, <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>α</mi><mo>=</mo><msqrt><mi>k</mi></msqrt></mrow><annotation encoding="application/x-tex">\alpha=\sqrt k</annotation></semantics></math></span></span>, <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>β</mi><mo>=</mo><mfrac><mn>1</mn><msqrt><mi>m</mi></msqrt></mfrac></mrow><annotation encoding="application/x-tex">\beta=\frac1{\sqrt m}</annotation></semantics></math></span></span>. Substitute it into <a href="#eq:new-canonical-eq">7</a>, and then we can derive that <span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mfrac><mrow><mi mathvariant="normal">d</mi><mi>c</mi></mrow><mrow><mi mathvariant="normal">d</mi><mi>t</mi></mrow></mfrac><mo>=</mo><mo>−</mo><mi mathvariant="normal">i</mi><mi>ω</mi><mi>c</mi><mo separator="true">,</mo></mrow><annotation encoding="application/x-tex">
    \frac{\mathrm dc}{\mathrm dt}=-\mathrm i\omega c,
</annotation></semantics></math></span></span></span> where <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>ω</mi><mo><mi mathvariant="normal">≔</mi></mo><mi>α</mi><mi>β</mi><mo>=</mo><msqrt><mfrac><mi>k</mi><mi>m</mi></mfrac></msqrt></mrow><annotation encoding="application/x-tex">\omega\coloneqq\alpha\beta=\sqrt{\frac km}</annotation></semantics></math></span></span>. By solving it, we can derive that <span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>c</mi><mo>=</mo><msub><mi>c</mi><mn>0</mn></msub><msup><mi mathvariant="normal">e</mi><mrow><mo>−</mo><mi mathvariant="normal">i</mi><mi>ω</mi><mi>t</mi></mrow></msup><mo separator="true">,</mo></mrow><annotation encoding="application/x-tex">
    c=c_0\mathrm e^{-\mathrm i\omega t},
</annotation></semantics></math></span></span></span> where <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>c</mi><mn>0</mn></msub></mrow><annotation encoding="application/x-tex">c_0</annotation></semantics></math></span></span> is an arbitrary complex constant.</p>]]></content><author><name>UlyssesZhan</name><email>ulysseszhan@gmail.com</email></author><category term="physics" /><category term="classical mechanics" /><category term="canonical transformation" /><category term="hamiltonian" /><category term="complex" /><category term="long paper" /><summary type="html"><![CDATA[In this article, I try exploring an idea: using complex numbers to combine pairs of canonical variables into complex variables: <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="bold">c</mi><mo><mi mathvariant="normal">≔</mi></mo><mi>α</mi><mi mathvariant="bold">q</mi><mo>+</mo><mi mathvariant="normal">i</mi><mi>β</mi><mi mathvariant="bold">p</mi></mrow><annotation encoding="application/x-tex">\mathbf c\coloneqq\alpha\mathbf q+\mathrm i\beta\mathbf p</annotation></semantics></math></span></span>. It turns out that we can write canonical equations <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mrow><mi mathvariant="normal">d</mi><mi mathvariant="bold">c</mi></mrow><mrow><mi mathvariant="normal">d</mi><mi>t</mi></mrow></mfrac><mo>=</mo><mo>−</mo><mn>2</mn><mi mathvariant="normal">i</mi><mi>α</mi><mi>β</mi><mfrac><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="script">H</mi></mrow><mrow><mi mathvariant="normal">∂</mi><msup><mi mathvariant="bold">c</mi><mo>∗</mo></msup></mrow></mfrac></mrow><annotation encoding="application/x-tex">\frac{\mathrm d\mathbf c}{\mathrm dt}=-2\mathrm i\alpha\beta\frac{\partial\mathcal H}{\partial\mathbf c^*}</annotation></semantics></math></span></span>, Poisson brackets
<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mrow><mo fence="true">{</mo><mi>f</mi><mo separator="true">,</mo><mi>g</mi><mo fence="true">}</mo></mrow><mo>=</mo><mo>−</mo><mn>2</mn><mi mathvariant="normal">i</mi><mi>α</mi><mi>β</mi><mrow><mo fence="true">(</mo><mfrac><mrow><mi mathvariant="normal">∂</mi><mi>f</mi></mrow><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="bold">c</mi></mrow></mfrac><mo>⋅</mo><mfrac><mrow><mi mathvariant="normal">∂</mi><mi>g</mi></mrow><mrow><mi mathvariant="normal">∂</mi><msup><mi mathvariant="bold">c</mi><mo>∗</mo></msup></mrow></mfrac><mo>−</mo><mfrac><mrow><mi mathvariant="normal">∂</mi><mi>f</mi></mrow><mrow><mi mathvariant="normal">∂</mi><msup><mi mathvariant="bold">c</mi><mo>∗</mo></msup></mrow></mfrac><mo>⋅</mo><mfrac><mrow><mi mathvariant="normal">∂</mi><mi>g</mi></mrow><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="bold">c</mi></mrow></mfrac><mo fence="true">)</mo></mrow></mrow><annotation encoding="application/x-tex">\left\{f,g\right\}=-2\mathrm i\alpha\beta \left(\frac{\partial f}{\partial\mathbf c}\cdot \frac{\partial g}{\partial\mathbf c^*}- \frac{\partial f}{\partial\mathbf c^*}\cdot \frac{\partial g}{\partial\mathbf c}\right)</annotation></semantics></math></span></span>, and canonical transformations
<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mrow><mi mathvariant="normal">∂</mi><msup><mi mathvariant="bold">c</mi><mo>∗</mo></msup></mrow><mrow><mi mathvariant="normal">∂</mi><msup><mi mathvariant="bold">c</mi><mrow><mo mathvariant="normal">′</mo><mo>∗</mo></mrow></msup></mrow></mfrac><mo>=</mo><mfrac><mrow><mi mathvariant="normal">∂</mi><msup><mi mathvariant="bold">c</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup></mrow><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="bold">c</mi></mrow></mfrac><mo separator="true">,</mo><mfrac><mrow><mi mathvariant="normal">∂</mi><mi mathvariant="bold">c</mi></mrow><mrow><mi mathvariant="normal">∂</mi><msup><mi mathvariant="bold">c</mi><mrow><mo mathvariant="normal">′</mo><mo>∗</mo></mrow></msup></mrow></mfrac><mo>=</mo><mo>−</mo><mfrac><mrow><mi mathvariant="normal">∂</mi><msup><mi mathvariant="bold">c</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup></mrow><mrow><mi mathvariant="normal">∂</mi><msup><mi mathvariant="bold">c</mi><mo>∗</mo></msup></mrow></mfrac></mrow><annotation encoding="application/x-tex">\frac{\partial\mathbf c^*}{\partial\mathbf c'^*}= \frac{\partial\mathbf c'}{\partial\mathbf c}, \frac{\partial\mathbf c}{\partial\mathbf c'^*}= -\frac{\partial\mathbf c'}{\partial\mathbf c^*}</annotation></semantics></math></span></span> in these complex numbers. Finally, I show two examples of using them in real problems: a free particle, and a harmonic oscillator.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ulysseszh.github.io/assets/images/covers/2020-01-06-complex-canonical.png" /><media:content medium="image" url="https://ulysseszh.github.io/assets/images/covers/2020-01-06-complex-canonical.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>