package ba;
public class pro {
double[] y=new double[1000];
double[][] x=new double[1000][10];
double[] sol=new double[100];
double[] e=new double[12];
double[] point=new double[1001];
double[] beta=new double[1001];
double[] alpha=new double[1001];
double[] sig=new double[1001];
double[] p=new double[1001];
double sigs,alphas,betas;
public static void main(String[] args) {
pro t=new pro();
}
pro(){
int s;
for(s=1;s<11;s++){
x[s][1]=1;
x[s][2]=s;
y[s]=2*x[s][2]+5*x[s][1]+Math.random();
}
ols sub=new ols();
sub.x=x;
sub.y=y;
sub.datanumber=10;
sub.number=2;
sub.makedata();
sol=sub.sol;
System.out.println(sol[1]+","+sol[2]);
double e1=0;
for(s=1;s<11;s++){
double z=y[s]-sol[1]-sol[2]*x[s][2];
e1=e1+z*z;
}
e1=e1/9;
double sigs=Math.sqrt(e1);
alphas=sol[1];
betas=sol[2];
System.out.println(alphas+","+betas+","+sigs);
int tr=0;
int s1,s2,s3;
for(s1=1;s1<11;s1++){
for(s2=1;s2<11;s2++){
for(s3=1;s3<11;s3++){
tr=tr+1;
beta[tr]=(0.95+0.01*s1)*betas;
alpha[tr]=(0.95+0.01*s2)*alphas;
sig[tr]=(0.95+0.01*s3)*sigs;
p[tr]=0.001;
}}}
int de;
for(de=1;de<51;de++){
for(tr=1;tr<1001;tr++){
double p1=p[tr];
for(s=1;s<11;s++){
double e2=y[s]-beta[tr]*x[s][2]-alpha[tr];
p1=p1*f(e2,0,sig[tr]);
}
point[tr]=p1;
}
double p1=0;
for(s=1;s<1001;s++){
p1=p1+point[s];
}
for(s=1;s<1001;s++){
p[s]=point[s]/p1;
}
}
for(s=1;s<1001;s++){
if(p[s]>0.01)System.out.println(s+","+alpha[s]+","+beta[s]+","+sig[s]+","+p[s]);
}
}
double f(double x ,double mu,double sig){
double 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;
}
}
package ba;
public class ols {
int s,s1,s2;
int datanumber,number;
double x1;
double[][] a=new double[100][100];
double[] b=new double[100];
double[] y=new double[1000];
double[][] x=new double[1000][10];
double[] sol=new double[100];
void makedata(){
for(s1=1;s1<number+1;s1++){
for(s2=1;s2<number+1;s2++){
x1=0;
for(s=1;s<datanumber+1;s++){
x1=x1+x[s][s1]*x[s][s2];
}
a[s1][s2]=x1;
}
}
for(s1=1;s1<number+1;s1++){
x1=0;
for(s=1;s<datanumber+1;s++){
x1=x1+x[s][s1]*y[s];
}
b[s1]=x1;
}
double z;
for(s1=1;s1<number+1;s1++){
for(s2=1;s2<number+1;s2++){
z=a[s2][s1]/a[s1][s1];
if(s1==s2)z=0;
for(s=1;s<number+1;s++){
a[s2][s]=a[s2][s]-z*a[s1][s];
}
b[s2]=b[s2]-z*b[s1];
}
}
for(s1=1;s1<number+1;s1++){
sol[s1]=b[s1]/a[s1][s1];
}
}
}
最終更新:2016年05月11日 17:55