さて、前のページでは、C言語で書く基本的なプログラムの骨格を作りました。次は、これにシミュレーションを組み込んで行きます。たいして難しくないので、肩の力を抜いて行きましょう。
細胞膜は、静止期には、外よりも中の方が電位が低く保たれています。これを静止電位と言います。そのとき、細胞外にはNaイオンが多く、内部には逆にKイオンが多いという事も分かっています。Na-K-ATPaseという膜にあるポンプ分子(ナトリウムポンプ)は、3分子のNaイオンを外に排出すると同時に2分子のKイオンを細胞の中に取り込みます。また、膜はNa, Kそれぞれについて異なる選択的透過性(イオンチャネル)を持っています。他にもいろいろなイオンが働いて実際の電位勾配を作り出すのですが、とりあえずNaとKだけを使って細胞に膜電位を作ってみましょう。
まず、ナトリウムポンプの働きをシミュレーションします。
とりあえず、NaとK分子を膜の内外に50単位ずつ用意し、1単位時間にNaは3単位。Kは2単位それぞれ細胞の外と中へ移動します。1単位時間内で計算中にNaとKの分子濃度が変化するとシミュレーションとしては良くありませんので、とりあえず単位時間後の状態を格納するための変数をtNai, tNao, tKi, tKoを用意します。
double tNai,tNao,tKi,tKo;
tNai=Nai-3;
tNao=Nao+3;
tKi=Ki+2;
tKo=Ko-2;
次に、膜の透過性を表現してみます。正確には、膜内外のそれぞれのイオン濃度と内外の電位差によってイオンの移動速度が影響を受けるのですが、今回は膜内外のNa, Kそれぞれのイオンの濃度差に比例して、それぞれのイオンの移動が起きると仮定しましょう。例えば細胞膜内外のNaの濃度差はNao-Naiの様に書けますので、それに移動係数DNaをかける事で、単位時間内のイオンの移動量を計算します。Kの移動係数はDKとしてあります。
tNai=Nai-3+DNa*(Nao-Nai);
tNao=Nao+3+DNa*(Nai-Nao);
tKi=Ki+2+DK*(Ko-Ki);
tKo=Ko-2+DK*(Ki-Ko);
上の式は、ポンプとイオンチャネルの働きを「それなりに」考慮した式という事になります。これを、
Nai=tNai;
Nao=tNao;
Ki=tKi;
Ko=tKo;
でもとの変数に入れ直して、次の繰り返し計算をします。計算結果は、各ステップごとに内部のイオン単位数ー外部のイオン単位数(内外の電位差に相等)とともにprintfで書き出します。
最終的なプログラムはこんな感じ、、
計算結果は
の様になります。単純にNaとKの移動係数に差を持たせるだけで、膜の内と外にイオンの分子数の差が生じる事が分かりますね(約-75単位くらい)。それぞれのイオンが電荷を持っていますから、これが電位差を生み出すしくみではないかと予想できます。Naの移動係数(DNa)を0.3など大きな値にすると、膜が脱分極するのも分かります(イオン透過性の変化による脱分極)。ハイパーカードなどのビジュアル系プログラミング環境を使えば、これらの現象が「動き」として理解できますので、興味のあるひとはぜひチャレンジしてみてください。
シミュレーションは、現実世界のごく一部を切り出して、直感的には理解しにくい現象を説明することができます。ここで紹介したシミュレーションも、陰イオンの事や、体液中の正確なイオン濃度などは再現していません。でも、なんとなく膜電位が生じるしくみが分かるでしょう?この、「なんとなくだけど分かる」を通して、現象への興味を引き出し、もっと深い理解へ導くのがシミュレーションを作る意味だと思います。