LIFモデルの解き方をまとめました。
LIFモデルの定義 basic integrate-and-fire model1と呼ばれるモデルを使います。定義は次のとおりです。
$$ \tau \frac{du(t)}{dt} = -u(t) + RI(t) $$
ここで、解きやすくするために次の条件を課します。
一定の入力電流 $I(t) = I_0$ 静止膜電位は0 $u_r = 0$ $t=t^{(1)}$のとき、スパイクが発火する $u(t^{(1)})=0$ 条件を課すと、LIFモデルは次のように書けます。 $$ \tau \frac{du(t)}{dt} = -u(t) + RI_0 $$
LIFモデルを解く 定数変化法2という手法を用いて微分方程式を解きます。 LIFモデルを変形すると、次のような非同次1階線形法微分方程式の形になります。 $$ \frac{du(t)}{dt} + \frac{u(t)}{\tau} = \frac{RI_0}{\tau} $$
1. 同次形にして解く まずは上で得られた式の右辺を無視し、同次形にした方程式を解きます。 $$ \frac{du(t)}{dt} + \frac{u(t)}{\tau} =0 $$ 変数分離形なので、次のように変形します。 $$ \frac{1}{u(t)}du = -\frac{1}{\tau}dt $$ 両辺をそれぞれ積分すると次のようになります。$C_1$は任意定数です。 $$ \log{u(t)} = \frac{t}{\tau} + C_1 $$ uについてまとめます。$C$は任意定数ですが、ここで$C$を$t$の関数だとみなします。 $$ u(t) = \pm e^{-\frac{t}{\tau}}e^{C_1}\ =Ce^{-\frac{t}{\tau}}\ =C(t)e^{-\frac{t}{\tau}} $$ 上で得られた結果を用いて、次のように$U$を$t$で微分します。 $$ \frac{du(t)}{dt} = C'(t)e^{-\frac{t}{\tau}} + C(t)(-\frac{t}{\tau}e^{-\frac{t}{\tau}}) \ = e^{-\frac{t}{\tau}}(C'(t) - \frac{1}{\tau}C(t)) $$...
このポエムを書いたきっかけ 最近,様々なディストロを入れたけど,なんだかんだ安定しなくて困ってるからとりあえず今の気持ちをまとめたい.ポエムなのでです.ます.調はやめておく.
この記事の対象者 誰でも(OSの説明はしないので各自調べてほしいです)
自分がOSに求めること 私は,機械学習エンジニア(自称)だからPythonとGPUでモデルをぶん回す環境を構築する必要がある.具体的には,
Python Nvidia driver support GUI support があれば何でもいい. 自分が今まで入れたOSと感想 Ubuntu 初めて入れたときは,Windowsライクでとても使いやすいなぁなんて思ってたけど,aptはあんまり好きじゃない.全然新しいバージョンが入ってないし,debファイルを生で読み込むなんて今じゃ考えられない.nvidia driverにもバグがあって,autoinstallが使えなくてnvidia homepageからバイナリファイルとってきて入れてた記憶がある.もうやりたくない.
EndeavourOS(Arch Linux) 今使ってるOS.なんだかんだこれも安定していて使いやすい.自分はデスクトップ環境を整えたいわけじゃないからArchはいらない.でも,Archのようなローリングリリースで気軽にパッケージを入れられる思想は気に入ったので入れてみた.AURのパッケージの網羅性,新しさは最強. 最近,Ubuntuの記事が多すぎて質の悪い記事に当たる確率が増えてきた印象がある.その一方で,Arch系は公式のWikiが充実しているし,使ってるユーザー層のレベルもある程度高いので,ググったらだいたい解決して嬉しい.Arch LinuxのSlackコミュニティも質問したらすぐ答えてくれるような優しい人がいて本当に助かってる(何度かお世話になった). Ubuntuを使っていたときは,OSとデスクトップ環境が対応するものだと思っていた(WindowsやMacのように).でも実際にはそうじゃなくて,同じOSを使っていても白と黒くらい違う見た目のデスクトップ環境を使ってる人がいる事を知った.
もう一つ自分が学んだことは,configとの付き合い方.Ubuntu時代はGUI操作で完結したい一心だったが,config管理も中々良いことに気付いた.再現性が保てたり,バグの原因を探せたりするからだ.ついでに,configをいじるようになってvimが上達した(やはり必要にならないと上達しない気がする).
Gentoo Linux こいつは挑戦中.思い出を語ると3年話せるが,とにかく憧れしかないOS.何度も入れたが,音がでない,日本語入力ができない(もうできた),インストールに時間かかる,苦しい思いばっかりしてきた. こいつのおかげでLinux Kernel,パーティション,locale,その他諸々を学ぶことができた. パッケージ管理システムも強いし,品揃えも豊富だから普通に実用レベル.だというのに,まだ満足できる環境を構築できてない.
NetBSD これは知り合いに布教されて挑戦したOS.結論から言うと,nvidia driverが入らなくて解像度がおかしいし,(機械学習の)開発ができないし,やめにした.技術的にはできると思うが,疲れてしまった. メモリが12MBでも起動することで有名らしい.自宅に放置されてる最終処分場で買ったノートパソコンに入れる予定.さすがに古いパソコンのモニタを見続けるのは体に応えるので,サーバとして運用する予定.
Void Linux こいつはまだVirtualBox上でしか動かせていない.インストールはGentooやArchよりも簡単(GUIで完結する).デスクトップ環境の構築に関してもWikiやYouTubeの動画を参考にすればできそう. nvidia driverがちゃんと動くかどうか,パッケージマネージャがどれくらい使えるのかはまだわからないから,入れるだけ入れてみたい(NetBSD使ってる知り合いはなければビルドすればいいんだよ〜って言ってた).
そこまできたらslackwareでも良い気がしてきたが,Gentooでもパッケージ管理つらい(USE Flagを考えてるだけでも)のでまだ使える気がしない.経験値が足りない.
これからやること 今後もEndeavourOSを使い続けると思うが,長期休暇の間にGentooを入れて満足できたら移行しようと思う. 今になって思ったが,開発用のパソコンと趣味用のパソコンは分けるべきなんだなとしみじみ実感した.パソコンの性能を最大限活かすためにも,Linux lifeを楽しむためにも,CPU only(w/o GPU)のパソコンがほしいなと思うところ.正直BSD系は気になっている. 今はお金が無いから,そんなことはできないが.
余談 M1 macの未来 正直M1 macで開発するのがつらすぎて誰かThinkPadと交換してくれないかなって毎日考えてる.Asahi Linuxを入れたが,結局Gentooを入れるのに失敗してアンマウントしてパーティション触れなくなって復旧に死ぬほど時間かかった悪い思い出がある.Macは一般人になるため(Office365, その他会議ツールなど)に必要なので,浅知恵でAsahi Linuxを入れて変にMac本体に影響があったらいけないと思って今はLinux計画やめてる.
汎用レジスタ AX Accumulator Register 算術演算に使われる BX Base Register ポインタレジスタとして使う CX Count Register 繰り返すプログラムで,暗黙的にカウンタとして使われる DX Data Register 乗算,除算で使われる サイズ AX(16bit) AH 上位8bit AL 下位8bit BX BH BL CX CH CL DX DH DL フラグレジスタ DF Direction Flag IF Interrupt Enable Flag TF Trap Flag OF Overflow Flag 算術結果の結果がビット幅に収まらなかった時 SF Sign Flag 演算結果の最上位bitが入る(sign) ZF Zero Flag 演算結果がゼロのとき AF Auxiliary Carry Flag PF Parity Flag CF Carry Flag 符号なし演算 AX < BXのとき
作って理解するOS x86系コンピュータを動かす理論と実装:書籍案内|技術評論社 を読んだメモです.
TL;DR いくつかのアセンブラ構文の記述例と,その意味についてまとめました.
if文 switch ~ case文 do ~ while文 for文 関数 メモリのコピー メモリの比較 if文の記述 このようなC言語のコードを書きたいとします.
記述例 C言語
if (AX < 3){ BX = 2; } else { BX = 1; } アセンブリ
Test: cmp ax, 3 jae .Fase .True: mov bx, 2 jmp .End .False: mov bx, 1 .End: アセンブリは上から実行されるので,Falseを飛ばす仕様になっています.
switch ~ case文 記述例 C言語
switch (AX){ case 10: BX = 1; break; case 15: BX = 2; break; case 18: BX = 3; break; default: BX = 4; break; } } アセンブリ...
2章 アセンブラとコンピュータアーキテクチャ バイナリ 実行ファイル, バイナリコードのこと 本書では,このバイナリを解析することを目的としているらしい.
C言語でバイナリに触れてみる 適当なC言語で書かれたソースコードを書きます.
#include <stdio.h> int main() { printf("%d\n", 2 + 3); return 0; } このソースコードをgccでコンパイルしてあげるとa.outと呼ばれるバイナリが生成されます.このバイナリファイルを実行すると,予想した結果が得られます.
❯ gcc compile_2-1.c ❯ ./a.out 5 ここから,バイナリ解析っぽくなります.本書ではhexeditと呼ばれるバイナリエディタを使用していますが,私はxxdと呼ばれるコマンドを用いて読みます.
❯ xxd a.out > a.bin ❯ cat a.bin ───────┬────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── │ File: a.bin ───────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 1 │ 00000000: 7f45 4c46 0201 0100 0000 0000 0000 0000 .ELF............ 2 │ 00000010: 0300 3e00 0100 0000 4010 0000 0000 0000 ..>.....@....... 3 │ 00000020: 4000 0000 0000 0000 0847 0000 0000 0000 @....