ひいらぎのノート

自転車/列車と旅行すること・歌うことが好きです

基底ベクトルを考慮した二次形式の標準形の求め方(メモ)

  1. 二次形式を行列を用いて表し、
  2. 固有値から固有ベクトルを求めて直交行列Pをつくり、
  3. それを利用して楕円の標準形を求める

ような問題について、基底ベクトルを使った方法についてのメモです。

例題

 7 x^{2} + 2 \sqrt{3} xy + 5 y^{2} = 8の標準形を求め、図示せよ。

解答

#1 行列表現

これを行列表現すると、

$$ \begin{pmatrix} x& y \end{pmatrix} \begin{pmatrix} 7 & \sqrt{3} \\ \sqrt{3} & 5 \end{pmatrix} \begin{pmatrix} x\\ y \end{pmatrix} $$

#2 直交行列P

$$ P = \dfrac{1}{2} \begin{pmatrix} 1 & \sqrt{3} \\ -\sqrt{3} & 1 \end{pmatrix} $$

ところで、これを回転行列 $$ \begin{pmatrix} \cos \theta & -\sin \theta \\ \sin \theta & \cos \theta \end{pmatrix} $$ と比較すると、 $$ \theta = 60 ^\circ $$ であることがわかる。

さて、ここで、2次元空間における基底ベクトルを次のように定める。

$$ \boldsymbol{e}_{x}= \begin{pmatrix} 1\\ 0 \end{pmatrix}, \boldsymbol{e}_{y} = \begin{pmatrix} 0\\ 1 \end{pmatrix}. $$

標準形における座標を(x^\prime, y^\prime)とすると、

$$ \begin{pmatrix} \boldsymbol{e}_{x} & \boldsymbol{e}_{y} \end{pmatrix} \begin{pmatrix} x\\ y \end{pmatrix}= \begin{pmatrix} \boldsymbol{e}_{x} & \boldsymbol{e}_{y} \end{pmatrix} \dfrac{1}{2} \begin{pmatrix} 1 & \sqrt{3} \\ -\sqrt{3} & 1 \end{pmatrix} \begin{pmatrix} x^{\prime}\\ y^{\prime} \end{pmatrix} $$

が成り立つから、新しい基底ベクトルとして、

$$ \boldsymbol{e}_{x}^{\prime}=\dfrac{1}{2} \boldsymbol{e}_{x} - \dfrac{\sqrt{3}}{2} \boldsymbol{e}_{y}, \\ \boldsymbol{e}_{y}^{\prime} =\dfrac{\sqrt{3}}{2} \boldsymbol{e}_{x} + \dfrac{1}{2} \boldsymbol{e}_{y}. $$

を定めると、

$$ \begin{pmatrix} \boldsymbol{e}_{x} & \boldsymbol{e}_{y} \end{pmatrix} \begin{pmatrix} x\\ y \end{pmatrix}= \begin{pmatrix} \boldsymbol{e}_{x}^{\prime} & \boldsymbol{e}_{y}^{\prime} \end{pmatrix} \begin{pmatrix} x^{\prime}\\ y^{\prime} \end{pmatrix} $$

と表される。

基底ベクトルを考えることで、新しい座標の方向が明瞭になり、すっきりと解ける。

この二次形式で表される楕円は、\boldsymbol{e}_{x}^{\prime} , \boldsymbol{e}_{y}^{\prime}を基底ベクトルとするような座標軸で見れば、傾いていない形(標準形)となっている。

2階線形微分方程式における定数変化法(メモ)

2階線形微分方程式における定数変化法について表面的に,そして専ら自分のために,まとめておきます。

  \displaystyle \frac{d^{2}y}{dx^{2}} + P(x)  \frac{dy}{dx} + Q(x)y = R(x) \tag{★}

非同次の場合について,その斉次方程式の一般解が次のように求められていたとする。

  \displaystyle y = uF(x) +vG(x) \tag{1}

例えば,

  •   y = u e^{x} +v e^{-x} なら, F(x) = e^{x} G(x) = e^{-x}

  •   y = u e^{x} +v xe^{x} なら, F(x) = e^{x} G(x) = xe^{x}

大多数の問題は,未定係数法によって特殊解を1つ求め,(1)に加えれば完了するが, R(x)の形によっては未定係数法が使えないので,この場合に定数変化法を用いる。ただし,計算が複雑。

ここからは,1変数の場合と同様, u,v xの関数として,(★)式の一般解を求めることを考える。

まず,(1)を x微分すると,

 \displaystyle y' = u'F(x) +uF'(x) +v'G(x) +vG'(x) \tag{2}

ここで,以下の条件を設定する。

 \displaystyle u'F(x) +v'G(x) = 0\tag{♯1}

この条件(#1)を(2)に適用すると,(2)は次のようになる。

 \displaystyle y' = uF'(x) +vG'(x) \tag{3}

さらに(3)を x微分すると,

 \displaystyle y'' = u'F'(x) +uF''(x) +v'G'(x) + vG''(x) \tag{4}

となる((♯1)のおかげで u'',v''が出てこない)。

これらを(★)に代入すると,

  \displaystyle u'F'(x) + v'G'(x)= R(x) \tag{♯2}

となる。なお,上式のようになるのは,基本解 F(x),G(x)について,当然次が成り立っているからである。

{\displaystyle 
\begin{eqnarray}
  \left\{
    \begin{array}{l}
     F''(x) + P(x)F'(x) + Q(x)F(x) = 0 \\
     G''(x) + P(x)G'(x) + Q(x)G(x) = 0
    \end{array}
  \right.
\end{eqnarray}
}

(#1)と(#2)を連立方程式として解き, u',v'を求める。その後,積分を行い u,vを求める。

{\displaystyle 
\begin{eqnarray}
  \left\{
    \begin{array}{l}
     u'F(x) +v'G(x) = 0 \\
     u'F'(x) + v'G'(x)= R(x) 
    \end{array}
  \right.
\end{eqnarray}
}

これを行列にすると,

{\displaystyle 
    \begin{pmatrix}
      F(x) & G(x) \\
      F'(x) & G'(x)
    \end{pmatrix}
\begin{pmatrix}
      u' \\
      v'
    \end{pmatrix}
= 
\begin{pmatrix}
      0 \\
      R(x)
    \end{pmatrix}
}

となり,

{\displaystyle 
\begin{pmatrix}
      u' \\
      v'
    \end{pmatrix}
= 
    \begin{pmatrix}
      F(x) & G(x) \\
      F'(x) & G'(x)
    \end{pmatrix}^{-1}
\begin{pmatrix}
      0 \\
      R(x)
    \end{pmatrix}
}

ここで,次の W(x)ロンスキアンと呼ぶらしい)を用いると,

{\displaystyle 
W(x)= 
    \begin{vmatrix}
      F(x) & G(x) \\
      F'(x) & G'(x)
    \end{vmatrix}
}
{\displaystyle 
\begin{pmatrix}
      u' \\
      v'
    \end{pmatrix}
= 
    \frac{1}{W(x)}\begin{pmatrix}
      G'(x) & -G(x) \\
      -F'(x) & F(x)
    \end{pmatrix}
\begin{pmatrix}
      0 \\
      R(x)
    \end{pmatrix}
}

となる。これより,

{\displaystyle 
\begin{eqnarray}
  \left\{
    \begin{array}{l}
    u' =  \dfrac{-G(x)R(x)}{W(x)} \\
    v' = \dfrac{F(x)R(x)}{W(x)} 
    \end{array}
  \right.
\end{eqnarray}
}

と,u',v'が求められた。最後に,積分すると,

{\displaystyle 
\begin{eqnarray}
  \left\{
    \begin{array}{l}
    u =  \displaystyle  \int \dfrac{-G(x)R(x)}{W(x)} dx \\
    v = \displaystyle  \int \dfrac{F(x)R(x)}{W(x)} dx
    \end{array}
  \right.
\end{eqnarray}
}

u,vが求められる。これより,(★)の一般解は,

 \displaystyle y = uF(x) + vG(x) = F(x) \int \dfrac{-G(x)R(x)}{W(x)} dx + G(x) \int \dfrac{F(x)R(x)}{W(x)} dx 

積分項が2つあるので,任意定数も2つ登場する(2階線形微分方程式)。

多数存在するF(x),G(x)のうち,計算を容易にするためにあえて(♯1)の条件を課すということを知っていれば,その後はただ計算するだけなので,この公式を覚える必要はなさそうです。

♪ (Lua)LaTeXで楽譜を。

概要

LuaLaTeXで楽譜を描きます.うまく活用すると,画像のような感じの文書が作成できます.他にやってそうな人があまり見つからなかったので,やり方だけまとめてみました.以下は全てLuaLaTeXに合わせたものですが,適所書き換えることで他のLaTeXエンジンに対応できます.

f:id:ymho_99:20181028225934p:plain

lilypondのインストール

楽譜を描く際に,LilyPondが必要になります.LilyPondは,オープンソースの楽譜作成プログラムです.特に,LaTeXと合わせて使う際には,lilypond-bookが必要になります.

LilyPond – みんなの楽譜作成: LilyPond... みんなの楽譜作成

LilyPondは,テキストベースの楽譜作成プログラムで,グラフィカルに音符を配置する他のソフトとは異なり,プログラミング言語に近いような感覚で譜面を書きます.

macの場合は,

Install LilyPond on Mac OSX – Mac App Store

ここの手順に従えば簡単にインストールできます.

Ubuntuの場合は,

 sudo apt-get install lilypond 

でインストールできました.

楽譜の作成

ここでは,LuaLaTeXで五線譜を含んだファイルを生成します.「任意の名前.lytex」というファイルを作成し,ここにLaTeXと同じ書式で書いていきます.sublimetextを使っている場合は,View > Syntax > Open all with current extension as > LaTeX を選択しておくと見やすく書けます.

\documentclass[a4paper]{ltjsarticle}
\usepackage[margin=2cm]{geometry}
 
\begin{document}

楽譜を挿入する際の例です.このように,楽譜を入れることができます.

なお,このlilypondのバージョンは,\lilypondversion です.

\begin{lilypond}[fragment]

\new PianoStaff \with { instrumentName = #"Piano" }
<<
  \new Staff \relative c'{
  fis8 f8 dis8 c2 r8 | fis8 f8 dis8 c2 r8 | fis8 f8 dis8 c2 r8 | fis8 f8 dis8 c2 r8 |
  }
  \new Staff \relative c,{
  \clef bass
  < c g' >2( < c g' >4.) r8 | < dis' gis, >2( < dis gis, >4.) r8 | < c g' >2( < c g' >4.) r8 | < dis' gis, >2( < dis gis, >4.) r8 |
  }
>>
\end{lilypond}

以下のように,小さく入れることも可能です.
\lilypond[quote,fragment,staffsize=12]{c' d' e' f' g'}

\end{document}

いつもなら,これを

lualatex 任意の名前.tex

としていましたが,ここではまず,

lilypond-book 任意の名前.lytex

とします.これによって,「任意の名前.tex」が生成されます.lilypond-bookコマンドが,lytexファイル内の楽譜に関する箇所について画像化する処理を行い,それを読むようにファイルを書き換えたものが「任意の名前.tex」です.生成された.texファイルを覗くと,そのようになっていました.

その後はいつものように,

lualatex 任意の名前.tex

とするだけで,pdfが生成されます.私は,sublimetextを使っているので,これらの操作をまとめて行うBuildSystemを次のように定義して使っています(Ubuntuは,"cmd"のopenの部分をevinceなどに変えると,pdfが開くと思います).

{
    "selector": "source.lytex",
    "shell": false,
    "cmd":[
        "/bin/sh", "-c", "lilypond-book --pdf --latex-program=lualatex $file_base_name.lytex && lualatex $file_base_name.tex && open $file_base_name.pdf"
    ]
} 

ちなみに私がこれを利用して作成したpdfがこちらです.良い感じです♪

f:id:ymho_99:20181028225020p:plain

まとめ

ご覧の通り,lilypondの記法がかなりややこしく,少し調べなければなりませんが,1つのファイルで,楽譜もテキストも描く・書くことができ,lilypond,texらしく美しく出力できるのは,魅力の1つだと思います.

ただ,この用途でtexを使う機会は僅少だと思います... ちなみに私はこれを使って簡単な資料を作ったりしてみました(冒頭の写真がその一部です).

追記

先ほど触れた,lilypondの記法について,公式マニュアルがあります.

lilypond.org

日本語がしっかりしているのが嬉しいです.

Gram–Schmidtの正規直交化法を図で確認した(適当)

Gram–Schmidt法を用いた正規直交基底の求め方について,1年前(かそれ以上前)に授業でやりましたが忘れ,調べ直すいうことをこれまで2回程度行ったので,もう調べなくていいように,改めて理解したことを自分用にまとめました。単なる移動中の暇潰しなので,雑な部分があるかもしれません。なお,図はpythonのmatplotlibを用いました。

#1 正規直交

  • 正規化:単位ベクトルを得る操作のこと( \displaystyle \frac{\boldsymbol{a}}{|a|}

正規直交とは,互いに直交(内積が0)する長さが1のベクトルのこと。

#2 アルゴリズム

n次元ユークリッド空間{ \mathbb{R}^n }の部分ベクトル空間 Vの基底を, \boldsymbol{a}_kとする。この時,対応する正規直交基底を\boldsymbol{u}_kとすると,

 \displaystyle \boldsymbol{u}_k = \frac{\boldsymbol{a}_k - \displaystyle \sum_{i=1}^{k-1} (\boldsymbol{a}_k \cdot \boldsymbol{u}_i)\boldsymbol{u}_i}{ \left| \boldsymbol{a}_k - \displaystyle \sum_{i=1}^{k-1} (\boldsymbol{a}_k \cdot \boldsymbol{u}_i)\boldsymbol{u}_i \right| } \tag{★}

#3 例題

3次元ユークリッド空間{ \mathbb{R}^3 }における次のベクトル{\boldsymbol{a}_1,\boldsymbol{a}_2,\boldsymbol{a}_3}からグラム・シュミットの正規直交化法によって{ \mathbb{R}^3 }の正規直交系{\boldsymbol{u}_1,\boldsymbol{u}_2,\boldsymbol{u}_3}を構成せよ。

{\displaystyle 
   \boldsymbol{a}_1 =
    \begin{pmatrix}
      1 \\
      1 \\
      1
    \end{pmatrix},

\boldsymbol{a}_2 =
    \begin{pmatrix}
      1 \\
      2 \\
      3
    \end{pmatrix},

\boldsymbol{a}_3 =
    \begin{pmatrix}
      -2 \\
      -1 \\
      2
    \end{pmatrix}
}

#3-1 \boldsymbol{u}_1を求める

★式を用いて\boldsymbol{u}_1を求める。k=1だから,結局 \displaystyle \frac{\boldsymbol{a}_1}{|a_1|}となる。

\displaystyle \boldsymbol{u}_1 = \frac{\boldsymbol{a}_1}{|a_1|} = \frac{1}{\sqrt{3}}
\begin{pmatrix}
      1 \\
      1 \\
      1
\end{pmatrix}

f:id:ymho_99:20180924193100p:plain

上図で表すと,\boldsymbol{a}_1から\boldsymbol{u}_1を求めた(ただの正規化)だけ。

#3-2 \boldsymbol{u}_2を求める

再び,★式を用いて\boldsymbol{u}_2を求める。k = 2だから,

 \displaystyle \boldsymbol{u}_2 = \frac{\boldsymbol{a}_2 - \displaystyle \sum_{i=1}^{2-1} (\boldsymbol{a}_2 \cdot \boldsymbol{u}_i)\boldsymbol{u}_i}{ \left| \boldsymbol{a}_2 - \displaystyle \sum_{i=1}^{2-1} (\boldsymbol{a}_2 \cdot \boldsymbol{u}_i)\boldsymbol{u}_i \right| } = \frac{\boldsymbol{a}_2 - (\boldsymbol{a}_2 \cdot \boldsymbol{u}_1)\boldsymbol{u}_1}{ \left| \boldsymbol{a}_2 - (\boldsymbol{a}_2 \cdot \boldsymbol{u}_1)\boldsymbol{u}_1 \right| } \tag{1}

となる。ここで,

\boldsymbol{p} = (\boldsymbol{a}_2 \cdot \boldsymbol{u}_1)\boldsymbol{u}_1 

\boldsymbol{v}_2 = \boldsymbol{a}_2 - (\boldsymbol{a}_2 \cdot \boldsymbol{u}_1)\boldsymbol{u}_1 ((1)の式の分母)

とおく。すると,(1)式の分母について,

  \displaystyle \boldsymbol{v}_2 = \boldsymbol{a}_2 - \boldsymbol{p} \tag{2}

と書き直せる。

\boldsymbol{a}_2\boldsymbol{u}_1を代入して,\boldsymbol{p} を求める。

  \boldsymbol{p} = \boldsymbol{a}_2 - \boldsymbol{p}  = \displaystyle \left(1 \cdot \frac{1}{\sqrt{3}} + 2 \cdot \frac{1}{\sqrt{3}} + 3 \cdot \frac{1}{\sqrt{3}}\right) \cdot \frac{1}{\sqrt{3}}
\begin{pmatrix}
      1 \\
      1 \\
      1
\end{pmatrix}
= 
\begin{pmatrix}
      2 \\
      2 \\
      2
\end{pmatrix}

ここまでの課程を図に表すと,以下のようになる。

f:id:ymho_99:20180924200046g:plain

(2)式より,\boldsymbol{v}_2を求める。\boldsymbol{a}_2\boldsymbol{p}を代入して,

\displaystyle \boldsymbol{v}_2 = \begin{pmatrix}
      1 \\
      2 \\
      3
\end{pmatrix} -  
\begin{pmatrix}
      2 \\
      2 \\
      2
\end{pmatrix}
=
\begin{pmatrix}
      -1 \\
      0 \\
      1
\end{pmatrix}

となる。これを図で表すと,

f:id:ymho_99:20180924201059p:plain

となる。最後に,\boldsymbol{u_2}を求める。これは\boldsymbol{v}_2を正規化するだけでよいので,

 \displaystyle \frac{\boldsymbol{v}_2}{|v_2|} = \frac{1}{\sqrt{2}} \begin{pmatrix}
      -1 \\
      0 \\
      1
\end{pmatrix}

f:id:ymho_99:20180924205735g:plain

ここまでで,\boldsymbol{u}_1\boldsymbol{u_2}が求められた。互いに直交している。

#3-3 \boldsymbol{u}_3を求める

これまでと同様にして,\boldsymbol{u}_3を求める。★式より,

 \displaystyle \boldsymbol{u}_3 = \frac{\boldsymbol{a}_3 - \displaystyle \sum_{i=1}^{3-1} (\boldsymbol{a}_3 \cdot \boldsymbol{u}_i)\boldsymbol{u}_i}{ \left| \boldsymbol{a}_3 - \displaystyle \sum_{i=1}^{3-1} (\boldsymbol{a}_3 \cdot \boldsymbol{u}_i)\boldsymbol{u}_i \right| } = \frac{ \boldsymbol{a}_3 - (\boldsymbol{a}_3 \cdot \boldsymbol{u}_2)\boldsymbol{u}_2 - (\boldsymbol{a}_3 \cdot \boldsymbol{u}_1) \boldsymbol{u}_1}{\left|  \boldsymbol{a}_3 - (\boldsymbol{a}_3 \cdot \boldsymbol{u}_2)\boldsymbol{u}_2 - (\boldsymbol{a}_3 \cdot \boldsymbol{u}_1) \boldsymbol{u}_1 \right|} \tag{3}

となる。ここで,

\boldsymbol{q} = (\boldsymbol{a}_3 \cdot \boldsymbol{u}_2)\boldsymbol{u}_2 - (\boldsymbol{a}_3 \cdot \boldsymbol{u}_1) \boldsymbol{u}_1

\boldsymbol{v}_3 =  \boldsymbol{a}_3 - (\boldsymbol{a}_3 \cdot \boldsymbol{u}_2)\boldsymbol{u}_2 - (\boldsymbol{a}_3 \cdot \boldsymbol{u}_1) \boldsymbol{u}_1 ((3)の式の分母)

とおく。すると,(3)式の分母について,

  \displaystyle \boldsymbol{v}_3 = \boldsymbol{a}_3 - \boldsymbol{q} \tag{4}

と書き直せる。#3-2と同様の操作を2回繰り返し(\boldsymbol{u}_1\boldsymbol{u}_2に直交するベクトルのうち,\boldsymbol{u}_1\boldsymbol{u}_2でないものを選ぶ),計算していくと,

\boldsymbol{v}_3 = \displaystyle \boldsymbol{a}_3 - \boldsymbol{q} = \frac{1}{3}  \begin{pmatrix}
      1 \\
      -2 \\
      1
\end{pmatrix}

  \boldsymbol{u}_3 \boldsymbol{v}_3を正規化すればよいから,

 \boldsymbol{v}_3 = \displaystyle \frac{1}{\sqrt{6}} \begin{pmatrix}
      1 \\
      -2 \\
      1
\end{pmatrix}

となる。

以上より,\boldsymbol{u}_1\boldsymbol{u_2}\boldsymbol{u}_3を図で表すと,

f:id:ymho_99:20180924205025g:plain

図で表せるのはこれが限界だけど,★式の通り,この方法はn次元まで対応している。

#4 まとめ

黒板で細かい図は表現できないので,グラム・シュミットの正規直交化法と言われても,ただ計算するだけでは何をどうしているか想像し難かったですが,簡単なコードを少し書くだけで視覚的に確認でき,仕組みが理解できたのでよかった。

Sublime Text3でLaTeXの環境構築 [Windows]

前回,Mac OSに関することを書きました。

今回,Windowsで環境を構築する機会があり,うまくできたことをまとめておきます。 これまでと同様,パッケージを用いる方法とは異なり,自分でBuild Systemを定義する方法です。

なお,エディタは「Sublime Text 3」です。

#1 必要なものを準備

インストーラの指示に従って,全てインストールします。

TeXLiveに関しては,TeX Live - TeX Wikiに従ってインストールすると良いです。

#2 SumatraPDFのパスを通す

続いて,先ほどインストールした「SumatraPDF」の本体の場所を探します。私の場合,「C: ¥Program Files¥SumatraPDF」の中にありました。探しにくい場合は補足#2'をご覧ください。

ここのパスをctrl + cなどでコピーしておきます。

次に,「コマンドプロンプトl」を起動(Windowsキー + Rcmdと入力)し,以下を実行します。

C: ¥Users¥ユーザ名> setx 先ほどコピーしたパスをペースト(<code>ctrl + v</code>)

私の場合,

C: ¥Users¥ユーザ名> setx C: ¥Program Files¥SumatraPDF

となるわけです。

成功: 指定した値は保存されました

と返ってきます。これで完了です。

確認するには,

start SumatraPDF

を実行します。SumatraPDFが立ち上がれば,適切に設定できています。

#3 Sublime Textに新しいBuild Systemを定義する

Sublime Textを起動します。上部のバーから,Tools > Build System > New Build System... をクリックします。 すると,

{
    "shell_cmd": "make"
}

と表示されます。これを全て削除し,以下で置き換えてください。ここでは,LuaLaTeXを用います。(u)platexとdvipdfmxを用いたい方は補足#3'-1をご覧ください。

{
    "shell": "true",
    "cmd":    [
            "lualatex", "$file_base_name.tex", "&;", "start" , "SumatraPDF", "$file_base_name.pdf"
        ]
}

(設定内容に関する詳細については,補足#3'-2をご覧ください。)

ctrl + sで保存します。この時の名前は任意ですが,これが新しいBuild Systemの名前になりますので,わかりやすくしておくと良いです。私は,「lualatex.sublime-build」としました。

#4 動作確認

今回,定義したのはLuaLaTeXです。これは,(u)platexなどとは違って,dviファイルを生成せずに直接pdfファイルを出力します。 LuaLaTeXに関する詳細はLuaTeX - TeX Wikiを参照してください。

プリアンブルに記述する内容が少し違う(補足#4'を参照)ことに注意します。以下をコピペすれば良いです。

\documentclass[a4paper,10pt,report]{ltjsarticle}
\usepackage[margin=2cm]{geometry}

\begin{document}
昨日、近所の吉野家行ったんです。吉野家。 
そしたらなんか人がめちゃくちゃいっぱいで座れないんです。 
で、よく見たらなんか垂れ幕下がってて、150円引き、とか書いてあるんです。 
もうね、アホかと。馬鹿かと。 
お前らな、150円引き如きで普段来てない吉野家に来てんじゃねーよ、ボケが。 
150円だよ、150円。 
なんか親子連れとかもいるし。一家4人で吉野家か。おめでてーな。 
よーしパパ特盛頼んじゃうぞー、とか言ってるの。もう見てらんない。 
お前らな、150円やるからその席空けろと。 
吉野家ってのはな、もっと殺伐としてるべきなんだよ。 
Uの字テーブルの向かいに座った奴といつ喧嘩が始まってもおかしくない、 
刺すか刺されるか、そんな雰囲気がいいんじゃねーか。女子供は、すっこんでろ。 
で、やっと座れたかと思ったら、隣の奴が、大盛つゆだくで、とか言ってるんです。 
そこでまたぶち切れですよ。 
あのな、つゆだくなんてきょうび流行んねーんだよ。ボケが。 
得意げな顔して何が、つゆだくで、だ。 
お前は本当につゆだくを食いたいのかと問いたい。問い詰めたい。小1時間問い詰めたい。 
お前、つゆだくって言いたいだけちゃうんかと。 
吉野家通の俺から言わせてもらえば今、吉野家通の間での最新流行はやっぱり、 
ねぎだく、これだね。 
大盛りねぎだくギョク。これが通の頼み方。 
ねぎだくってのはねぎが多めに入ってる。そん代わり肉が少なめ。これ。 
で、それに大盛りギョク(玉子)。これ最強。 
しかしこれを頼むと次から店員にマークされるという危険も伴う、諸刃の剣。 
素人にはお薦め出来ない。 
まあお前らド素人は、牛鮭定食でも食ってなさいってこった。 
\end{document}

吉野家コピペより)

上部のバーから,Tools > Build System > と進むと,先ほど保存したBuild Systemがあるので,選択します。

f:id:ymho_99:20180609151351p:plain

その状態で,ctrl + bコンパイルします。最初は少し時間がかかります(私は20s程度かかりました)。 すると,自動的にSumatraPDFは起動し,出力に成功しているはずです。2回目以降は,数秒で終わります。

f:id:ymho_99:20180609151804p:plain

できました。

補足

#2' プログラム本体の見つけ方

探しにくい場合は,以下を参考にしてください。

  1. スタートメニューから,右クリックし「ファイルの場所を開く」。 f:id:ymho_99:20180609144608p:plain

  2. 次も同様に,右クリックし「ファイルの場所を開く」。

f:id:ymho_99:20180609144611p:plain

このフォルダにある,SumatraPDFが本体です。 f:id:ymho_99:20180609144614p:plain

#3'-1 LuaLaTeXについて

ここでは,LuaLaTeXを用いましたが,同様の記法に従えば,(u)platexとdvipdfmxを用いることも可能です。設定を以下に示しておきます。2つ定義して使い分けることも可能です。現状では,LuaLaTeXの方が時間がかかると言われておりますので,気になる方は(u)platexの方が良いかもしれません。

{
    "shell": "true",
    "cmd":    [
            "uplatex", "$file_base_name.tex", "&;", "dvipdfmx", "$file_base_name.dvi", "&;", "start" , "SumatraPDF", "$file_base_name.pdf"
        ]
}

#3'-2

ちなみに,$file_base_nameは編集しているファイル名の拡張子を外したものを表しています。今,sample.texを編集しているとすると,このBulid Systemは,

lualatex sample.tex

を行なった(lualatexでコンパイル)後に,

start SumatraPDF sample.pdf

を実行(生成されたpdfをSumatraPDFで開く)しています。

#4' LuaLaTeXの特異点

LuaLaTeXはプリアンブルの記述が少し異なるだけで,基本的に(u)pLaTeXと書き方は変わりません。 私が気になった点を雑にメモしておきます。全て,uplatex \Longleftrightarrow lualatexの対応です。

  • \documentclass[a4paper,10pt,report,uplatex]{jsarticle} \Longleftrightarrow \documentclass[a4paper,10pt,report]{ltjsarticle}

  • \usepackage[dvipdfmx]{graphicx} \Longleftrightarrow \usepackage{graphicx}

この辺りに気をつけておれば良いと思います。

高専合唱カンファレンスに参加しました!

#高専合唱カンファレンス?

3月9日、長野県松本市で行われた高専合唱カンファレンスに参加してきました。 「高専カンファレンス」というイベントはこれまでも多数行われてきましたが、合唱に特化した、【合唱】と名のつく「高専合唱カンファレンス」は今回が初めての試みだそうです。

高専合唱カンファレンス in 長野1 - 高専カンファレンス Wiki

http://kosenconf.jp/?plugin=attach&refer=116korus01&openfile=korusposter_1024.png

僕がこのイベントを知ったきっかけは、昨年12月に行われた「高専カンファレンス in 長野3」です。今回のカンファの実行委員長であるしゅーぱか。さん、しもえもんさんをはじめとする長野高専合唱同行会のメンバーとの交流で、今回のようなカンファの準備をしていることを知りました。イラストはふぅにゃんさんが描かれました!残念ながらお会いできなかったですが...「高専」を表す要素が盛り込まれていてとても好きです!

#行ってみよう!

正式に発表があるのを心待ちにしていました。発表があった後、部の後輩などに声をかけ、明石からは3年生私を含め5人、2年生が2人、1年生が4人の計11人で参加しました。多くの部員と参加できて嬉しかったです! 特に後輩たちが積極的であったことは頼もしく思えるところですね(*´-`)

#当日までは...

カンファが3月9日、ということで全体合唱はレミオロメンの『3月9日』でした(アイデア!しゅーぱか。さん天才だあ!)。練習時間を切り出せなかったので、全員で練習することが難しく、個人で練習するということになってしまいましたが楽譜は用意できました!

参加高専ごとの発表会へ向けてよい楽曲はないか話し合い、コブクロの『蕾』(アカペラ)を選びました。週末に必死で音とりをして、こちらはなんとか1日だけ合わせられました。

#4 いざ当日!

いよいよ当日です。特急に揺られながら松本へ。私が住んでいるところ(兵庫・加古川)から、松本までは4時間くらいかかります。

西明石駅から名古屋駅までは新幹線、名古屋駅から松本駅までは特急しなのです。

開会式では、明石の代表者ということで挨拶をさせていただきました。プロコンを始めた先生が来られており驚きました! 腹式呼吸を学んで、筋トレ。これがハードで、普段の練習で筋トレをしていない明石からは苦しい声がたくさん聞こえてきました。

その次は『3月9日』のパート練習です。私も含む明石のメンバーは自主練して来た人が多い気がしました。それでも、事前にもう少し練習できていたら...と思いました...

全体合唱では、いつも歌っている・聴いている合唱とは違いより多くの人数だったので、歌っていて楽しかったです。全体合唱はCDに焼いて頂きました!ありがとうございます!

f:id:ymho_99:20180322212423j:plain

その後の交流会では、長野高専合唱同好会のメンバーとお話できました。他高専の合唱erと交流する機会は滅多にないので、貴重な機会でした!

その後、発表会で『蕾』を披露しました。メンバーそれぞれが短期間で練習を頑張って歌えたと思うと嬉しくなりました。予定していなかったのですが、1月に地元のコンクールで演奏した『チョコレート』も披露しました。私は、指揮というか、前で手を振っていました(笑)。

『チョコレート』Youtubeにありました!こんな曲です!聴いてみてください!

www.youtube.com

ここでは、

  • 長野高専合唱同好会による、星野源さんの『恋』。なんとダンスも!
  • 即席グループによる発表

を聴くことができました!高専で合唱している人たちが、他校の演奏を聴きあうって貴重な機会だと思います!とても楽しい時間を過ごせました。

#余韻

とても良かった。楽しかったという後輩の声を聞いて安心しました。これからの合唱部を盛り上げてくれそうで楽しみです。私はもう引退ですね(笑)

#次は?

現役の間にまたやりたい!合唱カンファという形で他高専で集まるのも良いですが、長野高専合唱同好会のメンバーともっと交流したい思いもあります!

何らかの形で、このような機会を作れればと思います!

形態素解析してみました

#1 文書

次のような文書があったとします。

ある日の暮方の事である。一人の下人が、羅生門の下で雨やみを待っていた。

これは『羅生門(芥川龍之介)』の冒頭です。国語の授業のようにこれを文節ごとに分けると、

ある日の/暮方の/事で/ある。/一人の/下人が、/羅生門の/下で/雨やみを/待って/いた。/

となります。ここから更に単語に分けると、

ある日/の/暮方/の/事/で/ある/。/一人/の/下人/が/、/羅生門/の/下/で/雨やみ/を/待って/いた/。/

となると思います(国語の授業ではどうなるのかよくわかりませんが、ここでは句読点も特殊文字として区切りました)。

さらに、各単語は意味を失ってしまいますが、更に1文字ずつ区切ることもやろうと思えばできます。

また、『羅生門』(小説)に限らず、文書はいくつかの章・段落・節から成る場合がほとんどです。この記事も、いくつかの節から成っています。

つまり、あくまで一例ですが、文書は

文字<単語<文節<段落<節<章

で構成されていると捉えることが出来ます。

ここまでは国語の知識で僕も理解していたつもりです(身についているかと問われれば微妙ですが…)。

#2 テキストマイニング

この言葉に出会ったのはごく最近です。今の僕の理解ですが、

テキストマイニングとは、大量のテキストデータから情報を取り出す、ということだと理解しています。

例えば、ある文書から単語を抽出してそれらが何回登場したかを数えればその文書の内容について何か分析ができそうです。例えば文書を多くの人が言葉を自由に発するSNSと捉えるとそれらを分析して何か情報を得ることができそうです。 いろいろなところで使用されていると思うので、調べてみたいと思っています。

ところで、いま、単語を数えるということを例に上げましたが、そのためには文書を単語に分割しなければなりません。英語であれば単語がスペースで区切られているため、イメージし易かったのですが、日本語となると、どのように分解するのか想像がつきません。

これを可能にするのが、辞書を見ながら単語を認識しスライスしていく「形態素解析」で、切り出すだけではなく、その単語の品詞までや語幹(活用表を書くとき元となるような語)に至るまでの情報を得ることができるそうです。

#3 形態素解析

形態素解析を実際にPythonで行ってみました。

import sys
import MeCab
m = MeCab.Tagger("-Ochasen")
print(m.parse("ある日の暮方の事である。一人の下人が、羅生門の下で雨やみを待っていた。"))

コードはたったこれだけで驚きました。

ある   アル  ある  連体詞       
日 ヒ 日 名詞-非自立-副詞可能       
の ノ の 助詞-連体化        
暮方  クレガタ    暮方  名詞-副詞可能     
の ノ の 助詞-連体化        
事 コト  事 名詞-非自立-一般     
で デ だ 助動詞   特殊・ダ    連用形
ある  アル  ある  助動詞   五段・ラ行アル   基本形
。 。 。 記号-句点       
一 イチ  一 名詞-数      
人 ニン  人 名詞-接尾-助数詞     
の ノ の 助詞-連体化        
下人  ゲニン   下人  名詞-一般       
が ガ が 助詞-格助詞-一般     
、 、 、 記号-読点       
羅生門   ラショウモン  羅生門   名詞-固有名詞-一般      
の ノ の 助詞-連体化        
下 シタ  下 名詞-一般       
で デ で 助詞-格助詞-一般     
雨 アメ  雨 名詞-一般       
やみ  ヤミ  やみ  名詞-一般       
を ヲ を 助詞-格助詞-一般     
待っ  マッ  待つ  動詞-自立   五段・タ行 連用タ接続
て テ て 助詞-接続助詞     
い イ いる  動詞-非自立    一段  連用形
た タ た 助動詞   特殊・タ    基本形
。 。 。 記号-句点       
EOS

このように、文書を単語に分解できました。ところが、#1で示した単語分割とは異なる点があります。例えば、「ある日」は1単語だと考えますが、形態素解析を行うと「ある」と「日」に分けられています。疑問に思っていましたが、形態素解析は、単語に分解するのではなく、「形態素(以下#形態素を参照)」に分解するからだと理解しました。

コード3行目、

import MeCab

という行があります。MeCab京都大学とNTTが共同開発したオープンソース形態素解析プログラムです。

pip install mecab-python3

でインストールできます(詳細はPython3で形態素解析エンジンMeCabを使えるようにする(2016年3月版) - Qiitaなど参照)。

インスタンスを生成するとき、

m = MeCab.Tagger("-Ochasen")

この”-Ochasen”は、形態素解析(ChaSenと互換)を行うときの引数で、pただ、形態素に区切りたい(分かち書き)場合は、”-Owakati”とします。

#形態素

Wikipediaによると、

言語で意味を持つ最小単位。ある言語においてそれ以上分解したら意味をなさなくなるところまで分割して抽出された、音素のまとまりの1つ1つを指す。

つまり、単語よりも細かい単位であるということか... Wikipediaには自由形態素と拘束形態素など形態素をいくつかの種類に区別して説明されていました。それほど難しくはなかったので、こんなのもあるのか〜程度に思って一通り目を通しました。

#4次は

形態素解析の方法を知ったので、まずは単語の出現頻度を調べるところからやってみたいです。