?? 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 + -