version 1.3, 2013/02/20 01:06:37 |
version 1.6, 2013/03/07 03:00:43 |
|
|
/* |
/* |
$OpenXM: OpenXM/src/hgm/mh/src/code-n.c,v 1.2 2013/02/19 08:03:14 takayama Exp $ |
$OpenXM: OpenXM/src/hgm/mh/src/code-n.c,v 1.5 2013/03/05 05:26:07 takayama Exp $ |
License: LGPL |
License: LGPL |
Ref: Copied from this11/misc-2011/A1/wishart/Prog |
Ref: Copied from this11/misc-2011/A1/wishart/Prog |
cf. @s/2011/12/01-my-note-code-n.pdf |
cf. @s/2011/12/01-my-note-code-n.pdf |
Line 7 cf. @s/2011/12/01-my-note-code-n.pdf |
|
Line 7 cf. @s/2011/12/01-my-note-code-n.pdf |
|
#include <stdio.h> |
#include <stdio.h> |
#include <stdlib.h> |
#include <stdlib.h> |
#include <math.h> |
#include <math.h> |
|
#include "sfile.h" |
|
|
static void error_code(char *s); |
static void error_code(char *s); |
static void showf(char *s,double *v,int m); |
static void showf(char *s,double *v,int m); |
Line 60 void mh_rf(double x, double *f, int rank_not_used, dou |
|
Line 61 void mh_rf(double x, double *f, int rank_not_used, dou |
|
/* double f2[MH_M][MH_RANK];*/ |
/* double f2[MH_M][MH_RANK];*/ |
static double *f2=NULL; |
static double *f2=NULL; |
|
|
|
mh_check_intr(100); |
if (MH_deallocate && initialized) { |
if (MH_deallocate && initialized) { |
if (b) mh_free(b); |
if (b) mh_free(b); |
if (bitSize) mh_free(bitSize); |
if (bitSize) mh_free(bitSize); |
if (invbitSize) mh_free(invbitSize); |
if (invbitSize) mh_free(invbitSize); |
if (f2) mh_free(f2); |
if (f2) mh_free(f2); |
if (yik) mh_free(yik); |
if (yik) mh_free(yik); |
if (yik2) mh_free(yik2); |
if (yik2) mh_free(yik2); |
if (y) mh_free(y); |
if (y) mh_free(y); |
b = f2 = yik = yik2 = y = NULL; |
b = f2 = yik = yik2 = y = NULL; |
bitSize = invbitSize = NULL; |
bitSize = invbitSize = NULL; |
initialized = 0; return; |
initialized = 0; return; |
} |
} |
if (!initialized) { |
if (!initialized) { |
b = (double *)mh_malloc(sizeof(double)*MH_M); |
b = (double *)mh_malloc(sizeof(double)*MH_M); |
Line 96 void mh_rf(double x, double *f, int rank_not_used, dou |
|
Line 98 void mh_rf(double x, double *f, int rank_not_used, dou |
|
for (i=0; i<MH_RANK; i++) bitSize[i] = bitcount(i); |
for (i=0; i<MH_RANK; i++) bitSize[i] = bitcount(i); |
for (i=0, k=0; i<=MH_M; i++) { |
for (i=0, k=0; i<=MH_M; i++) { |
for (j=0; j<MH_RANK; j++) { |
for (j=0; j<MH_RANK; j++) { |
if (bitSize[j] == i) {invbitSize[k] = j; k++; } |
if (bitSize[j] == i) {invbitSize[k] = j; k++; } |
} |
} |
} |
} |
initialized = 1; |
initialized = 1; |
Line 107 void mh_rf(double x, double *f, int rank_not_used, dou |
|
Line 109 void mh_rf(double x, double *f, int rank_not_used, dou |
|
for (i=0; i<MH_M; i++) { |
for (i=0; i<MH_M; i++) { |
for (k=0; k<MH_M; k++) { |
for (k=0; k<MH_M; k++) { |
if (i != k) { |
if (i != k) { |
yik[idxM(i,k)] = y[k]/(y[i]-y[k]); |
yik[idxM(i,k)] = y[k]/(y[i]-y[k]); |
yik2[idxM(i,k)] = y[i]/((y[i]-y[k])*(y[i]-y[k])); |
yik2[idxM(i,k)] = y[i]/((y[i]-y[k])*(y[i]-y[k])); |
} |
} |
} |
} |
} |
} |
Line 122 void mh_rf(double x, double *f, int rank_not_used, dou |
|
Line 124 void mh_rf(double x, double *f, int rank_not_used, dou |
|
f2[idxRank(i,0)] = -((c-y[i])*f[join(i,0)]-a*f[0]); |
f2[idxRank(i,0)] = -((c-y[i])*f[join(i,0)]-a*f[0]); |
for (k=0; k<MH_M; k++) { |
for (k=0; k<MH_M; k++) { |
if (i!=k) { |
if (i!=k) { |
f2[idxRank(i,0)] += -0.5*yik[idxM(i,k)]*(f[join(i,0)]-f[join(k,0)]); |
f2[idxRank(i,0)] += -0.5*yik[idxM(i,k)]*(f[join(i,0)]-f[join(k,0)]); |
} |
} |
} |
} |
f2[idxRank(i,0)] = f2[idxRank(i,0)]/y[i]; |
f2[idxRank(i,0)] = f2[idxRank(i,0)]/y[i]; |
Line 134 void mh_rf(double x, double *f, int rank_not_used, dou |
|
Line 136 void mh_rf(double x, double *f, int rank_not_used, dou |
|
ii = join(i,jj); |
ii = join(i,jj); |
rijj = -( (c-y[i])*f[ii]-a*f[jj] ); |
rijj = -( (c-y[i])*f[ii]-a*f[jj] ); |
for (k=0; k<MH_M; k++) { |
for (k=0; k<MH_M; k++) { |
if (!member(k,ii)) rijj += -(0.5)*yik[idxM(i,k)]*(f[ii]-f[join(k,jj)]); |
if (!member(k,ii)) rijj += -(0.5)*yik[idxM(i,k)]*(f[ii]-f[join(k,jj)]); |
if (member(k,jj)) { |
if (member(k,jj)) { |
rijj += -(0.5)*yik[idxM(i,k)]*f[ii]; |
rijj += -(0.5)*yik[idxM(i,k)]*f[ii]; |
rijj += -(0.5)*yik2[idxM(i,k)]*(f[join(i,delete(k,jj))]-f[jj]); |
rijj += -(0.5)*yik2[idxM(i,k)]*(f[join(i,delete(k,jj))]-f[jj]); |
} |
} |
} |
} |
f2[idxRank(i,jj)] = rijj; |
f2[idxRank(i,jj)] = rijj; |
for (k = 0; k<MH_M; k++) { |
for (k = 0; k<MH_M; k++) { |
if (member(k,jj)) { |
if (member(k,jj)) { |
f2[idxRank(i,jj)] += (0.5)*yik[idxM(i,k)]*f2[idxRank(k,delete(k,jj))]; |
f2[idxRank(i,jj)] += (0.5)*yik[idxM(i,k)]*f2[idxRank(k,delete(k,jj))]; |
} |
} |
} |
} |
f2[idxRank(i,jj)] = f2[idxRank(i,jj)]/y[i]; |
f2[idxRank(i,jj)] = f2[idxRank(i,jj)]/y[i]; |
} |
} |
Line 155 void mh_rf(double x, double *f, int rank_not_used, dou |
|
Line 157 void mh_rf(double x, double *f, int rank_not_used, dou |
|
val[jj] = 0; |
val[jj] = 0; |
for (i=0; i<MH_M; i++) { |
for (i=0; i<MH_M; i++) { |
if (member(i,jj)) { |
if (member(i,jj)) { |
val[jj] += b[i]*f2[idxRank(i,delete(i,jj))]; |
val[jj] += b[i]*f2[idxRank(i,delete(i,jj))]; |
}else{ |
}else{ |
val[jj] += b[i]*f[join(i,jj)]; |
val[jj] += b[i]*f[join(i,jj)]; |
} |
} |
} |
} |
} |
} |
Line 203 showf2(char *s,double *v,int m,int n) { |
|
Line 205 showf2(char *s,double *v,int m,int n) { |
|
} |
} |
printf("\n"); |
printf("\n"); |
printf("member(0,0)=%d, member(0,1)=%d, member(0,2)=%d,member(0,3)=%d\n", |
printf("member(0,0)=%d, member(0,1)=%d, member(0,2)=%d,member(0,3)=%d\n", |
member(0,0),member(0,1),member(0,2),member(0,3)); |
member(0,0),member(0,1),member(0,2),member(0,3)); |
} |
} |
|
|