SQL言語メモ

MYSQL起動、終了

・起動、終了

//起動
mysql -u user_name
//終了
quit

頻出のSQLコマンド

データベースリストの表示

show databases

データベースへの移動

use "データベースの名前"

テーブルリストの表示

show tables

テーブルの作成

create “テーブルの名前” (フィールド名 データ型,・・);

create  name_ID_list (id int,name varchar(20));

ユーザの追加

CREATE USER 'ユーザ名'@'ホスト名' IDENTIFIED BY 'パスワード';

ユーザへの権限付与

GRANT '権限' ON 'db_name'.'table_name' TO 'user';

生理学学習メモ(2)

医学用語について

・順行性と逆行性
正常な生体中での向きと同じなら順行性、逆なら逆行性
・求心性と遠心性
中枢に向かうものを求心性、末端に向かうものを遠心性
・限局性とびまん性
 境界が明瞭に分布しているものを限局性、境界不明瞭で広がって分布しているものをびまん性
・外因性と内因性
原因が生体の外にあるのは外因性、生体内にあるのは内因性
・器質性と機能性
解剖学的に原因がわかるのは器質性、働きに問題があるのは機能性
・随意性と不随意性
自分でコントロールできるのが随意性、できないのが不随意性
・観血的と非観血的
ハリなどを刺さなければできないことが侵襲的
刺さなくてもできるのが、非侵襲的
・験者と被験者
検査などを実施するのが験者、されるのが被験者
・機能血管と栄養血管
臓器の働きのためにある血管が機能血管、臓器に酸素を運び二酸化炭素を運び去るのが栄養血管

血液、体液生理学

血液の働き


B型血清内に含まれるA型抗体とA型抗原が抗原抗体反応を起こすことで凝集する

血液の成分

血液は体重の8%。赤血球45%、白血球と血小板1%以下
作られる場所は胎生期は肝臓など、生後は椎骨胸骨など(要するに骨)

血球の分化

エリスロポエチンは骨髄系幹細胞から赤血球へ分化する際に必要となる。骨髄系幹細胞からは赤血球、好中球など

血液検査について

採血は基本的には静脈血で行う。
・動脈採血データ
呼吸の状態を知ることができる
例:酸素分圧、二酸化炭素分圧、pH、酸素飽和度、重炭酸イオン濃度
これらのデータから肺の機能障害の有無、生体の酸塩基平衡の状態を把握できる

・静脈採血データ
健康診断項目によると脂質検査では中性脂肪、コレステロール
肝臓系検査ではAST,γ-GTP,ALP,アルブミン,LDH,総蛋白,HBs抗原など
糖代謝では尿糖、空腹時血糖がわかる。
腎臓、泌尿器検査ではクレアチニンなど。腎臓の形状の変化などは分からないが、腎臓の働きに問題がないかなどがわかる。
血液一般のこととして赤血球数や血色素量(ヘムタンパクの量)白血球数などがわかる。

・他に採血で検査できること
凝固,線溶系、各種ホルモン要素、腫瘍マーカー検査、血液型、各種抗体検査
染色体検査、薬物濃度検査(適正濃度の幅が狭いものなどは特に)、細菌の有無

血漿蛋白と結成蛋白

抗凝固剤を入れた場合液体部分として血漿が現れる
抗凝固剤を入れなかった場合、血清、血餅(血漿中のフィブリンが析出し血球成分とともに固まったもの)に分離される。
電気泳動すると分子量に応じてアルブミン、グロブリンなどが現れる
フィブリノーゲンの有無で血漿か血清かわかる。

血液型

・Rh式と母体
Rh(-)の女性が二人Rh(+)の子供を妊娠すると母体内の抗Rh抗体が胎児の赤血球を攻撃することになる。
Rh(+)の子供を妊娠→分晩中にRh(+)の胎児の血液中のRh(+)赤血球が母体に混入→Rh(-)の母体内でRH(+)の抗体を産生→二子を妊娠→母体に残るRh(+)の抗体が胎児の血液に混入→Rh(+)抗体が胎児のRh(+)赤血球を破壊

血液製剤と自己血輸血について

血液成分 温度 期間
赤血球 2~6 21日
血漿 -20以下 1年
血小板 20~24 4日
全血 2~6 21日

血漿は解凍したらすぐに使わなければならない

輸血を含む移植の問題点

GVHD
自分以外からの移植物を異物とみなして攻撃することにより
様々な症状(移植編の拒絶や炎症、発熱)を表すこと

輸血後GVHDの症状
輸血後1-2週間躯体に紅斑が出現、そのあとに肝障害や下痢、下血などの症状を呈し骨髄低形成などを起こす

血液製剤の種類

・血液凝固第八因子錠剤〜血友病患者に不足する血液凝固8因子を補う
・アルブミン錠剤〜事故などで大量出血した時など
・免疫グロブリン製剤

自己血輸血

メリット
感染症やGVHDなどのリスクがなくなる
あらかじめ出血が予想されるような時(手術など)に使われる。

骨髄

成人ー赤血球・多種の白血球・血小板は骨髄で作られる
胎児ー脾臓、肝臓で作られる。

赤色骨髄・・造血が行われる
黄色骨髄・・非活動
75%の細胞は白血球を産生する骨髄細胞系
25%は赤血球を産生

赤血球

多量のヘモグロビンを含有
\(O_2\)と\(CO_2\)を運搬
形:直径7-8um
指標:赤血球数:男500万 女450万\(/mm^3\)
ヘマトクリット(Ht)赤血球成分の割合 男45% 女40%
ヘモグロビン濃度(Hb)

基準値

平均赤血球容積MCV(容積指数)
\[
\frac{Ht}{赤血球数} = 81-44
\]
平均赤血球ヘモグロビン含有量(色素指数)
\[
\frac{HB値}{赤血球数} = 27-32 pg
\]
平均赤血球ヘモグロビン濃度(飽和指数)
\[
\frac{Hb値}{Ht} = 30-36 g/dL
\]

赤血球の産生

・産生場所
卵黄嚢→肝臓脾臓リンパ節(胎生中期)→骨髄(新生児以降)→赤色骨髄(成人)
・産生の流れ
造血幹細胞→前期赤芽球前駆細胞→前赤芽球→(3,4回分裂、Hb増加)→正染色性赤芽球→網状赤血球→
成熟赤血球(寿命120日)

赤血球の産生調節要素

エリスロポエチン erythropoietin(EPO)
分子量4万の糖タンパク質ホルモン
EPO増加→産生速度が上がる
ビタミン\(B_{12}\)
DNA合成に不可欠なので
欠乏→増殖障害→赤芽球の分裂が困難になる
・貧血 赤血球数が減少した状態
・赤血球数増多症 赤血球数が増加した状態

貧血:慢性低酸素症→チアノーゼを引き起こす
悪性貧血←ビタミン\(B_{12}\)吸収障害
出血性貧血←Fe不足でHb形成低下

ヘモグロビン

\(O_2\)を運搬するタンパク質
ポリペプチド鎖とヘムからなるサブユニット4つ

Fe-O2の結合はゆるく離れやすい
親和性はNo>CO>\(O_2\)なのでNOとCOは\(O_2\)の運搬を阻害する。

溶血

溶血=赤血球の破壊
赤血球の寿命は120日で古くなると溶血しやすくなる。溶血は血管の狭いところ脾臓の赤色脾髄で破壊される。
溶血ででたヘモグロビンは肝臓クッパー細胞などの組織のマクロファージに取り込まれる。Hbはマクロファージ内で遊離鉄、CO、ビリルビンに分解される。その後マクロファージから遊離ビリルビンが放出されAlbに結合し運ばれる。これは肝臓でグルクロン酸抱合されて抱合型ビリルビンになり腸管で排出される。ビリルビンはウロビリノーゲンになる。ウロビリノーゲンは一部吸収されて肝臓へ胆汁として腸管へ送られる。

鉄代謝

\(Fe^{2+}\)は小腸粘膜から吸収される→血漿中でトランスフェリンと結合し骨髄、肝臓へ
→骨髄でFe結合トランスフェリンが赤芽球の受容体と結合→ミトコンドリアでHb形成

生理学学習メモ(1)


生理学で学んだことをメモしてみました。

収縮期と拡張期


収縮期、拡張期の基準は左心室である。収縮期には大動脈弁が開いて血圧が高くなっている状態で拡張期は大動脈弁が閉じて血圧が低くなっている状態なので左が収縮期、右が拡張期である

全身の循環系


全身に送る体循環の方がより高い圧を必要とするため左心室の方が高圧系になる

胸腔内圧


胸腔内圧は胸膜腔の圧力であり、横隔膜と胸膜によってこの圧力を変えることで肺への空気の出し入れを実現している。肺胸腔内圧は常に陰圧である。

浸透圧

濃度の高い方から低い方へ水分子が移動すること。

血漿浸透圧の計算方法

\begin{equation}
p = Na \times 1.86 + \frac{BS}{18} + \frac{BUN}{2.8}
\end{equation}

例題1

1[L]に?gの食塩水を入れると等張液か?
NaCl:58.44
\begin{align*}
&290({\rm mOsm}) = Na({\rm mEq}) \times 1.86 \\
&Na({\rm mEq}) = 156({\rm mOsm})
\end{align*}
Naをw(g)入れたら156(mOsm)
\begin{align*}
&w \times \frac{1000}{58.44} = 156 \\
& w = 9.12({\rm g})
\end{align*}
1L中に9(g)なので0.9%

例題2

1[L]に?gのグルコースを入れると等張液か?

\begin{align*}
&290({\rm mOsm}) = \frac{BS}{18}
&BS = 290 \times 18
&BS = 5220({\rm mg/dl})
\end{align*}
1Lの水にグルコースをw(g)入れたら5220({\rm mg/dl})
というのは1dLの水にグルコースを\(w\times10^{2}\)(mg)入れたら5220(mg/dl)
\begin{align*}
&5220 = w \times 10^2
&w \times \frac{5220}{100} = 52.2 \\
& w = 52.2({\rm g})
\end{align*}
1L中に52.2(g)なので5.2%

フィードバック

時間軸と反応の強さが重要らしい

ホルモン調節

自律神経

体温調節

上がる要因:血管収縮、立毛筋収縮、アドレナリン放出、震え
下がる要因:血管拡張、発汗

ホメオスターシス、フィードバック

緩衝系

重炭酸緩衝系は60%で最も比重が大きい
他にはリン酸緩衝系:5% ヘモグロビン緩衝系は30% たんぱく質緩衝系は5%である。

phの調整機構

呼吸性と代謝性がある。
*呼吸性
呼吸不全→炭酸ガス過剰→呼吸性アシドーシス

*代謝性
腎臓が関係する
腎不全で不揮発性酸などを放出できなくなると代謝生アシドーシスになる

代償

*代謝性pH異常の時
代謝性アシドーシス→呼吸性アルカローシス
代謝性アルカローシス→呼吸性アシドーシス
*呼吸性pH異常の時
呼吸性アシドーシス→代謝性アルカローシス
呼吸性アルカローシス→代謝性アシドーシス

どちらが起こりやすいか
呼吸性の代償は秒から分単位で起こる
代謝性の代償はゆっくり起こる

細胞膜やイオンチャネル、受容体など

細胞膜

細胞膜は物質の通過を遮断している。細胞膜上にあるイオンチャネルは特定のイオンを通過させるものであり、受容体は
リガンド依存性チャネル..
Gタンパク質共役型受容体 タンパク質をリン酸化する
触媒受容体
細胞内受容体
がある

受容体について

レニンーアンジオテンシンーアルドステロン系
*腎の尿細管のホルモン受容体
AQP(アクアポリン)にはADH依存性と非依存性がある
ADHが作用すると水チャネルが増加し、尿細管内に水がより多く流れるようになる。

受動輸送と能動輸送

受動輸送

濃度勾配に従って物質が移動
担体を用いた物質の輸送:輸送量が頭打ちになる

能動輸送

濃度勾配に逆らって物質が移動
1次性能動輸送 ATPを直接使う
2次性能動輸送 \(Na^{+}\)の勾配を利用。\(Na^{+}、H^{+}\)交換
3次性能動輸送  \(H^{+}\)の勾配を利用。
1次性能動輸送がダメになると2次3次もダメになる

グルコース輸送系

swift学習記録(1)

swiftとobjective-c(C言語)の違いを踏まえながら、記法について学んでいくための備忘録です。

データ表現

まず数字の表現からです。C言語では定数はconstをつけて表していました。swiftでは変数にはvar,定数にはletをつけて表します。

var test1 = 10 //varは定数
let test2 = 40 //letは定数

この表現は数字に限らず、文字列に関しても同じです。Objective-CではNSStringを使っていましたがだいぶ簡略されました。

var test1 = "hello"

文字列に変数の数字を結合することも簡単になっています。

//objective-c
int num1 = 3;
NSString *str = [NSString stringWithFormat:@"I have %d apples",num1);
//swift
let num1 = 3
let str = "I have \(num1) apples" //文字列の連結
print(str)

配列と辞書

配列や辞書にもvarやletを用いることができます。

//objective-c
NSArray *array = [@"a",@"b",@"c",@"d"] //配列
NSDictionary *occupations = [@"Haru":@"Spring", //辞書
                    @"Natsu":@"Summer",]
//swift
let array = ["a","b","c","d"] //配列
var occupations = ["Haru":"Spring", //辞書
                    "Natsu":"Summer",]

関数

func greet(person: String, day: String) -> String {
    return "Hello \(person), today is \(day)."
}

オプショナル

一般には変数にnilを代入することはできません。?や!をつけるとオプショナル型となってnilを許容することができます。

//optionalについて
var optionalString :String? = nil //エラーが出る
var optionalString :String? = "Hello"
var optionalString :String? = nil //エラーが出ない

アンラップ

オプショナル変数を用いる時にはアンラップする必要があります。?で宣言したものは変数の後に!をつけることで強制アンラップが、?を付けることでOptional Chaining(nilが入った処理はスキップ)ができます。また、Optional Binding(if文の組み合わせて変数のnilチェックを行う)方法もあります
!で宣言したものは修飾しなくても自動的に強制アンラップされます。

var optionalString :String? = nil
print(optionalString.lowercased()) //強制アンラップ(エラーが出る)

var optionalString :String? = "test" 
print((optionalString?.lowercased())!) //Optional Chaining(nilが入っている時のメソッド呼び出し後の帰り値はnilになる。この場合はその後に強制アンラップしているのでエラーとなる

let string: String? = "hello world"

if let bindString = string {    // Optional Binding
    bindString = bindString.uppercaseString
}

let a : Int? = nil
let b = a ?? 0 // bには0が代入される //nil coalescing operator

var optionalString :String! = nil
print(optionalString.lowercased()) //(エラーが出る)

数値計算(2) ルンゲクッタ法


オイラー法は一次近似を用いたものであったが、一次近似では計算量に対する誤差の値が大きすぎるため、より精度の高いアルゴリズムが求められる。
一般的によく用いられる方法は4次のルンゲクッタ法(RK4)だが、ここでは一段階簡明な2次のルンゲクッタ法(RK2)を考察してみよう。RK2がわかればRK4はその応用なので、計算はややこしいものの仕組みは理解できるはずである。
前回と同じように以下の微分方程式について考察しよう
\begin{equation}
\frac{dy}{dx}= f(x,y)
\end{equation}

まずオイラー法では一ステップの計算誤差のオーダーは\(o(x^2)\)であった。
\[
y(x_0+h) = y(x_0) + h y'(x_0) + o(x^2)
\]
更にオーダーを微小にするにはテーラー展開を2次の項まで計算すればよい。
\[
y(x_0+h) = y(x_0) + h y'(x_0) + \frac{1}{2} h^2 y”(x_0) + o(x^3)
\]
さて、オイラー法では\(y'(x) = f(x,y)\)を代入して
\[
y(x_0+h) = y(x_0) + h \cdot f(x_0,y_0) + o(x^2)
\]
とするだけで良かったが、RK2では
\[
y(x_0+h) = y(x_0) + h f(x_0,y_0) + \frac{1}{2} h^2 f'(x_0,y_0) + o(x^3) \tag{1}
\]
としたあと、\(f'(x_0,y_0)\)を処理しなければならない
ここで\(f(x,y)=y\)と仮定してみると\(f'(x,y)=\frac{dy}{dx} =f(x,y) = y\)であるから

\begin{align*}
&y(x_{n+1}) = y(x_n) + h f(x_n,y_n) + \frac{1}{2} h^2 f'(x_n,y_n) \\
&= y(x_n) + h y_n+ \frac{1}{2} h^2 y_n \tag{2}
\end{align*}

このように導関数があらかじめわかっているなら漸化式を容易に導出することができた。
しかし、任意の\(f(x,y)\)に対する導関数を求めて漸化式を導出することは難しい。そこで、別のアプローチを取ることになる。
まず関数\(f(x,y)\)の\(x,y\)についての全微分は以下のようになる
\[
df = \frac{\partial f}{\partial x} dx + \frac{\partial f}{\partial y} dy \tag{3}
\]
(3)の両辺を\(dx\)で割ると
\begin{align*}
f'(x,y) = \frac{df}{dx} = \frac{\partial f}{\partial x} + \frac{\partial f}{\partial y} \cdot \frac{dy}{dx} = f_x + f_y \cdot f
\end{align*}

となり、これを(1)に代入すると
\begin{align*}
&y(x_0+h) = y(x_0) + h f(x_0,y_0) \\
&+ \frac{1}{2} h^2 (f_x(x_0,y_0) + f_y(x_0,y_0) \cdot f(x_0,y_0)) +o(x^3) \tag{4}
\end{align*}
となる。
\(f_x(x_0,y_0),f_y(x_0,y_0)\)は\(f(x_0,y_0)\)の近傍で多変数のテーラー展開を行うことで生成される近似式に含まれる。
そこで\(k_1 = f(x_0,y_0)\), \(k_2 = f(x_0+ah,y_0+b h k_1)\)とおき、\(k_2\)を\(f(x_0,y_0)\)の近傍でテーラー展開してみよう。
\[ \begin{align*}
k_2 &= f(x_0+ah,y_0+b h k_1) \\
&= f(x_0,y_0) + ahf_x(x_0,y_0) +bh k_1 f_y(x_0,y_0) + o(h^2)
\end{align*}\]
ここで\(k_1\)と\(k_2\)に重み\(w_1\),\(w_2\)をかけた線形和\(\phi =w_1 k_1 + w_2 k_2\)をとる。
\[
y(x_0+h) = y(x_0) + h \phi
\]
この式を展開すると以下のようになり、(4)と恒等であることがわかる。
\begin{align*}
&y(x_0+h) = y(x_0) + h(w_1+w_2)f(x_0,y_0) \\
&+h^2 w_2\bigl( a f_x(x_0,y_0)+ b f_y(x_0,y_0) \cdot f(x_0,y_0)\bigr) + o(h^3) \tag{5}
\end{align*}
(4)、(5)の係数を比較することで\(w_1 +w_2 = 1\)、\(w_2a = w_2b = 0.5\)が導かれ、
\(w_1,w_2,a,b\)の値を上式に適合する範囲内で任意に決定することができる。ここでは
\(w_1 =0, w_2 = 1, a = \frac{1}{2},b = \frac{1}{2}\)とする。(別名:修正オイラー法)
決定した係数を当てはめると以下のようになる。
\[
y(x_0+h) = y(x_0) + h f\bigl(x_0 +\frac{1}{2} h,y_0+\frac{1}{2}h f(x_0,y_0)\bigr)\tag{6} \\
\]
さて、ここまでがRK2の説明である。ここからはRK2を実際に用いて計算をさせてみよう。前回は\(f(x,y) = y\)
という式を用いたが、精度が向上したことを確かめる意味でも同じ式を採用しよう。
(6),(7)より
\begin{align*}
&y(x_{n+1}) = y(x_n) + h f\bigl(x_n +\frac{1}{2} h,y_n+\frac{1}{2}h f(x_n,y_n)\bigr) \\
&= y(x_n) + h\cdot \bigl(y_n + \frac{1}{2}h f(x_n,y_n)\bigr) \\
&= y(x_n) + hy(x_n)+ \frac{1}{2} h^2 y(x_n) \tag{8}
\end{align*}
式(8)は先ほど求めた式(2)と同じものである。
これを用いてh=0.01の刻み幅で\(y(10) = e^{10}\)を求めたところ以下のようになった。
\(e^{10} = 22026.465795\)
オイラー法 \(y(10)=20959.155638\) 誤差\(e = 1067.310157\)
RK2 \(y(10)=22022.822441\) 誤差\(e= 3.643353\)
このことから同一ステップ数でもかなり誤差が小さくなっていることがわかる。
4次のルンゲクッタ法は証明が更に難解になるが、計算に用いること自体は容易なので、微分方程式の計算をするときにはそちらを使うのが望ましいだろう。
ちなみに4次のルンゲクッタ法を用いた時の\(y(10) = e^{10}\)の値は以下のようになる。
RK4 \(y(10)=22026.465777\) 誤差 \(e =0.000018\)

#include <stdio.h>
#include <math.h>
int main(int argc, const char * argv[]) {
    // insert code here...
    printf("Hello, World!\n");
    double y[2001];
    double k[4];
    double x;
    scanf("%lf",&amp;x);
    double h = 0.01;
    int count = x/h;
    printf("count=%d\n",count);
    y[0] = 1.0f;
    //オイラー法
    for(int i=0;i<count;i++){
        y[i+1] = y[i] + h*y[i];
        
    }
    printf("y=%f exp=%f dif = %f\n"
,y[count],exp(x),fabs(y[count]-exp(x)));
    
    //RK2
    for(int i=0;i<count;i++){
        y[i+1] = y[i] +  h * (y[i]*(1+0.5*h));
    }
    printf("y=%f exp=%f dif=%f\n"
,y[count],exp(x),fabs(y[count]-exp(x)));
   
    //RK4
    for(int i=0;i<count;i++){
        k[0] = h*y[i];
        k[1] = h*(y[i]+k[0]/2);
        k[2] = h*(y[i]+k[1]/2);
        k[3] = h*(y[i]+k[2]);
        y[i+1] = y[i] + ( k[0] + 2*k[1] + 2*k[2] + k[3])/6;
    }
    printf("y=%f exp=%f dif=%f\n"
,y[count],exp(x),fabs(y[count]-exp(x)));
    return 0;
}