![]() ![]() |
| |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;
}