void evol_f(real *fin, real *fout) { int id, ip; double Cf1, Cf2; // cal_sigma(); cal_p(); streaming(fin,fout); cal_feqf_diff(fin,Cf); for (id=0; id<points*15; id++) { Cf1 = -itau_f * Cf[id] + p[id]; ip = nextf[id]; fin[id] += 0.5 * dt * Cf1; fout[ip]+= dt * Cf1; } // cal_rho(fout); cal_u(fout); // cal_sigma(); cal_p(); cal_feqf_diff(fout,fout); for (id=0; id<points*15; id++) { ip = nextf[id]; Cf2 = -itau_f * fout[ip] + p[ip]; fin[id] += dt * 0.5 * Cf2; } streaming(fin,fout); // cal_rho(fout); cal_u(fout); }
int main(void) { int i,j,n; char str[1000];char str3[1000];char str2[1000]; cal_p(); cal_fac(); /* for(i=0;i<N;++i){ */ /* for(j=0;j<N;++j){ */ /* printf("%s ",print_bignum(str,p[i][j])); */ /* } */ /* printf("\n"); */ /* } */ /* for(i=0;i<N;++i){ */ /* printf("%d\t%s\n",i,print_bignum(str,fac[i])); */ /* } */ n=0; while(scanf("%d%d",&i,&j),i||j){ ++n; if(i>=j){ printf("Test #%d:\n%s\n",n,print_bignum(str2,mul(mul(fac[i],fac[j]),p[i][j]))); } else { printf("Test #%d:\n0\n",n); } } return 0; }
int theq(double *t, double *h, double *a, double *b, const int n, double eps) { static double **r = NULL, **x, **xx, **p; static int size; double ex[4], ep[2], vx[4], bx[4], g[2]; int i; if (r == NULL) { r = mtrx2(n, 4); x = mtrx2(n, 4); xx = mtrx2(n, 4); p = mtrx2(n, 2); size = n; } if (n > size) { for (i = 0; i < size; i++) { free((char *) r[i]); free((char *) x[i]); free((char *) xx[i]); free((char *) p[i]); } free((char *) r); free((char *) x); free((char *) xx); free((char *) p); r = mtrx2(n, 4); x = mtrx2(n, 4); xx = mtrx2(n, 4); p = mtrx2(n, 2); size = n; } if (eps < 0.0) eps = 1.0e-6; /* make r */ for (i = 0; i < n; i++) { r[i][0] = r[i][3] = t[i]; r[i][1] = h[n - 1 + i]; r[i][2] = h[n - 1 - i]; } /* step 1 */ x[0][0] = x[0][3] = 1.0; if (cal_p0(p, r, b, n, eps) == -1) return (-1); vx[0] = r[0][0]; vx[1] = r[0][1]; vx[2] = r[0][2]; vx[3] = r[0][3]; /* step 2 */ for (i = 1; i < n; i++) { cal_ex(ex, r, x, i); cal_ep(ep, r, p, i); if (cal_bx(bx, vx, ex, eps) == -1) return (-1); cal_x(x, xx, bx, i); cal_vx(vx, ex, bx); if (cal_g(g, vx, b, ep, i, n, eps) == -1) return (-1); cal_p(p, x, g, i); } /* step 3 */ for (i = 0; i < n; i++) a[i] = p[i][0]; return (0); }
void evol_f(real f1[Nx][Ny][Nz][15], real f2[Nx][Ny][Nz][15], real Q0[Nx][Ny][Nz][3][3]) { int i,j,k,ii,jj; int ip, jp, kp; real Cf1, Cf2, CG1, CG2; real temp; cal_feqf_new(f_eq, f1, sigma); cal_p(p, f1, f_eq); streaming(f1,f2); if(particle_on!=0)p_bc(f1,f2); for(i=0;i<Nx;i++){ for(j=0;j<Ny;j++){ for(k=0;k<Nz;k++){ for(ii=0;ii<15;ii++) { Cf[i][j][k][ii] = - itau_f * (f1[i][j][k][ii] - f_eq[i][j][k][ii]) + p[i][j][k][ii]; ip = i + e[ii][0]; jp = j + e[ii][1]; kp = k + e[ii][2]; if ( ((kp>=0 && kp <Nz) || wall_on==0) && (particle_on==0 || particle_on !=0 && link_point2[i][j][k][ii]==0) ) { if (ip >= Nx) { ip -= Nx; } else if (ip<0) { ip += Nx; } if (jp >= Ny) { jp -= Ny; } else if (jp<0) { jp += Ny; } jj = ii; } else { ip = i; jp = j; kp = k; jj = bounce(ii); } f2[ip][jp][kp][jj] += dt * Cf[i][j][k][ii] ; } } } } cal_rho(Rho,f2); cal_u(u,f2); cal_sigma(Q0); cal_feqf_new(f_eq,f2,sigma); cal_p(p,f2,f_eq); for(k=0;k<Nz;k++){ for(i=0;i<Nx;i++){ for(j=0;j<Ny;j++){ for(ii=0;ii<15;ii++) { ip = i + e[ii][0]; jp = j + e[ii][1]; kp = k + e[ii][2]; if ( ((kp>=0 && kp <Nz) || wall_on==0) && (particle_on==0 || particle_on !=0 && link_point2[i][j][k][ii]==0) ) { if (ip >= Nx) { ip -= Nx; } else if (ip<0) { ip += Nx; } if (jp >= Ny) { jp -= Ny; } else if (jp<0) { jp += Ny; } jj = ii; } else { ip = i; jp = j; kp = k; jj = bounce(ii); } Cf1 = Cf[i][j][k][ii]; Cf2 = - itau_f * (f2[ip][jp][kp][jj] - f_eq[ip][jp][kp][jj]) + p[ip][jp][kp][jj]; f1[i][j][k][ii] = f1[i][j][k][ii] + dt * 0.5 * (Cf1 + Cf2); } } } } streaming(f1,f2); if(particle_on!=0)p_bc(f1,f2); cal_rho(Rho,f2); cal_u(u, f2); // cal_W(u); // cal_sigma(); }
void filterer::run_EM(vector <scan*> &sec,const char* path, parameters & params, bool quiet) { em_params = params; cout << "Performing EM optimization"; double pavg = em_params.em_p_avg; double pstdev = em_params.em_p_std; double p = em_params.em_p_prior; double mavg = em_params.em_m_avg; double mstdev = em_params.em_m_std; double m = 1-p; vector <double> pavg_list; vector <double> pstdev_list; vector <double> mavg_list; vector <double> mstdev_list; vector <double> p_list; vector <double> lsqr_list; unsigned int iters = 0; bool negged = false; bool stab_neg = false; bool stab_pos = false; double minma[2]; double maxma[2]; while (iters < 500 && (!stab_neg &&!stab_pos)){ minma[0]=10; minma[1]=10; maxma[0]=0; maxma[1]=0; iters++; //lsqr_list.push_back(least_sqr(p,pavg,pstdev,mavg,mstdev)); pavg_list.push_back(pavg); pstdev_list.push_back(pstdev); mavg_list.push_back(mavg); mstdev_list.push_back(mstdev); p_list.push_back(p); for (unsigned int i = 0; i < sec.size(); ++i){ sec.at(i)->Fp = cal_Fp(sec.at(i)->discrim,pavg,pstdev); sec.at(i)->Fm = cal_Fp(sec.at(i)->discrim,mavg,mstdev); sec.at(i)->pF = cal_pF(sec.at(i)->Fp,sec.at(i)->Fm,p,m); sec.at(i)->mF = 1-sec.at(i)->pF; // if (sec.at(i)->discrim > 5){ // sec.at(i)->pF = 1; // sec.at(i)->mF = 0; // } if (sec.at(i)->pF < minma[0]){ minma[0]=sec.at(i)->pF; minma[1]=sec.at(i)->discrim; } if (sec.at(i)->pF > maxma[0]){ maxma[0]=sec.at(i)->pF; maxma[1]=sec.at(i)->discrim; } } for (unsigned int i = 0; i < sec.size(); ++i){ if (sec.at(i)->discrim < minma[1] && sec.at(i)->pF > minma[0]){ sec.at(i)->pF = minma[0]; sec.at(i)->mF = 1-minma[0]; } if (sec.at(i)->discrim > maxma[1] && sec.at(i)->pF < maxma[0]){ sec.at(i)->pF = maxma[0]; sec.at(i)->mF = 1-maxma[0]; } if (sec.at(i)->discrim < -12){ sec.at(i)->pF = 0.0001; sec.at(i)->mF = 0.9999; } } if (!negged){ p = cal_p(sec); pavg = cal_pavg(p,sec); pstdev = cal_pstdev(p,pavg,sec); } if (!stab_neg){ m = 1-p; mavg = cal_mavg(m,sec); mstdev = cal_mstdev(m,mavg,sec); } if (pavg < em_params.em_p_avg_llimit && iters > 1){ negged = true; double maxp = 0; int mpos = 0; for (unsigned int i = 1; i < pavg_list.size();++i){ if (pavg_list.at(i) > maxp){ maxp = pavg_list.at(i); mpos = i; } } p = p_list.back(); pavg = pavg_list.back(); pstdev = pstdev_list.back(); m = 1-p; mavg = mavg_list.at(mpos); mstdev = mstdev_list.at(mpos); } if (mavg > em_params.em_m_avg_ulimit && iters > 4){ m = 1-p; mavg = mavg_list.back(); mstdev = mstdev_list.back(); } if (iters > 2 && fabs(mavg-mavg_list.back())< 0.0001) stab_neg = true; if (iters > 2 && (!negged||stab_neg) && fabs(pavg-pavg_list.back())< 0.0001) stab_pos = true; } //lsqr_list.push_back(least_sqr(p,pavg,pstdev,mavg,mstdev)); pavg_list.push_back(pavg); pstdev_list.push_back(pstdev); mavg_list.push_back(mavg); mstdev_list.push_back(mstdev); p_list.push_back(p); cout << "\nConverged in "<<iters << " iterations" << endl; if (!quiet){ ofstream out; out.open(path,ios::in|ios::trunc); out << "p(+),Average+,Stdev+,p(-),Average-,Stdev-"<<endl; for (unsigned int i = 0; i < iters+1; ++i){ out << p_list.at(i)<<","<<pavg_list.at(i)<<","<<pstdev_list.at(i)<<","<<1-p_list.at(i)<<","<<mavg_list.at(i)<<","<<mstdev_list.at(i)<<endl; } } // for (unsigned int i = 0; i < sec.size(); ++i){ // if (sec.at(i)->pF > cutoff) // sec.at(i)->good = true; // else // sec.at(i)->good = false; // evalCharge(sec.at(i)); // } final_p_avg = pavg; final_p_std = pstdev; }