var point=new Array();
var a=new Array();
function myFunction() {
for(s=1;s<11;s++){
point[s]=new Array();
}
id="1wNSGiOawj581vATf9rxG3pI81DB88CmFRA2Mn5GFGVI";
ex = SpreadsheetApp.openById(id);
var sheet = ex.getSheetByName("data");
var v=sheet.getRange(1, 1,11,4).getValues();
for(s=1;s<11;s++){
for(sx=1;sx<4;sx++){
aa=change(v[s][sx]);
point[s][sx]=parseFloat(aa);
}
}
var avg=new Array();
for(tr=1;tr<4;tr++){
a1=0;
for(s=1;s<11;s++){
a1=a1+point[s][tr];
}
avg[tr]=a1/10;
}
var sig=new Array();
for(s=1;s<4;s++){
sig[s]=new Array();
}
for(s1=1;s1<4;s1++){
for(s2=1;s2<4;s2++){
a1=0;
for(sx=1;sx<11;sx++){
a1=a1+(point[sx][s1]-avg[s1])* (point[sx][s2]-avg[s2]);
}
sig[s1][s2]=a1/10;
}
}
for(s=0;s<3;s++){
a[s]=new Array();
}
for(s1=1;s1<4;s1++){
for(s2=1;s2<4;s2++){
z=sig[s1][s2]/Math.sqrt(sig[s1][s1]);
a[s1-1][s2-1]= z/ Math.sqrt(sig[s2][s2]);
}}
var sub=numeric;
ev = sub.numeric.eig(a);
var xx=ev.lambda.x;
var yy=ev.E.x;
var lam=new Array();
var v=new Array();
for(s=1;s<4;s++){
v[s]=new Array();
}
for(s=1;s<4;s++){
lam[s]=xx[s-1];
}
for(s=1;s<4;s++){
for(sx=1;sx<4;sx++){
v[s][sx]=yy[s-1][sx-1];
}}
Logger.log(lam[1]);
Logger.log(v[1][1]+","+v[1][2]+","+v[1][3]);
Logger.log(lam[2]);
Logger.log(v[2][1]+","+v[2][2]+","+v[2][3]);
Logger.log(lam[3]);
Logger.log(v[3][1]+","+v[3][2]+","+v[3][3]);
var delta=new Array();
for(s=1;s<11;s++){
p1=0;
for(sx=1;sx<4;sx++){
p1=p1+v[2][sx]*(point[s][sx]-avg[sx]);
}
delta[s]=p1;
}
for(s=1;s<11;s++){
sheet.getRange(1+s,5).setValue(delta[s]);
}
}
function change(strx){
han = "0123456789";
zen = "0123456789";
str = "";
for (i=0; i<strx.length; i++){
c = strx.charAt(i);
n = zen.indexOf(c,0);
if (n >= 0) c = han.charAt(n);
str += c;
}
return str;
}
最終更新:2017年04月19日 05:12