Path: blob/master/tools/sdk-tools/tabledesign/codebook.c
7861 views
#include <stdlib.h>1#include "tabledesign.h"23void split(double **table, double *delta, int order, int npredictors, double scale)4{5int i, j;67for (i = 0; i < npredictors; i++)8{9for (j = 0; j <= order; j++)10{11table[i + npredictors][j] = table[i][j] + delta[j] * scale;12}13}14}1516void refine(double **table, int order, int npredictors, double **data, int dataSize, int refineIters, UNUSED double unused)17{18int iter; // spD819double **rsums;20int *counts; // spD021double *temp_s7;22double dist;23double dummy; // spC024double bestValue;25int bestIndex;26int i, j;2728rsums = malloc(npredictors * sizeof(double*));29for (i = 0; i < npredictors; i++)30{31rsums[i] = malloc((order + 1) * sizeof(double));32}3334counts = malloc(npredictors * sizeof(int));35temp_s7 = malloc((order + 1) * sizeof(double));3637for (iter = 0; iter < refineIters; iter++)38{39for (i = 0; i < npredictors; i++)40{41counts[i] = 0;42for (j = 0; j <= order; j++)43{44rsums[i][j] = 0.0;45}46}4748for (i = 0; i < dataSize; i++)49{50bestValue = 1e30;51bestIndex = 0;5253for (j = 0; j < npredictors; j++)54{55dist = model_dist(table[j], data[i], order);56if (dist < bestValue)57{58bestValue = dist;59bestIndex = j;60}61}6263counts[bestIndex]++;64rfroma(data[i], order, temp_s7);65for (j = 0; j <= order; j++)66{67rsums[bestIndex][j] += temp_s7[j];68}69}7071for (i = 0; i < npredictors; i++)72{73if (counts[i] > 0)74{75for (j = 0; j <= order; j++)76{77rsums[i][j] /= counts[i];78}79}80}8182for (i = 0; i < npredictors; i++)83{84durbin(rsums[i], order, temp_s7, table[i], &dummy);8586for (j = 1; j <= order; j++)87{88if (temp_s7[j] >= 1.0) temp_s7[j] = 0.9999999999;89if (temp_s7[j] <= -1.0) temp_s7[j] = -0.9999999999;90}9192afromk(temp_s7, table[i], order);93}94}9596free(counts);97for (i = 0; i < npredictors; i++)98{99free(rsums[i]);100}101free(rsums);102free(temp_s7);103}104105106