google.load("visualization", "1", {packages:["corechart"]});
var point = new Array();
var y = new Array();
var price = new Array();
var a=new Array();
var x = new Array();
var year = new Array();
var month = new Array();
var p = new Array();
var sol=new Array();
var k=new Array();
var sol_ar=new Array();
var sig,sig_ar;
function sample() {
var query = "SELECT * FROM " +
'1nwLSmBe32SFPGq-1FVzTPsFetC7NixpA9QHTwHnu';
var encodedQuery = encodeURIComponent(query);
var url = ['https://www.googleapis.com/fusiontables/v1/query'];
url.push('?sql=' + encodedQuery);
url.push('&key=AIzaSyAH0WCAXRIdHdbI-6bnMSN4kVDDZZmGyqY');
url.push('&callback=?');
$.ajax({
url: url.join(''),
dataType: 'jsonp',
success: function (data) {
var rows = data['rows'];
sx = 0;
for (var i in rows) {
sx = sx + 1;
point[sx]=rows[i][1];
price[sx]=rows[i][2];
}
number = sx;
p[1]=0;
for(s=2;s<number+1;s++){
p[s]=price[s]-price[s-1];
}
for(s=1;s<number+1;s++){
k[s]=100;
}
mm=12;
yy=2007;
for(s=1;s<number+1;s++){
mm=mm+1;
if(mm>12)yy=yy+1;
if(mm>12)mm=1;
year[s]=yy;
month[s]=mm;
}
for(tr=1;tr<6;tr++){
for(s=1;s<number+1;s++){
y[s]=point[s]-k[s];
}
ols();
if(tr==1)pre();
if(tr>1)ar();
optimal();
}
for(s=0;s<number+1;s++){
x[s]=new Array();
}
x[0][0]="date";
x[0][1]="潜在";
x[0][2]="鉱工業指数";
for(s=1;s<number+1;s++){
x[s][0]=""+year[s]+"年"+month[s]+"月";
x[s][1]=k[s];
x[s][2]=point[s]/1;
}
var data =google.visualization.arrayToDataTable(x);
var op = {title: '潜在生産力'};
var chart = new google.visualization.LineChart(document.getElementById('memo'));
chart.draw(data, op);
}
});
}
function optimal(){
var ys=new Array();
for(s=1;s<200;s++){
ys[s]=80+0.2*s;
}
var v=new Array();
var gotos=new Array();
var op=new Array();
for(s=1;s<number+1;s++){
v[s]=new Array();
gotos[s]=new Array();
}
for(s=1;s<200;s++){
x1=sol[1]+sol[2]*(point[1]-ys[s]);
x2=0;
v[1][s]=(p[1]-x1)*(p[1]-x1)/sig;
}
minv=0;
for(t=2;t<number+1;t++){
for(s=1;s<200;s++){
x1=sol[1]+sol[2]*(point[t]-ys[s]);
e1=(x1-p[t])*(x1-p[t])/sig;
minv=999999;
sxs=0;
for(sx=1;sx<200;sx++){
x2=sol_ar[1]+sol_ar[2]*ys[sx];
e2=(ys[s]-x2)*(ys[s]-x2)/sig_ar;
v1=e1+e2+v[t-1][sx];
if(v1<minv)sxs=sx;
if(v1<minv)minv=v1;
}
gotos[t][s]=sxs;
v[t][s]=minv;
}
}
sx=0;
minv=9999;
for(s=1;s<200;s++){
if(v[number][s]<minv)sx=s;
if(v[number][s]<minv)minv=v[number][s];
}
op[number]=sxs;
for(s=1;s<number;s++){
t=number+1-s;
s1=op[t];
op[t-1]=gotos[t][s1];
}
for(s=1;s<number+1;s++){
s1=op[s];
k[s]=ys[s1];
}
}
function pre(){
var a=new Array();
var b=new Array();
for(s=1;s<3;s++){
a[s]=new Array();
}
var y1=new Array();
var y2=new Array();
for(s=1;s<number+1;s++){
y2[s]=point[s]*1;
}
y1[1]=point[1]*1;
for(s=2;s<number+1;s++){
y1[s]=point[s-1]*1;
}
b1=0;
for(s=1;s<number+1;s++){
b1=b1+y2[s];
}
b[1]=b1;
b1=0;
for(s=1;s<number+1;s++){
b1=b1+y2[s]*y1[s];
}
b[2]=b1;
a1=0;
for(s=1;s<number+1;s++){
a1=a1+1;
}
a[1][1]=a1;
a1=0;
for(s=1;s<number+1;s++){
a1=a1+y1[s];
}
a[1][2]=a1;
a[2][1]=a1;
a1=0;
for(s=1;s<number+1;s++){
a1=a1+y1[s]*y2[s];
}
a[2][2]=a1;
for(s1=1;s1<3;s1++){
for(s2=1;s2<3;s2++){
z=a[s2][s1]/a[s1][s1];
if(s1==s2)z=0;
for(s=1;s<3;s++){
a[s2][s]=a[s2][s]-z*a[s1][s];
}
b[s2]=b[s2]-z*b[s1]
}
}
for(s=1;s<3;s++){
sol_ar[s]=b[s]/a[s][s];
}
s1=0;
for(s=1;s<number+1;s++){
s1=s1+(y2[s]-sol_ar[1]-sol_ar[2]*y1[s])*(y2[s]-sol_ar[1]-sol_ar[2]*y1[s]);
}
sig_ar=s1/number;
}
function ar(){
var a=new Array();
var b=new Array();
for(s=1;s<3;s++){
a[s]=new Array();
}
var y1=new Array();
var y2=new Array();
for(s=1;s<number+1;s++){
y2[s]=k[s];
}
y1[1]=k[1];
for(s=2;s<number+1;s++){
y1[s]=k[s-1];
}
b1=0;
for(s=1;s<number+1;s++){
b1=b1+y2[s];
}
b[1]=b1;
b1=0;
for(s=1;s<number+1;s++){
b1=b1+y2[s]*y1[s];
}
b[2]=b1;
a1=0;
for(s=1;s<number+1;s++){
a1=a1+1;
}
a[1][1]=a1;
a1=0;
for(s=1;s<number+1;s++){
a1=a1+y1[s];
}
a[1][2]=a1;
a[2][1]=a1;
a1=0;
for(s=1;s<number+1;s++){
a1=a1+y1[s]*y2[s];
}
a[2][2]=a1;
for(s1=1;s1<3;s1++){
for(s2=1;s2<3;s2++){
z=a[s2][s1]/a[s1][s1];
if(s1==s2)z=0;
for(s=1;s<3;s++){
a[s2][s]=a[s2][s]-z*a[s1][s];
}
b[s2]=b[s2]-z*b[s1]
}
}
for(s=1;s<3;s++){
sol_ar[s]=b[s]/a[s][s];
}
s1=0;
for(s=1;s<number+1;s++){
s1=s1+(y2[s]-sol_ar[1]-sol_ar[2]*y1[s])*(y2[s]-sol_ar[1]-sol_ar[2]*y1[s]);
}
sig_ar=s1/number;
}
function ols(){
var a=new Array();
var b=new Array();
for(s=1;s<3;s++){
a[s]=new Array();
}
b1=0;
for(s=1;s<number+1;s++){
b1=b1+p[s];
}
b[1]=b1;
b1=0;
for(s=1;s<number+1;s++){
b1=b1+p[s]*y[s];
}
b[2]=b1;
a1=0;
for(s=1;s<number+1;s++){
a1=a1+1;
}
a[1][1]=a1;
a1=0;
for(s=1;s<number+1;s++){
a1=a1+y[s];
}
a[1][2]=a1;
a[2][1]=a1;
a1=0;
for(s=1;s<number+1;s++){
a1=a1+y[s]*y[s];
}
a[2][2]=a1;
for(s1=1;s1<3;s1++){
for(s2=1;s2<3;s2++){
z=a[s2][s1]/a[s1][s1];
if(s1==s2)z=0;
for(s=1;s<3;s++){
a[s2][s]=a[s2][s]-z*a[s1][s];
}
b[s2]=b[s2]-z*b[s1]
}
}
for(s=1;s<3;s++){
sol[s]=b[s]/a[s][s];
}
s1=0;
for(s=1;s<number+1;s++){
s1=s1+(p[s]-sol[1]-sol[2]*y[s])*(p[s]-sol[1]-sol[2]*y[s]);
}
sig=s1/number;
}
最終更新:2015年12月29日 04:56