📄 testfor.c
字号:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include "hmm.h"
#include "nrutil.h"
#include "forward.c"
#include "nrutil.c"
#include "hmmutils.c"
#include "hmmrand.c"
#include "sequence.c"
int getpid()
{
return 1;
}
int main (int argc, char **argv)
{
int t, T;
HMM hmm;
int *O;
double **alpha;
double *scale;
double proba, logproba;
FILE *fp;
if (argc != 3) {
printf("Usage error \n");
printf("Usage: testfor <model.hmm> <obs.seq> \n");
exit (1);
}
fp = fopen(argv[1], "r");
if (fp == NULL) {
fprintf(stderr, "Error: File %s not found\n", argv[1]);
exit (1);
}
ReadHMM(fp, &hmm);
fclose(fp);
fp = fopen(argv[2], "r");
if (fp == NULL) {
fprintf(stderr, "Error: File %s not found\n", argv[2]);
exit (1);
}
ReadSequence(fp, &T, &O);
fclose(fp);
alpha = dmatrix(1, T, 1, hmm.N);
scale = dvector(1, T);
printf("------------------------------------\n");
printf("Forward without scaling \n");
Forward(&hmm, T, O, alpha, &proba);
fprintf(stdout, "log prob(O| model) = %E\n",log(proba));
printf("------------------------------------\n");
printf("Forward with scaling \n");
ForwardWithScale(&hmm, T, O, alpha, scale, &logproba);
fprintf(stdout, "log prob(O| model) = %E\n", logproba);
printf("------------------------------------\n");
printf("The two log probabilites should identical \n");
printf("(within numerical precision). When observation\n");
printf("sequence is very large, use scaling. \n");
free_ivector(O, 1, T);
free_dmatrix(alpha, 1, T, 1, hmm.N);
free_dvector(scale, 1, T);
FreeHMM(&hmm);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -