opukopuのメモ帳

コンピュータを使わないでいたらいろんなことを忘れてしまったので思い出しながらメモする。

二次方程式における複素数解の可視化

はじめに

久々の更新。
最近は薬品を扱ったり測定機器をいろいろ使ったりするばかりで
全くコードが書けない日々です。

しかしコードを書いていないとダメな人間だと、その時間を失って気が付きました。

そんなわけで好きな数学とコーディングを一緒に楽しもうとPythonはじめました。
Machine Learningもついでに始めましたが、今のところあまり数学やってる気にはなりませんね。

そこで今回は、二次方程式複素数解をグラフで見るというスクリプトを書きました。

複素数領域での二次関数のグラフ化

では本題です。
Pythonでアレコレするための練習として、二次関数を複素数空間でプロットするというものです。

高校時代は二次方程式複素数解というのは、なんだか未知の世界の話で見ることはできないものだと思っていました。
しかし、実際にプロットして見ると明らかに解だとわかるように見ることができます。

では簡単に x^2 + 1 = 0を使ってみてみましょう。
これはすぐに x = \pm{i}が解だとわかりますが、グラフにするとどうなるでしょうか。

Jupyter Notebookをいろいろ調べながら導入し、以下のスクリプトを動かすと
二次関数 y = x^2 + 1についてのグラフが表示されます。

%matplotlib notebook
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

def func(x,y):
    return (x+y)**2 +1

x = np.linspace(-2,2,101)
y = x
_y = np.linspace(-2j,2j,101)

X,Y = np.meshgrid(x,y)
_X,_Y = np.meshgrid(x,_y)

Z = func(_X,_Y)
Z = [Z.real,Z.imag,abs(Z)]

title = ['Real','Imaginary','Absolute']
Z = list(zip(title,Z))

for i in Z:
    fig = plt.figure()
    ax = fig.add_subplot(111,projection='3d')
   
    ax.set_title(i[0])
    ax.set_xlabel('Real')
    ax.set_ylabel('Imag')
    ax.plot_surface(X,Y,i[1])

plt.show()

二次関数の値が実部、虚部、絶対値のグラフとして3つ表示されます。

f:id:opukopu:20180930223214p:plain
実部
f:id:opukopu:20180930223211p:plain
虚部
f:id:opukopu:20180930223216p:plain
絶対値

二次方程式の解とは、つまりこのグラフのZ軸が実部と虚部ともに0であるような点ということです。
実部と虚部のグラフからは少しわかりにくいですね。
解は絶対値のグラフを見るとわかります。
絶対値が0となるのは実部と虚部がともに0の時だけだからです。

先ほどのグラフを実部側、虚部側から見ると…

f:id:opukopu:20180930223208p:plain
実部側
f:id:opukopu:20180930223221p:plain
虚部側

実部はどちらも0。虚部は±1のところで絶対値が0になっています。

これで二次関数 y = x^2 + 1の解が x = \pm{i}であることがわかりました。

おわりに

これだけのことをするのに多くの時間をかけた気がします。
本業が忙しいというのもありますが、やはり前のように毎日コードを書かないと
なかなか新しいことを覚えられません。

でも久々にやってみると楽しいものです。
最近は数学書を読むだけでしたが、このように簡単なことでも手を動かしてみると
面白いことに気が付いたりします。
個人的には実部のグラフが双曲放物面になっていることが意外でした。
いや、考えたら当たり前なんですけどね…
こういう小さな発見で喜べるようなところが、私を数学に引き付けているんでしょうね。
なかなか時間はないですが、まったり数学ライフを送れるよう、コツコツやっていくしかないですね。

しかしもう少し上手い書き方はないものか…

DokuWikiでLatexを使おう

目的

ソースコードを貼り付けてノウハウの管理をするのもWiki導入の目的です。
しかし、もう一つ大切な目的。
お勉強したことの管理がありました。
数学や物理が中心になるので数式を扱えたほうがよろしい。
ついでにLatexが使えるようになりたい。
というわけでやってみよう。

環境

DokuWiki Wikiの導入は他サイトや本家参照 自分用の落書きが前回の記事として残ってもいますが…
さくらのレンタルサーバー ライトプラン
プラグイン Mathjax Plugin使用 詳細
https://www.dokuwiki.org/plugin:mathjax

MathJaxが使えるようですね。

手順

他のプラグインと同様に、管理->拡張機能管理からMathjaxと検索して出てきたものをインストール。正直これで終わりです。

上に記したプラグインのURLのページにあるExamples/Usagesを試してみるときちんと表示されます。
Inline Math 及び Display Mathの枠内にあるコードをWikiに貼り付けてみましょう。
結果は試してのお楽しみ(貼るのが面倒なだけ)。

あとはMathJaxの使い方と同じかと。

DokuWiki導入

経緯

公開したくないものとか、まとめたい。
手軽に編集したい。
どこからでもアクセスしたい。

レンサバに軽量Wikiクローン設置。

最初は

はじめはPukiWikiを使っていました。
ただ、サーバを移行することがあり、もっと良さげなものを探して乗り換えることに。

DokuWiki

なんだか最近海外では流行ってるらしい??
PHPだとか、いろいろ使われているし、活発に開発がされているためプラグインも充実しているとか。
見た目もPukiWikiに比べて大変今風。

インストール

環境

さくらのレンタルサーバー ライトプラン
DBはSQLiteのみ、シェルは使えない。
よってFTPでアップロードするだけでよいものがよかった。

導入

DokuWikiのページからサクッとダウンロードしてWinSCPでアップ。
install.phpから設定を適当に済ませる。
公開する気はないのでクローズドにしておく。
install.phpはさくらのファイルマネージャーで削除した。

プラグイン

DokuWikiおすすめプラグイン一覧。まとめ [DokuWikiで研究生活]
こちらを参考にどんどん入れていく。
Wikiの管理画面からポチポチクリックするだけでかんたんに導入できる。

.vimrcの一部をプラグインっぽくgithubに配置する巻

経緯

数年前、.vimrcで遊びはじめたりプラグインをバンバン入れて遊んでいた頃の話。
.vimrcの機能の一部をプラグインディレクトリに分離した。
それ以来そこにずっと置き続けている。
しかし、他のプラグインはNeobundleで管理し、bundleディレクトリにある。
せっかくなのでこれも混ぜよう。
githubに公開すれば環境を他のPCに公開するときも.vimrc移せばいいだけになる。

内容

opukopu.hatenablog.com
:RCedと打つと新しいタブに.vimrcを表示するだけのプラグイン
数行しかないので.vimrcに書いても全く問題ないが、コマンドの定義は外に置くべしと偉い人に言われた気もするので分けてあった。

プラグイン

プラグインを作るための雛形を作ってくれるプラグインがある。
LayoutPlugin
というプラグイン

:LayoutPlugin RCedit.vim

として雛形を作成できる。
カレントディレクトリに作られる。

コード

autoloadディレクトリとpluginディレクトリがある。
これらはpluginがvim立ち上げ時に読み込まれるのに対し、autoloadはこのプラグインが呼び出された時に読み込まれるという違いがる。
大きなプラグインならば分ける必要があるだろうが、今回はたった数行のvim script。
pluginディレクトリのみ編集する。
pluginディレクトリにはRCedit.vimというファイルがあるのでこれに上記記事にあるコードをペーストする。

command! -nargs=0 RCed call s:RCedit#editvimrc()
function! s:RCedit#editvimrc()
	tab new
	edit $MYVIMRC
endfunction

ここで上記記事と異なるのは、function名の前にRCedit#があることだ。
RCedit.vimというディレクトリの下にプラグインを置く場合このように書く必要があるらしい。

README.mdを書く

一応公開するので念の為体裁を整えておく。
README.mdに適当なことを英語で。2行。体裁とは一体。。。
しかしmarkdownの文法はよく忘れる。あまり書かないからか。

ライセンス文を記載

念の為体裁を(ry
そもそもgithubを無料で使わせていただいている場合ライセンスははっきりさせておく必要があるようだし、これを期にちゃんと書くようにしよう。
githubでライセンスをつけるのは簡単です。
とりあえずリポジトリを作成したあとに、「Create New File」をクリック。
ファイル名をLICENSEとすると右にテンプレートの選択が出てくるのでMIT LICENSEを選択。
とりあえずMIT LICENSEにしておけば大丈夫なはず。
こちらのほうがわかりやすく書かれています。
blog.fakiyer.com
3行目をみてみるときちんと西暦と名前が自動で入っています。
READMEにもMITライセンスであることを記して完了…でいいのかな。

多分二度とやることはないだろうな。

結局

https://github.com/umkasab321/RCedit
こんな感じで公開できた。
今度からNeobundleでumkasab321/RCeditを指定するだけでよくなった。
ところで未だにdein.vimに移行する元気が起きない。
あとはてなのユーザ名とgithubの名前統一したいな…めんどい。

LinuxMintでのキー配置変更

もうなんどやったことか。
今日も元気にEscとMuhenkanを入れ替える。

ぶっちゃけUbuntuでxkbを使った入れ換えをするのと何ら変わらない。

d.hatena.ne.jp

http://blog.cnu.jp/blog/2014/05/12/use-xkb/

こちらを参考にさせていただきました。
ただ、ログインしてもうまく反映されない部分が私の環境ではあったので少しやり方を変えます。
言ってることは前のUbuntu版とほぼ変わりません。修飾キーは特に換えないので扱いませんが、Ubuntu+xkbのことを調べれば情報はあるはず。

まずは

$ xev

としてkeycodeと名前を調べましょう。私の環境ではEsc 9, Muhenkan 102でした。

$ mkdir -p ~/.xkb/keymap ~/.xkb/symbols  //設定ファイルを格納するディレクトリ
$ setxkbmap -print > ~/.xkb/keymap/hhkb_swap  //キーボード設定を出力 ファイル名は自由
$ echo -e "partial modifier_keys\nxkb_symbols \"swapkeys\" {\n  replace key <MUHE> { [ Escape ] };\n  replace key <ESC> { [ Muhenkan ] };\n};" >> ~/.xkb/symbols/keyswap //ファイル名は自由

設定を記したファイルをkeyswapというファイルに出力します。同じことをやるのは面倒なのでコマンドで出力しました。
中身は以下のようになっています。は/usr/share/X11/xkb/keycodes/evdevに先ほど調べたkeycodeの数字(9や102)と対応するように書かれている。自分が使うキーコードを探して<>で囲まれたものを設定ファイルに書けば良い。

partial modifier_keys
xkb_symbols "swapkeys" {
  replace key <MUHE> { [ Escape ] };
  replace key <ESC> { [ Muhenkan ] };
};

swap_keysという名前の入れ替えです。
つぎに~/.xkb/keymap/hhkb_swapを編集します。
5行目に先ほどのkeyswapというファイルのswapkeysを使うよということを追加します。

xkb_symbols { include "pc+us+jp:2+inet(evdev)+terminate(ctrl_alt_bksp)+keyswap(swapkeys)" };

$ xkbcomp -I$HOME/.xkb ~/.xkb/keymap/hhkb_swap $DISPLAY 2> /dev/null

このコマンドで変換が行われたか確認します。Warningがたくさん出てくるのですが、問題ないしようですし邪魔なので/dev/nullにエラー出力してしまいます。

以後はこれをログイン時に実行するように.profileに書いておきましょう。

$ echo -e "xkbcomp -I\$HOME/.xkb ~/.xkb/keymap/hhkb_swap \$DISPLAY 2> /dev/null" >> ~/.profile

あとはログインしなおせば変更されているはずです。

と思ったら反映されませんでした。
私の環境だけでしょうか、。なんとなくシェルの階層が違って云々みないな話題なのか、まあ原因はわかりませんが。

$ echo -e "xkbcomp -I\$HOME/.xkb ~/.xkb/keymap/hhkb_swap \$DISPLAY 2> /dev/null" >> ~/keyswap.sh
$ chmod 755 keyswap.sh

とでもしてkeyswap.shをスタートアップアプリケーションに追加して回避しました。

はじめてのLinuxMint

ひさびさにUbuntuを使ってみたら、ヘッドホンがしょっちゅう切れたり、なんだかんだ使いにくかったので前から気になっていたLinux Mintに切り替えてみました。

Linux Mintとは

UbuntuベースだけどUIがWindowsに似ていて使いやすいOS。世界ではWindowsMacUbuntuに次ぐ普及率だそう。
海外ではけっこう広まってるらしいが日本ではまだ認知度が低い?様子。最近は広まってきているような気もしますが。

linuxmintjp.jimdo.com
linuxmintjp.jimdo.com

くわしくはこちらをご覧ください。

ダウンロード

LinuxMintにはいくつかのエディションがあるようです。UIが違うんですかね。UbuntuでUnityとかGnome flashbackとかそんな感じ?(適当)

上記サイトに説明あるので、それを見てなんとなくかっこよさそうなのでCinnamonにすることにしました。

ダウンロードはミラーを使うのですが、公式サイトからのリンクには日本のミラーが存在しません(2016/12)。
少し調べたところ、もともと日本にもいくつかミラーはあったようです。
そのとき、Mintには日本の法に触れるパッケージが含まれていたらしく、JAISTを始めとするミラーサイトが配信を停止。
しばらくしてから再開したようです。
今回ダウンロードするLinux Mint 18はすべてのISOからそのようなパッケージがのぞかれたようなので安心して良さそうです。
ともかく、そのような経緯でリンクがないのでしょう、きっと。
いまはJAISTにあったのでそこからダウンロードしました。


わくわく。

追記
stdio.hが無いと怒られたのでlibc6-devをaptで入れておく。

Ubuntuでのキー配置の変更(16.04)

Ubuntu 15.04: キーボードのカスタマイズ設定 - 児童小銃
http://blog.cnu.jp/blog/2014/05/12/use-xkb/
こちらを参考にさせていただきました。
完全に自分用の投稿なのでここに迷い込んでしまった方は上記リンクから解決できるはずです。
Xmodmapでいつものようにキーマップを変えようとしたら入力メソッドの切り替えをするとリセットされるためつまづきました。
いまはもっとイケてる方法があるようですね。
XKBを使いましょう。どうでもいいですがキーボードはHHKBです。名前が似てますね。キーボードの略だから当然ですけど。

$ mkdir -p ~/.xkb/keymap ~/.xkb/symbols  //設定ファイルを格納するディレクトリ
$ setxkbmap -print > ~/.xkb/keymap/hhkb  //キーボード設定を出力 ファイル名は自由
$ echo -e "partial modifier_keys\nxkb_symbols "swap_keys" {\n  replace key <MUHE> { [ Escape ] };\n  replace key <ESC> { [ Muhenkan ] };\n};" >> ~/.xkb/symbols/hhk_swap //ファイル名は自由

次に二行目で出力したファイル5行目を
xkb_symbols { include "pc+us+inet(evdev)+hhk_swap(swap_keys)" };
と書き換える。

$ echo "hhkb:swap_keys = +hhk_swap(swap_keys)" >> /usr/share/X11/xkb/rules/evdev
$ gsettings set org.gnome.desktop.input-sources xkb-options "['hhkb:swap_keys']"

スクリプトにしてまとめてしまおうかと思ったけど、すこしめんどくさい。。。