![]() ![]() |
|HomePage |About us |Units |Information |Documents |Events |Links |Limitted |Person | |
あまり厳密なエラーチェックをしていません。くれぐれも正しいデータを入力してください。
5〜15分のデータすべてを入力した場合は、一次回帰を用いて半減時間を計算します。
5分、15分を入力して、10分値を省いた時はこの2つのデータだけで計算します。
15分値のみ入力した時には、ICGを静注した時点の血中濃度を1mg/dl(つまり100%)と仮定して計算します。従って、静注量や採血時間が不正確だった場合は、半減時間やk値の信頼性が損なわれますのでご注意ください。
上記以外の組あわせで入力した場合は、妙な結果が表示されます。例えば、5分値のみ、あるいは10分値のみ入力した。あるいは数字以外のものを入力したなどです。
正しいデータを入力し直してください。
参考:
JavaScript版のソースは以下のようになってます。あまりに簡単なので、Java Applet版がどうしてあんなに長くなってしまったのか、自分でも理解に苦しみます。要するに計画性が無いのです...
function Arry(n){this.length=n;} function calc(form){ var _param, _harf_time, _k_value; var _intercept, _slope; _param=0.693; var x=new Arry(3); x[0]=5.0; x[1]=10.0; x[2]=15.0; var icg=new Arry(3); icg[0] = form.min5.value; icg[1] = form.min10.value; icg[2] = form.min15.value; var y=new Arry(3); y[0] = Math.log(icg[0]); y[1] = Math.log(icg[1]); y[2] = Math.log(icg[2]); //回帰 if(icg[1]==0.0){ if(icg[0]==0.0 && icg[2]>0.0){ //C0=100%で計算 _intercept = Math.log(100); _slope = (y[2]-_intercept)/x[2]; form.mess.value=""; }else if(icg[0]>0.0 && icg[2]>0.0){ //10分値抜きで計算 _slope = (y[2]-y[0])/(x[2]-x[0]); _intercept = (y[2]+y[0])/2.0 - _slope * (x[2]+x[0])/2.0; form.mess.value=""; }else{ //入力内容が不正 form.mess.value="データ不正"; } }else if(icg[0]>0.0 && icg[1]>0.0 && icg[2]>0.0){ //普通に回帰 var _avx, _avy, i; var sxx, sxy; _avx = (x[0]+x[1]+x[2])/3.0; _avy = (y[0]+y[1]+y[2])/3.0; sxx = 0.0; sxy = 0.0; for(i=0; i<3; i++){ sxx += (x[i]-_avx) * (x[i]-_avx); sxy += (x[i]-_avx) * (y[i]-_avy); } _slope = sxy/sxx; _intercept = _avy - _slope * _avx; form.mess.value=""; }else{ //入力内容が不正 form.mess.value="データ不正"; } //半減時間計算 var c0; var sec; c0 = Math.exp(_intercept); _halftime = (Math.log(c0/2.0)-_intercept)/_slope; _k_value = rnd(_param/_halftime,3); sec = Math.round((_halftime - Math.floor(_halftime))*60.0); form.halftime.value = Math.floor(_halftime)+"分"+sec+"秒"; form.k_value.value = _k_value; } function rnd(n, f){ var _keisu = Math.pow(10,f); n = n * _keisu; n = Math.round(n) return n/_keisu; }