📄 main.cpp
字号:
/******************************************************************************
**函数名称:BaumWelch
**功能:BaumWelch算法
**参数:phmm:HMM模型指针
** T:观察序列长度
** O:观察序列
** alpha,beta,gamma,pniter均为中间变量
** plogprobinit:初始概率
** plogprobfinal最终概率
**/
/* void BaumWelch(HMM *phmm, int T, int *O, double **alpha, double **beta,
double **gamma, int *pniter,
double *plogprobinit, double *plogprobfinal)*/
#include"iostream.h"
#include"stdio.h"
#include"hmm.h"
#include"nrutil.h"
#include"STDAFX.h"
#include"math.h"
int main()
{
HMM *phmm;
phmm=new HMM;
int N=10;
int M=20;
int seed=10;
int i,j,k;
int T=M;
InitHMM( phmm, N, M, seed);
printf("A=\n");
for(i=1;i <= phmm->N; i++)
{
for(j=1;j<=phmm->N;j++)
{
printf("%f\t",phmm->A[i][j]);
}
printf("\n");
}
printf("B=\n");
for(j=1;j<=phmm->N;j++)
{
for(k=1;k<=phmm->M;k++)
{
printf("%f\t",phmm->B[j][k]);
}
printf("\n");
}
printf("pi=\n");
for(i=1;i<=phmm->N;i++)
{
printf("pi[i]=0.1\t"); //输出初始概率值
}
printf("\n");
/**/
int *O;
O=ivector(1,T);
double **al;
al=(double **) dmatrix(0, M,0, N);
/* for(i=0;i<=M;i++)
{
for(j=0;j<=N;j++)
{
printf("%f\t",al[i][j]);
}
printf("\n");
}
n
*/
// int a;
double **be;
be=(double **) dmatrix(1, M,1, N);
double **ga;
ga=(double **) dmatrix(1, M,1, N);
int pniter[5]={0};
double plogprobinit;
// plogprobinit=0.5;
double plogprobfinal;
BaumWelch(phmm, T, O, al, be,ga,pniter, &plogprobinit, &plogprobfinal);
// double pow(double x,double y)
cout<<plogprobfinal<<"\n"<<endl;
//printf("%f\n",plogprobfinal);
for(i=1;i<T+1;i++)
cout<<O[i]<<" ";
plogprobfinal=pow(10,plogprobfinal);
// a=pow(10,0);
// printf("%f\t",plogprobfinal);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -