var a=new Array();
var y=new Array();
var mu=new Array();
var sig=new Array();
var p=new Array();
var delta=new Array();
function myFunction() {
var id="1dnEaaI1NReiqMJkoDF80ux_TXK-AHp3OB4d79obExiI";
ex1 = SpreadsheetApp.openById(id);
var sheet = ex1.getSheetByName("data");
for(s=2;s<23;s++){
a[s-1]=sheet.getRange(s, 2).getValue();
y[s-1]=50*s-75;
}
for(s=1;s<11;s++){
mu[s]=100*s;
sig[s]=30;
p[s]=0.1;
}
for(s=1;s<22;s++){
delta[s]=new Array();
}
for(tr=1;tr<11;tr++){
for(s=1;s<22;s++){
for(sx=1;sx<11;sx++){
delta[s][sx]=f(y[s],mu[sx],sig[sx])*p[sx];
}}
for(s=1;s<22;s++){
d1=0;
for(sx=1;sx<11;sx++){
d1=d1+delta[s][sx];
}
for(sx=1;sx<11;sx++){
delta[s][sx]=delta[s][sx]/d1;
}
}
for(sx=1;sx<11;sx++){
a1=0;
for(s=1;s<22;s++){
a1=a1+y[s]*delta[s][sx]*a[s];
}
a2=0;
for(s=1;s<22;s++){
a2=a2+a[s]*delta[s][sx];
}
mu[sx]=a1/a2;
}
for(sx=1;sx<11;sx++){
a1=0;
for(s=1;s<22;s++){
a1=a1+(y[s]-mu[sx])*(y[s]-mu[sx])*delta[s][sx]*a[s];
}
a2=0;
for(s=1;s<22;s++){
a2=a2+a[s]*delta[s][sx];
}
sig[sx]=Math.sqrt(a1/a2);
if(sig[sx]<1)sig[sx]=1;
}
for(sx=1;sx<11;sx++){
a1=0;
for(k=1;k<11;k++){
for(s=1;s<22;s++){
a1=a1+delta[s][k]*a[s];
}
}
a2=0;
for(s=1;s<22;s++){
a2=a2+a[s]*delta[s][sx];
}
p[sx]=a2/a1;
}
}
for(s=1;s<11;s++){
sheet.getRange(s+1, 5).setValue(mu[s]);
sheet.getRange(s+1, 6).setValue(sig[s]);
sheet.getRange(s+1, 7).setValue(p[s]);
}
}
function f(x,mu,sig){
var pi,f1,f2;
pi=Math.PI;
f2=Math.sqrt(2*pi*sig*sig);
f1=-(x-mu)*(x-mu)/(2*sig*sig);
return Math.exp(f1)/f2;
}
最終更新:2016年06月29日 06:12