{"id":116324,"date":"2026-10-21T07:25:16","date_gmt":"2026-10-20T23:25:16","guid":{"rendered":"https:\/\/www.wsisp.com\/helps\/116324.html"},"modified":"2026-10-21T07:25:16","modified_gmt":"2026-10-20T23:25:16","slug":"c%e4%bb%a3%e7%a0%81%e5%ae%9e%e7%8e%b0matlab%e4%b8%ad%e7%9a%84hdphmm%e5%87%bd%e6%95%b0%e5%8a%9f%e8%83%bd","status":"publish","type":"post","link":"https:\/\/www.wsisp.com\/helps\/116324.html","title":{"rendered":"C++\u4ee3\u7801\u5b9e\u73b0MATLAB\u4e2d\u7684hdphmm\u51fd\u6570\u529f\u80fd"},"content":{"rendered":"<p>                    <span class=\"token comment\">\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token comment\">\/\/ HDP-HMM with Sticky Transitions (Fox et al., 2011)<\/span><br \/>\n<span class=\"token comment\">\/\/ \u5b8c\u5168\u81ea\u5305\u542b (\u4ec5\u4f9d\u8d56 C&#043;&#043; \u6807\u51c6\u5e93, \u65e0\u7b2c\u4e09\u65b9\u4f9d\u8d56)<\/span><br \/>\n<span class=\"token comment\">\/\/ \u7f16\u8bd1: g&#043;&#043; -std&#061;c&#043;&#043;14 -O2 HDPHMM.cpp -o hdpmm_demo<\/span><br \/>\n<span class=\"token comment\">\/\/ \u8fd0\u884c: .\/hdpmm_demo<\/span><br \/>\n<span class=\"token comment\">\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<\/span><\/p>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;vector&gt;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;cmath&gt;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;random&gt;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;algorithm&gt;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;iostream&gt;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;iomanip&gt;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;limits&gt;<\/span><\/span><\/p>\n<p><span class=\"token comment\">\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token comment\">\/\/ \u7b80\u6613\u77e9\u9635\u7c7b (\u66ff\u4ee3 Eigen)<\/span><br \/>\n<span class=\"token comment\">\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token keyword\">class<\/span> <span class=\"token class-name\">Matrix<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n<span class=\"token keyword\">public<\/span><span class=\"token operator\">:<\/span><br \/>\n    <span class=\"token keyword\">int<\/span> rows<span class=\"token punctuation\">,<\/span> cols<span class=\"token punctuation\">;<\/span><br \/>\n    std<span class=\"token double-colon punctuation\">::<\/span>vector<span class=\"token operator\">&lt;<\/span><span class=\"token keyword\">double<\/span><span class=\"token operator\">&gt;<\/span> data<span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token function\">Matrix<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">:<\/span> <span class=\"token function\">rows<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token function\">cols<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token function\">Matrix<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> r<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">int<\/span> c<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">double<\/span> init <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0.0<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token operator\">:<\/span> <span class=\"token function\">rows<\/span><span class=\"token punctuation\">(<\/span>r<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token function\">cols<\/span><span class=\"token punctuation\">(<\/span>c<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token function\">data<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span>size_t<span class=\"token punctuation\">)<\/span>r <span class=\"token operator\">*<\/span> c<span class=\"token punctuation\">,<\/span> init<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token keyword\">double<\/span><span class=\"token operator\">&amp;<\/span> <span class=\"token keyword\">operator<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">int<\/span> j<span class=\"token punctuation\">)<\/span>       <span class=\"token punctuation\">{<\/span> <span class=\"token keyword\">return<\/span> data<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">(<\/span>size_t<span class=\"token punctuation\">)<\/span>i <span class=\"token operator\">*<\/span> cols <span class=\"token operator\">&#043;<\/span> j<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token keyword\">double<\/span>  <span class=\"token keyword\">operator<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">int<\/span> j<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">const<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token keyword\">return<\/span> data<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">(<\/span>size_t<span class=\"token punctuation\">)<\/span>i <span class=\"token operator\">*<\/span> cols <span class=\"token operator\">&#043;<\/span> j<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token keyword\">static<\/span> Matrix <span class=\"token function\">Zero<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> r<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">int<\/span> c<span class=\"token punctuation\">)<\/span>               <span class=\"token punctuation\">{<\/span> <span class=\"token keyword\">return<\/span> <span class=\"token function\">Matrix<\/span><span class=\"token punctuation\">(<\/span>r<span class=\"token punctuation\">,<\/span> c<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token keyword\">static<\/span> Matrix <span class=\"token function\">Ones<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> r<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">int<\/span> c<span class=\"token punctuation\">)<\/span>               <span class=\"token punctuation\">{<\/span> <span class=\"token keyword\">return<\/span> <span class=\"token function\">Matrix<\/span><span class=\"token punctuation\">(<\/span>r<span class=\"token punctuation\">,<\/span> c<span class=\"token punctuation\">,<\/span> <span class=\"token number\">1.0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token keyword\">static<\/span> Matrix <span class=\"token function\">Constant<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> r<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">int<\/span> c<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">double<\/span> v<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token keyword\">return<\/span> <span class=\"token function\">Matrix<\/span><span class=\"token punctuation\">(<\/span>r<span class=\"token punctuation\">,<\/span> c<span class=\"token punctuation\">,<\/span> v<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token keyword\">static<\/span> Matrix <span class=\"token function\">Identity<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> n<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        Matrix <span class=\"token function\">I<\/span><span class=\"token punctuation\">(<\/span>n<span class=\"token punctuation\">,<\/span> n<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> i <span class=\"token operator\">&lt;<\/span> n<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>i<span class=\"token punctuation\">)<\/span> <span class=\"token function\">I<\/span><span class=\"token punctuation\">(<\/span>i<span class=\"token punctuation\">,<\/span> i<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">1.0<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> I<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    Matrix <span class=\"token function\">transpose<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">const<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        Matrix <span class=\"token function\">R<\/span><span class=\"token punctuation\">(<\/span>cols<span class=\"token punctuation\">,<\/span> rows<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> i <span class=\"token operator\">&lt;<\/span> rows<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>i<span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> j <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> j <span class=\"token operator\">&lt;<\/span> cols<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>j<span class=\"token punctuation\">)<\/span><br \/>\n                <span class=\"token function\">R<\/span><span class=\"token punctuation\">(<\/span>j<span class=\"token punctuation\">,<\/span> i<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">*<\/span><span class=\"token keyword\">this<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">(<\/span>i<span class=\"token punctuation\">,<\/span> j<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> R<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    Matrix <span class=\"token keyword\">operator<\/span><span class=\"token operator\">*<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> Matrix<span class=\"token operator\">&amp;<\/span> B<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">const<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        Matrix <span class=\"token function\">R<\/span><span class=\"token punctuation\">(<\/span>rows<span class=\"token punctuation\">,<\/span> B<span class=\"token punctuation\">.<\/span>cols<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> i <span class=\"token operator\">&lt;<\/span> rows<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>i<span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> k <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> k <span class=\"token operator\">&lt;<\/span> cols<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>k<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n                <span class=\"token keyword\">double<\/span> a <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">*<\/span><span class=\"token keyword\">this<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">(<\/span>i<span class=\"token punctuation\">,<\/span> k<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>a <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">0.0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">continue<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> j <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> j <span class=\"token operator\">&lt;<\/span> B<span class=\"token punctuation\">.<\/span>cols<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>j<span class=\"token punctuation\">)<\/span><br \/>\n                    <span class=\"token function\">R<\/span><span class=\"token punctuation\">(<\/span>i<span class=\"token punctuation\">,<\/span> j<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;&#061;<\/span> a <span class=\"token operator\">*<\/span> <span class=\"token function\">B<\/span><span class=\"token punctuation\">(<\/span>k<span class=\"token punctuation\">,<\/span> j<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> R<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    Matrix <span class=\"token keyword\">operator<\/span><span class=\"token operator\">&#043;<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> Matrix<span class=\"token operator\">&amp;<\/span> B<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">const<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        Matrix <span class=\"token function\">R<\/span><span class=\"token punctuation\">(<\/span>rows<span class=\"token punctuation\">,<\/span> cols<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span>size_t i <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> i <span class=\"token operator\">&lt;<\/span> data<span class=\"token punctuation\">.<\/span><span class=\"token function\">size<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>i<span class=\"token punctuation\">)<\/span> R<span class=\"token punctuation\">.<\/span>data<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> data<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#043;<\/span> B<span class=\"token punctuation\">.<\/span>data<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> R<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n    Matrix <span class=\"token keyword\">operator<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> Matrix<span class=\"token operator\">&amp;<\/span> B<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">const<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        Matrix <span class=\"token function\">R<\/span><span class=\"token punctuation\">(<\/span>rows<span class=\"token punctuation\">,<\/span> cols<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span>size_t i <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> i <span class=\"token operator\">&lt;<\/span> data<span class=\"token punctuation\">.<\/span><span class=\"token function\">size<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>i<span class=\"token punctuation\">)<\/span> R<span class=\"token punctuation\">.<\/span>data<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> data<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#8211;<\/span> B<span class=\"token punctuation\">.<\/span>data<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> R<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n    Matrix <span class=\"token keyword\">operator<\/span><span class=\"token operator\">*<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">double<\/span> s<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">const<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        Matrix <span class=\"token function\">R<\/span><span class=\"token punctuation\">(<\/span>rows<span class=\"token punctuation\">,<\/span> cols<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span>size_t i <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> i <span class=\"token operator\">&lt;<\/span> data<span class=\"token punctuation\">.<\/span><span class=\"token function\">size<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>i<span class=\"token punctuation\">)<\/span> R<span class=\"token punctuation\">.<\/span>data<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> data<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">*<\/span> s<span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> R<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n    Matrix <span class=\"token keyword\">operator<\/span><span class=\"token operator\">\/<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">double<\/span> s<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">const<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token keyword\">return<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">*<\/span><span class=\"token keyword\">this<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">*<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token number\">1.0<\/span> <span class=\"token operator\">\/<\/span> s<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><br \/>\n    Matrix<span class=\"token operator\">&amp;<\/span> <span class=\"token keyword\">operator<\/span><span class=\"token operator\">&#043;&#061;<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> Matrix<span class=\"token operator\">&amp;<\/span> B<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span>size_t i <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> i <span class=\"token operator\">&lt;<\/span> data<span class=\"token punctuation\">.<\/span><span class=\"token function\">size<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>i<span class=\"token punctuation\">)<\/span> data<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#043;&#061;<\/span> B<span class=\"token punctuation\">.<\/span>data<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token operator\">*<\/span><span class=\"token keyword\">this<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n    Matrix<span class=\"token operator\">&amp;<\/span> <span class=\"token keyword\">operator<\/span><span class=\"token operator\">\/&#061;<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">double<\/span> s<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">double<\/span><span class=\"token operator\">&amp;<\/span> v <span class=\"token operator\">:<\/span> data<span class=\"token punctuation\">)<\/span> v <span class=\"token operator\">\/&#061;<\/span> s<span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token operator\">*<\/span><span class=\"token keyword\">this<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token keyword\">double<\/span> <span class=\"token function\">sum<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">const<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">double<\/span> s <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">double<\/span> v <span class=\"token operator\">:<\/span> data<span class=\"token punctuation\">)<\/span> s <span class=\"token operator\">&#043;&#061;<\/span> v<span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> s<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token keyword\">double<\/span> <span class=\"token function\">norm<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">const<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">double<\/span> s <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">double<\/span> v <span class=\"token operator\">:<\/span> data<span class=\"token punctuation\">)<\/span> s <span class=\"token operator\">&#043;&#061;<\/span> v <span class=\"token operator\">*<\/span> v<span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">sqrt<\/span><span class=\"token punctuation\">(<\/span>s<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ LU \u5206\u89e3\u6c42\u884c\u5217\u5f0f<\/span><br \/>\n    <span class=\"token keyword\">double<\/span> <span class=\"token function\">determinant<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">const<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">int<\/span> n <span class=\"token operator\">&#061;<\/span> rows<span class=\"token punctuation\">;<\/span><br \/>\n        Matrix M <span class=\"token operator\">&#061;<\/span> <span class=\"token operator\">*<\/span><span class=\"token keyword\">this<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">double<\/span> det <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">1.0<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> i <span class=\"token operator\">&lt;<\/span> n<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>i<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token keyword\">int<\/span> pivot <span class=\"token operator\">&#061;<\/span> i<span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> k <span class=\"token operator\">&#061;<\/span> i <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">;<\/span> k <span class=\"token operator\">&lt;<\/span> n<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>k<span class=\"token punctuation\">)<\/span><br \/>\n                <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">fabs<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">M<\/span><span class=\"token punctuation\">(<\/span>k<span class=\"token punctuation\">,<\/span> i<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&gt;<\/span> std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">fabs<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">M<\/span><span class=\"token punctuation\">(<\/span>pivot<span class=\"token punctuation\">,<\/span> i<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> pivot <span class=\"token operator\">&#061;<\/span> k<span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">fabs<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">M<\/span><span class=\"token punctuation\">(<\/span>pivot<span class=\"token punctuation\">,<\/span> i<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&lt;<\/span> <span class=\"token number\">1e-12<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">return<\/span> <span class=\"token number\">0.0<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>pivot <span class=\"token operator\">!&#061;<\/span> i<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n                <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> j <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> j <span class=\"token operator\">&lt;<\/span> n<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>j<span class=\"token punctuation\">)<\/span> std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">swap<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">M<\/span><span class=\"token punctuation\">(<\/span>i<span class=\"token punctuation\">,<\/span> j<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token function\">M<\/span><span class=\"token punctuation\">(<\/span>pivot<span class=\"token punctuation\">,<\/span> j<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                det <span class=\"token operator\">&#061;<\/span> <span class=\"token operator\">&#8211;<\/span>det<span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token punctuation\">}<\/span><br \/>\n            det <span class=\"token operator\">*&#061;<\/span> <span class=\"token function\">M<\/span><span class=\"token punctuation\">(<\/span>i<span class=\"token punctuation\">,<\/span> i<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> k <span class=\"token operator\">&#061;<\/span> i <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">;<\/span> k <span class=\"token operator\">&lt;<\/span> n<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>k<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n                <span class=\"token keyword\">double<\/span> f <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">M<\/span><span class=\"token punctuation\">(<\/span>k<span class=\"token punctuation\">,<\/span> i<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">\/<\/span> <span class=\"token function\">M<\/span><span class=\"token punctuation\">(<\/span>i<span class=\"token punctuation\">,<\/span> i<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> j <span class=\"token operator\">&#061;<\/span> i<span class=\"token punctuation\">;<\/span> j <span class=\"token operator\">&lt;<\/span> n<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>j<span class=\"token punctuation\">)<\/span> <span class=\"token function\">M<\/span><span class=\"token punctuation\">(<\/span>k<span class=\"token punctuation\">,<\/span> j<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">-&#061;<\/span> f <span class=\"token operator\">*<\/span> <span class=\"token function\">M<\/span><span class=\"token punctuation\">(<\/span>i<span class=\"token punctuation\">,<\/span> j<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> det<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u9ad8\u65af-\u7ea6\u65e6\u6d88\u5143\u6c42\u9006<\/span><br \/>\n    Matrix <span class=\"token function\">inverse<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">const<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">int<\/span> n <span class=\"token operator\">&#061;<\/span> rows<span class=\"token punctuation\">;<\/span><br \/>\n        Matrix M <span class=\"token operator\">&#061;<\/span> <span class=\"token operator\">*<\/span><span class=\"token keyword\">this<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        Matrix I <span class=\"token operator\">&#061;<\/span> <span class=\"token class-name\">Matrix<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Identity<\/span><span class=\"token punctuation\">(<\/span>n<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> i <span class=\"token operator\">&lt;<\/span> n<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>i<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token keyword\">int<\/span> pivot <span class=\"token operator\">&#061;<\/span> i<span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> k <span class=\"token operator\">&#061;<\/span> i <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">;<\/span> k <span class=\"token operator\">&lt;<\/span> n<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>k<span class=\"token punctuation\">)<\/span><br \/>\n                <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">fabs<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">M<\/span><span class=\"token punctuation\">(<\/span>k<span class=\"token punctuation\">,<\/span> i<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&gt;<\/span> std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">fabs<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">M<\/span><span class=\"token punctuation\">(<\/span>pivot<span class=\"token punctuation\">,<\/span> i<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> pivot <span class=\"token operator\">&#061;<\/span> k<span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>pivot <span class=\"token operator\">!&#061;<\/span> i<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n                <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> j <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> j <span class=\"token operator\">&lt;<\/span> n<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>j<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n                    std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">swap<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">M<\/span><span class=\"token punctuation\">(<\/span>i<span class=\"token punctuation\">,<\/span> j<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token function\">M<\/span><span class=\"token punctuation\">(<\/span>pivot<span class=\"token punctuation\">,<\/span> j<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                    std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">swap<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">I<\/span><span class=\"token punctuation\">(<\/span>i<span class=\"token punctuation\">,<\/span> j<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token function\">I<\/span><span class=\"token punctuation\">(<\/span>pivot<span class=\"token punctuation\">,<\/span> j<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                <span class=\"token punctuation\">}<\/span><br \/>\n            <span class=\"token punctuation\">}<\/span><br \/>\n            <span class=\"token keyword\">double<\/span> pv <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">M<\/span><span class=\"token punctuation\">(<\/span>i<span class=\"token punctuation\">,<\/span> i<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">fabs<\/span><span class=\"token punctuation\">(<\/span>pv<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&lt;<\/span> <span class=\"token number\">1e-300<\/span><span class=\"token punctuation\">)<\/span> pv <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">1e-300<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> j <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> j <span class=\"token operator\">&lt;<\/span> n<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>j<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token function\">M<\/span><span class=\"token punctuation\">(<\/span>i<span class=\"token punctuation\">,<\/span> j<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">\/&#061;<\/span> pv<span class=\"token punctuation\">;<\/span> <span class=\"token function\">I<\/span><span class=\"token punctuation\">(<\/span>i<span class=\"token punctuation\">,<\/span> j<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">\/&#061;<\/span> pv<span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><br \/>\n            <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> k <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> k <span class=\"token operator\">&lt;<\/span> n<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>k<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n                <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>k <span class=\"token operator\">&#061;&#061;<\/span> i<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">continue<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                <span class=\"token keyword\">double<\/span> f <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">M<\/span><span class=\"token punctuation\">(<\/span>k<span class=\"token punctuation\">,<\/span> i<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> j <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> j <span class=\"token operator\">&lt;<\/span> n<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>j<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n                    <span class=\"token function\">M<\/span><span class=\"token punctuation\">(<\/span>k<span class=\"token punctuation\">,<\/span> j<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">-&#061;<\/span> f <span class=\"token operator\">*<\/span> <span class=\"token function\">M<\/span><span class=\"token punctuation\">(<\/span>i<span class=\"token punctuation\">,<\/span> j<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                    <span class=\"token function\">I<\/span><span class=\"token punctuation\">(<\/span>k<span class=\"token punctuation\">,<\/span> j<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">-&#061;<\/span> f <span class=\"token operator\">*<\/span> <span class=\"token function\">I<\/span><span class=\"token punctuation\">(<\/span>i<span class=\"token punctuation\">,<\/span> j<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                <span class=\"token punctuation\">}<\/span><br \/>\n            <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> I<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ Cholesky: \u8fd4\u56de\u4e0b\u4e09\u89d2 L, \u6ee1\u8db3 L * L^T &#061; A<\/span><br \/>\n    Matrix <span class=\"token function\">cholesky<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">const<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">int<\/span> n <span class=\"token operator\">&#061;<\/span> rows<span class=\"token punctuation\">;<\/span><br \/>\n        Matrix <span class=\"token function\">Lm<\/span><span class=\"token punctuation\">(<\/span>n<span class=\"token punctuation\">,<\/span> n<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> i <span class=\"token operator\">&lt;<\/span> n<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>i<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> j <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> j <span class=\"token operator\">&lt;&#061;<\/span> i<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>j<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n                <span class=\"token keyword\">double<\/span> s <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">*<\/span><span class=\"token keyword\">this<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">(<\/span>i<span class=\"token punctuation\">,<\/span> j<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> k <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> k <span class=\"token operator\">&lt;<\/span> j<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>k<span class=\"token punctuation\">)<\/span> s <span class=\"token operator\">-&#061;<\/span> <span class=\"token function\">Lm<\/span><span class=\"token punctuation\">(<\/span>i<span class=\"token punctuation\">,<\/span> k<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">*<\/span> <span class=\"token function\">Lm<\/span><span class=\"token punctuation\">(<\/span>j<span class=\"token punctuation\">,<\/span> k<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>i <span class=\"token operator\">&#061;&#061;<\/span> j<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n                    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>s <span class=\"token operator\">&lt;<\/span> <span class=\"token number\">1e-12<\/span><span class=\"token punctuation\">)<\/span> s <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">1e-12<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                    <span class=\"token function\">Lm<\/span><span class=\"token punctuation\">(<\/span>i<span class=\"token punctuation\">,<\/span> j<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;<\/span> std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">sqrt<\/span><span class=\"token punctuation\">(<\/span>s<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n                    <span class=\"token function\">Lm<\/span><span class=\"token punctuation\">(<\/span>i<span class=\"token punctuation\">,<\/span> j<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;<\/span> s <span class=\"token operator\">\/<\/span> <span class=\"token function\">Lm<\/span><span class=\"token punctuation\">(<\/span>j<span class=\"token punctuation\">,<\/span> j<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                <span class=\"token punctuation\">}<\/span><br \/>\n            <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> Lm<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u53d6\u7b2c i \u884c (1 x cols)<\/span><br \/>\n    Matrix <span class=\"token function\">row<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">const<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        Matrix <span class=\"token function\">R<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> cols<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> j <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> j <span class=\"token operator\">&lt;<\/span> cols<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>j<span class=\"token punctuation\">)<\/span> <span class=\"token function\">R<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> j<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">*<\/span><span class=\"token keyword\">this<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">(<\/span>i<span class=\"token punctuation\">,<\/span> j<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> R<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">inline<\/span> Matrix <span class=\"token keyword\">operator<\/span><span class=\"token operator\">*<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">double<\/span> s<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">const<\/span> Matrix<span class=\"token operator\">&amp;<\/span> M<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token keyword\">return<\/span> M <span class=\"token operator\">*<\/span> s<span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\">\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token comment\">\/\/ HDP-HMM \u7c7b (Sticky HDP-HMM, Fox et al. 2011)<\/span><br \/>\n<span class=\"token comment\">\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token keyword\">class<\/span> <span class=\"token class-name\">HDPHMM<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n<span class=\"token keyword\">public<\/span><span class=\"token operator\">:<\/span><br \/>\n    <span class=\"token keyword\">double<\/span> alpha<span class=\"token punctuation\">,<\/span> gamma<span class=\"token punctuation\">,<\/span> kappa<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">int<\/span> L<span class=\"token punctuation\">;<\/span><\/p>\n<p>    Matrix beta<span class=\"token punctuation\">;<\/span>                <span class=\"token comment\">\/\/ L x 1   \u5168\u5c40\u8f6c\u79fb\u57fa\u5206\u5e03<\/span><br \/>\n    Matrix A<span class=\"token punctuation\">;<\/span>                   <span class=\"token comment\">\/\/ L x L   \u8f6c\u79fb\u77e9\u9635<\/span><br \/>\n    std<span class=\"token double-colon punctuation\">::<\/span>vector<span class=\"token operator\">&lt;<\/span>Matrix<span class=\"token operator\">&gt;<\/span> theta<span class=\"token punctuation\">;<\/span>  <span class=\"token comment\">\/\/ \u6bcf\u4e2a D x 1<\/span><br \/>\n    std<span class=\"token double-colon punctuation\">::<\/span>vector<span class=\"token operator\">&lt;<\/span>Matrix<span class=\"token operator\">&gt;<\/span> Sigma<span class=\"token punctuation\">;<\/span>  <span class=\"token comment\">\/\/ \u6bcf\u4e2a D x D<\/span><\/p>\n<p>    Matrix observations<span class=\"token punctuation\">;<\/span>        <span class=\"token comment\">\/\/ T x D<\/span><br \/>\n    <span class=\"token keyword\">int<\/span> T<span class=\"token punctuation\">,<\/span> D<span class=\"token punctuation\">;<\/span><br \/>\n    std<span class=\"token double-colon punctuation\">::<\/span>vector<span class=\"token operator\">&lt;<\/span><span class=\"token keyword\">int<\/span><span class=\"token operator\">&gt;<\/span> z<span class=\"token punctuation\">;<\/span><\/p>\n<p>    Matrix Nmat<span class=\"token punctuation\">;<\/span>                <span class=\"token comment\">\/\/ L x L<\/span><br \/>\n    Matrix Ni<span class=\"token punctuation\">;<\/span>                  <span class=\"token comment\">\/\/ L x 1<\/span><\/p>\n<p>    std<span class=\"token double-colon punctuation\">::<\/span>mt19937 rng<span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token function\">HDPHMM<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> L_<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">double<\/span> a_<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">double<\/span> g_<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">double<\/span> k_<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">unsigned<\/span> seed <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">42u<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token operator\">:<\/span> <span class=\"token function\">alpha<\/span><span class=\"token punctuation\">(<\/span>a_<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token function\">gamma<\/span><span class=\"token punctuation\">(<\/span>g_<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token function\">kappa<\/span><span class=\"token punctuation\">(<\/span>k_<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token function\">L<\/span><span class=\"token punctuation\">(<\/span>L_<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token function\">rng<\/span><span class=\"token punctuation\">(<\/span>seed<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token keyword\">void<\/span> <span class=\"token function\">initialize<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> Matrix<span class=\"token operator\">&amp;<\/span> data<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        observations <span class=\"token operator\">&#061;<\/span> data<span class=\"token punctuation\">;<\/span><br \/>\n        T <span class=\"token operator\">&#061;<\/span> data<span class=\"token punctuation\">.<\/span>rows<span class=\"token punctuation\">;<\/span><br \/>\n        D <span class=\"token operator\">&#061;<\/span> data<span class=\"token punctuation\">.<\/span>cols<span class=\"token punctuation\">;<\/span><\/p>\n<p>        z<span class=\"token punctuation\">.<\/span><span class=\"token function\">resize<\/span><span class=\"token punctuation\">(<\/span>T<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        std<span class=\"token double-colon punctuation\">::<\/span>uniform_int_distribution<span class=\"token operator\">&lt;<\/span><span class=\"token keyword\">int<\/span><span class=\"token operator\">&gt;<\/span> <span class=\"token function\">dist<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> L <span class=\"token operator\">&#8211;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> t <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> t <span class=\"token operator\">&lt;<\/span> T<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>t<span class=\"token punctuation\">)<\/span> z<span class=\"token punctuation\">[<\/span>t<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">dist<\/span><span class=\"token punctuation\">(<\/span>rng<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        beta <span class=\"token operator\">&#061;<\/span> <span class=\"token class-name\">Matrix<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Constant<\/span><span class=\"token punctuation\">(<\/span>L<span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1.0<\/span> <span class=\"token operator\">\/<\/span> L<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        A    <span class=\"token operator\">&#061;<\/span> <span class=\"token class-name\">Matrix<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Constant<\/span><span class=\"token punctuation\">(<\/span>L<span class=\"token punctuation\">,<\/span> L<span class=\"token punctuation\">,<\/span> <span class=\"token number\">1.0<\/span> <span class=\"token operator\">\/<\/span> L<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        Nmat <span class=\"token operator\">&#061;<\/span> <span class=\"token class-name\">Matrix<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Zero<\/span><span class=\"token punctuation\">(<\/span>L<span class=\"token punctuation\">,<\/span> L<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        Ni   <span class=\"token operator\">&#061;<\/span> <span class=\"token class-name\">Matrix<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Zero<\/span><span class=\"token punctuation\">(<\/span>L<span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        theta<span class=\"token punctuation\">.<\/span><span class=\"token function\">resize<\/span><span class=\"token punctuation\">(<\/span>L<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        Sigma<span class=\"token punctuation\">.<\/span><span class=\"token function\">resize<\/span><span class=\"token punctuation\">(<\/span>L<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> k <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> k <span class=\"token operator\">&lt;<\/span> L<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>k<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            theta<span class=\"token punctuation\">[<\/span>k<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token class-name\">Matrix<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Zero<\/span><span class=\"token punctuation\">(<\/span>D<span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            Sigma<span class=\"token punctuation\">[<\/span>k<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token class-name\">Matrix<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Identity<\/span><span class=\"token punctuation\">(<\/span>D<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token function\">updateCounts<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token keyword\">void<\/span> <span class=\"token function\">updateCounts<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        Nmat <span class=\"token operator\">&#061;<\/span> <span class=\"token class-name\">Matrix<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Zero<\/span><span class=\"token punctuation\">(<\/span>L<span class=\"token punctuation\">,<\/span> L<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        Ni   <span class=\"token operator\">&#061;<\/span> <span class=\"token class-name\">Matrix<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Zero<\/span><span class=\"token punctuation\">(<\/span>L<span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> t <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> t <span class=\"token operator\">&lt;<\/span> T <span class=\"token operator\">&#8211;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>t<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token keyword\">int<\/span> i <span class=\"token operator\">&#061;<\/span> z<span class=\"token punctuation\">[<\/span>t<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> j <span class=\"token operator\">&#061;<\/span> z<span class=\"token punctuation\">[<\/span>t <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token function\">Nmat<\/span><span class=\"token punctuation\">(<\/span>i<span class=\"token punctuation\">,<\/span> j<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;&#061;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token function\">Ni<\/span><span class=\"token punctuation\">(<\/span>i<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span>   <span class=\"token operator\">&#043;&#061;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ &#8212;&#8211; \u91c7\u6837\u8f6c\u79fb\u77e9\u9635 A \u548c\u5168\u5c40 beta &#8212;&#8211;<\/span><br \/>\n    <span class=\"token keyword\">void<\/span> <span class=\"token function\">sampleTransitions<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        std<span class=\"token double-colon punctuation\">::<\/span>vector<span class=\"token operator\">&lt;<\/span>std<span class=\"token double-colon punctuation\">::<\/span>vector<span class=\"token operator\">&lt;<\/span><span class=\"token keyword\">int<\/span><span class=\"token operator\">&gt;&gt;<\/span> <span class=\"token function\">m<\/span><span class=\"token punctuation\">(<\/span>L<span class=\"token punctuation\">,<\/span> std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token generic-function\"><span class=\"token function\">vector<\/span><span class=\"token generic class-name\"><span class=\"token operator\">&lt;<\/span><span class=\"token keyword\">int<\/span><span class=\"token operator\">&gt;<\/span><\/span><\/span><span class=\"token punctuation\">(<\/span>L<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        std<span class=\"token double-colon punctuation\">::<\/span>uniform_real_distribution<span class=\"token operator\">&lt;<\/span><span class=\"token keyword\">double<\/span><span class=\"token operator\">&gt;<\/span> <span class=\"token function\">u01<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> i <span class=\"token operator\">&lt;<\/span> L<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>i<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> j <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> j <span class=\"token operator\">&lt;<\/span> L<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>j<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n                <span class=\"token keyword\">double<\/span> p <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">Nmat<\/span><span class=\"token punctuation\">(<\/span>i<span class=\"token punctuation\">,<\/span> j<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">*<\/span> <span class=\"token function\">beta<\/span><span class=\"token punctuation\">(<\/span>j<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">\/<\/span><br \/>\n                           <span class=\"token punctuation\">(<\/span><span class=\"token function\">Nmat<\/span><span class=\"token punctuation\">(<\/span>i<span class=\"token punctuation\">,<\/span> j<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span> alpha <span class=\"token operator\">*<\/span> <span class=\"token function\">beta<\/span><span class=\"token punctuation\">(<\/span>j<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                            <span class=\"token operator\">&#043;<\/span> <span class=\"token punctuation\">(<\/span>i <span class=\"token operator\">&#061;&#061;<\/span> j <span class=\"token operator\">?<\/span> kappa <span class=\"token operator\">:<\/span> <span class=\"token number\">0.0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">1e-300<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">u01<\/span><span class=\"token punctuation\">(<\/span>rng<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&lt;<\/span> p<span class=\"token punctuation\">)<\/span> m<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span>j<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><\/p>\n<p>        Matrix <span class=\"token function\">beta_post<\/span><span class=\"token punctuation\">(<\/span>L<span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> gamma <span class=\"token operator\">\/<\/span> L<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> j <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> j <span class=\"token operator\">&lt;<\/span> L<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>j<span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> i <span class=\"token operator\">&lt;<\/span> L<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>i<span class=\"token punctuation\">)<\/span><br \/>\n                <span class=\"token function\">beta_post<\/span><span class=\"token punctuation\">(<\/span>j<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;&#061;<\/span> m<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span>j<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        beta <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">sampleDirichlet<\/span><span class=\"token punctuation\">(<\/span>beta_post<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> i <span class=\"token operator\">&lt;<\/span> L<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>i<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            Matrix <span class=\"token function\">alpha_post<\/span><span class=\"token punctuation\">(<\/span>L<span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> j <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> j <span class=\"token operator\">&lt;<\/span> L<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>j<span class=\"token punctuation\">)<\/span><br \/>\n                <span class=\"token function\">alpha_post<\/span><span class=\"token punctuation\">(<\/span>j<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;<\/span> alpha <span class=\"token operator\">*<\/span> <span class=\"token function\">beta<\/span><span class=\"token punctuation\">(<\/span>j<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token function\">alpha_post<\/span><span class=\"token punctuation\">(<\/span>i<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;&#061;<\/span> kappa<span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> j <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> j <span class=\"token operator\">&lt;<\/span> L<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>j<span class=\"token punctuation\">)<\/span><br \/>\n                <span class=\"token function\">alpha_post<\/span><span class=\"token punctuation\">(<\/span>j<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;&#061;<\/span> <span class=\"token function\">Nmat<\/span><span class=\"token punctuation\">(<\/span>i<span class=\"token punctuation\">,<\/span> j<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>            Matrix row_probs <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">sampleDirichlet<\/span><span class=\"token punctuation\">(<\/span>alpha_post<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> j <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> j <span class=\"token operator\">&lt;<\/span> L<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>j<span class=\"token punctuation\">)<\/span><br \/>\n                <span class=\"token function\">A<\/span><span class=\"token punctuation\">(<\/span>i<span class=\"token punctuation\">,<\/span> j<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">row_probs<\/span><span class=\"token punctuation\">(<\/span>j<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ &#8212;&#8211; \u524d\u5411-\u540e\u5411\u91c7\u6837\u9690\u72b6\u6001 &#8212;&#8211;<\/span><br \/>\n    <span class=\"token keyword\">void<\/span> <span class=\"token function\">sampleStates<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        Matrix <span class=\"token function\">logLik<\/span><span class=\"token punctuation\">(<\/span>T<span class=\"token punctuation\">,<\/span> L<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> t <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> t <span class=\"token operator\">&lt;<\/span> T<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>t<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            Matrix xrow <span class=\"token operator\">&#061;<\/span> observations<span class=\"token punctuation\">.<\/span><span class=\"token function\">row<\/span><span class=\"token punctuation\">(<\/span>t<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>   <span class=\"token comment\">\/\/ 1 x D<\/span><br \/>\n            <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> k <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> k <span class=\"token operator\">&lt;<\/span> L<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>k<span class=\"token punctuation\">)<\/span><br \/>\n                <span class=\"token function\">logLik<\/span><span class=\"token punctuation\">(<\/span>t<span class=\"token punctuation\">,<\/span> k<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">logEmissionProb<\/span><span class=\"token punctuation\">(<\/span>xrow<span class=\"token punctuation\">,<\/span> k<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><\/p>\n<p>        Matrix <span class=\"token function\">logAlpha<\/span><span class=\"token punctuation\">(<\/span>T<span class=\"token punctuation\">,<\/span> L<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> k <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> k <span class=\"token operator\">&lt;<\/span> L<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>k<span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token function\">logAlpha<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> k<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;<\/span> std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">beta<\/span><span class=\"token punctuation\">(<\/span>k<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">1e-300<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token function\">logLik<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> k<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> t <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">;<\/span> t <span class=\"token operator\">&lt;<\/span> T<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>t<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> k <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> k <span class=\"token operator\">&lt;<\/span> L<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>k<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n                <span class=\"token keyword\">double<\/span> mx <span class=\"token operator\">&#061;<\/span> <span class=\"token operator\">&#8211;<\/span>std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token class-name\">numeric_limits<\/span><span class=\"token operator\">&lt;<\/span><span class=\"token keyword\">double<\/span><span class=\"token operator\">&gt;<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">infinity<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> j <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> j <span class=\"token operator\">&lt;<\/span> L<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>j<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n                    <span class=\"token keyword\">double<\/span> v <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">logAlpha<\/span><span class=\"token punctuation\">(<\/span>t <span class=\"token operator\">&#8211;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> j<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span> std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">A<\/span><span class=\"token punctuation\">(<\/span>j<span class=\"token punctuation\">,<\/span> k<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">1e-300<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>v <span class=\"token operator\">&gt;<\/span> mx<span class=\"token punctuation\">)<\/span> mx <span class=\"token operator\">&#061;<\/span> v<span class=\"token punctuation\">;<\/span><br \/>\n                <span class=\"token punctuation\">}<\/span><br \/>\n                <span class=\"token function\">logAlpha<\/span><span class=\"token punctuation\">(<\/span>t<span class=\"token punctuation\">,<\/span> k<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;<\/span> mx <span class=\"token operator\">&#043;<\/span> <span class=\"token function\">logLik<\/span><span class=\"token punctuation\">(<\/span>t<span class=\"token punctuation\">,<\/span> k<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><\/p>\n<p>        std<span class=\"token double-colon punctuation\">::<\/span>vector<span class=\"token operator\">&lt;<\/span><span class=\"token keyword\">int<\/span><span class=\"token operator\">&gt;<\/span> <span class=\"token function\">z_new<\/span><span class=\"token punctuation\">(<\/span>T<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ \u91c7\u6837\u6700\u540e\u4e00\u4e2a\u72b6\u6001<\/span><br \/>\n        Matrix <span class=\"token function\">probs_last<\/span><span class=\"token punctuation\">(<\/span>L<span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">double<\/span> pmax <span class=\"token operator\">&#061;<\/span> <span class=\"token operator\">&#8211;<\/span>std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token class-name\">numeric_limits<\/span><span class=\"token operator\">&lt;<\/span><span class=\"token keyword\">double<\/span><span class=\"token operator\">&gt;<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">infinity<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> k <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> k <span class=\"token operator\">&lt;<\/span> L<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>k<span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">logAlpha<\/span><span class=\"token punctuation\">(<\/span>T <span class=\"token operator\">&#8211;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> k<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&gt;<\/span> pmax<span class=\"token punctuation\">)<\/span> pmax <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">logAlpha<\/span><span class=\"token punctuation\">(<\/span>T <span class=\"token operator\">&#8211;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> k<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">double<\/span> psum <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> k <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> k <span class=\"token operator\">&lt;<\/span> L<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>k<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token function\">probs_last<\/span><span class=\"token punctuation\">(<\/span>k<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;<\/span> std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">exp<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">logAlpha<\/span><span class=\"token punctuation\">(<\/span>T <span class=\"token operator\">&#8211;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> k<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span> pmax<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            psum <span class=\"token operator\">&#043;&#061;<\/span> <span class=\"token function\">probs_last<\/span><span class=\"token punctuation\">(<\/span>k<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> k <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> k <span class=\"token operator\">&lt;<\/span> L<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>k<span class=\"token punctuation\">)<\/span> <span class=\"token function\">probs_last<\/span><span class=\"token punctuation\">(<\/span>k<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">\/&#061;<\/span> psum<span class=\"token punctuation\">;<\/span><br \/>\n        z_new<span class=\"token punctuation\">[<\/span>T <span class=\"token operator\">&#8211;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">sampleDiscrete<\/span><span class=\"token punctuation\">(<\/span>probs_last<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token comment\">\/\/ \u540e\u5411\u91c7\u6837<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> t <span class=\"token operator\">&#061;<\/span> T <span class=\"token operator\">&#8211;<\/span> <span class=\"token number\">2<\/span><span class=\"token punctuation\">;<\/span> t <span class=\"token operator\">&gt;&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#8212;<\/span>t<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token keyword\">int<\/span> nxt <span class=\"token operator\">&#061;<\/span> z_new<span class=\"token punctuation\">[<\/span>t <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            Matrix <span class=\"token function\">probs<\/span><span class=\"token punctuation\">(<\/span>L<span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">double<\/span> pmx <span class=\"token operator\">&#061;<\/span> <span class=\"token operator\">&#8211;<\/span>std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token class-name\">numeric_limits<\/span><span class=\"token operator\">&lt;<\/span><span class=\"token keyword\">double<\/span><span class=\"token operator\">&gt;<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">infinity<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> k <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> k <span class=\"token operator\">&lt;<\/span> L<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>k<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n                <span class=\"token keyword\">double<\/span> v <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">logAlpha<\/span><span class=\"token punctuation\">(<\/span>t<span class=\"token punctuation\">,<\/span> k<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span> std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">A<\/span><span class=\"token punctuation\">(<\/span>k<span class=\"token punctuation\">,<\/span> nxt<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">1e-300<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>v <span class=\"token operator\">&gt;<\/span> pmx<span class=\"token punctuation\">)<\/span> pmx <span class=\"token operator\">&#061;<\/span> v<span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token punctuation\">}<\/span><br \/>\n            <span class=\"token keyword\">double<\/span> ps <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> k <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> k <span class=\"token operator\">&lt;<\/span> L<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>k<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n                <span class=\"token keyword\">double<\/span> v <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">logAlpha<\/span><span class=\"token punctuation\">(<\/span>t<span class=\"token punctuation\">,<\/span> k<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span> std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">A<\/span><span class=\"token punctuation\">(<\/span>k<span class=\"token punctuation\">,<\/span> nxt<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">1e-300<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                <span class=\"token function\">probs<\/span><span class=\"token punctuation\">(<\/span>k<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;<\/span> std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">exp<\/span><span class=\"token punctuation\">(<\/span>v <span class=\"token operator\">&#8211;<\/span> pmx<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                ps <span class=\"token operator\">&#043;&#061;<\/span> <span class=\"token function\">probs<\/span><span class=\"token punctuation\">(<\/span>k<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token punctuation\">}<\/span><br \/>\n            <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> k <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> k <span class=\"token operator\">&lt;<\/span> L<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>k<span class=\"token punctuation\">)<\/span> <span class=\"token function\">probs<\/span><span class=\"token punctuation\">(<\/span>k<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">\/&#061;<\/span> ps<span class=\"token punctuation\">;<\/span><br \/>\n            z_new<span class=\"token punctuation\">[<\/span>t<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">sampleDiscrete<\/span><span class=\"token punctuation\">(<\/span>probs<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><\/p>\n<p>        z <span class=\"token operator\">&#061;<\/span> z_new<span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token function\">updateCounts<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ &#8212;&#8211; \u91c7\u6837\u53d1\u5c04\u53c2\u6570 (\u9ad8\u65af\u5206\u5e03) &#8212;&#8211;<\/span><br \/>\n    <span class=\"token keyword\">void<\/span> <span class=\"token function\">sampleEmissions<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">double<\/span> nu0 <span class=\"token operator\">&#061;<\/span> D <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">2<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        Matrix Psi0 <span class=\"token operator\">&#061;<\/span> <span class=\"token class-name\">Matrix<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Identity<\/span><span class=\"token punctuation\">(<\/span>D<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> k <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> k <span class=\"token operator\">&lt;<\/span> L<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>k<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            std<span class=\"token double-colon punctuation\">::<\/span>vector<span class=\"token operator\">&lt;<\/span><span class=\"token keyword\">int<\/span><span class=\"token operator\">&gt;<\/span> idx<span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> t <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> t <span class=\"token operator\">&lt;<\/span> T<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>t<span class=\"token punctuation\">)<\/span><br \/>\n                <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>z<span class=\"token punctuation\">[<\/span>t<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;&#061;<\/span> k<span class=\"token punctuation\">)<\/span> idx<span class=\"token punctuation\">.<\/span><span class=\"token function\">push_back<\/span><span class=\"token punctuation\">(<\/span>t<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>            <span class=\"token keyword\">int<\/span> nk <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span><span class=\"token punctuation\">)<\/span>idx<span class=\"token punctuation\">.<\/span><span class=\"token function\">size<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>nk <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n                theta<span class=\"token punctuation\">[<\/span>k<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">sampleGaussian<\/span><span class=\"token punctuation\">(<\/span><span class=\"token class-name\">Matrix<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Zero<\/span><span class=\"token punctuation\">(<\/span>D<span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token class-name\">Matrix<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Identity<\/span><span class=\"token punctuation\">(<\/span>D<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                Sigma<span class=\"token punctuation\">[<\/span>k<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">sampleInvWishart<\/span><span class=\"token punctuation\">(<\/span>nu0<span class=\"token punctuation\">,<\/span> Psi0<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                <span class=\"token keyword\">continue<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token punctuation\">}<\/span><\/p>\n<p>            Matrix mean <span class=\"token operator\">&#061;<\/span> <span class=\"token class-name\">Matrix<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Zero<\/span><span class=\"token punctuation\">(<\/span>D<span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> t <span class=\"token operator\">:<\/span> idx<span class=\"token punctuation\">)<\/span><br \/>\n                <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> d <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> d <span class=\"token operator\">&lt;<\/span> D<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>d<span class=\"token punctuation\">)<\/span><br \/>\n                    <span class=\"token function\">mean<\/span><span class=\"token punctuation\">(<\/span>d<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;&#061;<\/span> <span class=\"token function\">observations<\/span><span class=\"token punctuation\">(<\/span>t<span class=\"token punctuation\">,<\/span> d<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> d <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> d <span class=\"token operator\">&lt;<\/span> D<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>d<span class=\"token punctuation\">)<\/span> <span class=\"token function\">mean<\/span><span class=\"token punctuation\">(<\/span>d<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">\/&#061;<\/span> nk<span class=\"token punctuation\">;<\/span><\/p>\n<p>            Matrix scatter <span class=\"token operator\">&#061;<\/span> <span class=\"token class-name\">Matrix<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Zero<\/span><span class=\"token punctuation\">(<\/span>D<span class=\"token punctuation\">,<\/span> D<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> t <span class=\"token operator\">:<\/span> idx<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n                Matrix <span class=\"token function\">diff<\/span><span class=\"token punctuation\">(<\/span>D<span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> d <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> d <span class=\"token operator\">&lt;<\/span> D<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>d<span class=\"token punctuation\">)<\/span><br \/>\n                    <span class=\"token function\">diff<\/span><span class=\"token punctuation\">(<\/span>d<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">observations<\/span><span class=\"token punctuation\">(<\/span>t<span class=\"token punctuation\">,<\/span> d<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span> <span class=\"token function\">mean<\/span><span class=\"token punctuation\">(<\/span>d<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                scatter <span class=\"token operator\">&#043;&#061;<\/span> diff <span class=\"token operator\">*<\/span> diff<span class=\"token punctuation\">.<\/span><span class=\"token function\">transpose<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token punctuation\">}<\/span><\/p>\n<p>            Matrix Psi_n <span class=\"token operator\">&#061;<\/span> Psi0 <span class=\"token operator\">&#043;<\/span> scatter<br \/>\n                <span class=\"token operator\">&#043;<\/span> <span class=\"token punctuation\">(<\/span>mean <span class=\"token operator\">*<\/span> mean<span class=\"token punctuation\">.<\/span><span class=\"token function\">transpose<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">*<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">double<\/span><span class=\"token punctuation\">)<\/span>nk <span class=\"token operator\">\/<\/span> <span class=\"token punctuation\">(<\/span>nk <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">1.0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">double<\/span> nu_n <span class=\"token operator\">&#061;<\/span> nu0 <span class=\"token operator\">&#043;<\/span> nk<span class=\"token punctuation\">;<\/span><br \/>\n            Sigma<span class=\"token punctuation\">[<\/span>k<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">sampleInvWishart<\/span><span class=\"token punctuation\">(<\/span>nu_n<span class=\"token punctuation\">,<\/span> Psi_n<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>            Matrix cov_theta <span class=\"token operator\">&#061;<\/span> Sigma<span class=\"token punctuation\">[<\/span>k<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">\/<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">double<\/span><span class=\"token punctuation\">)<\/span>nk<span class=\"token punctuation\">;<\/span><br \/>\n            theta<span class=\"token punctuation\">[<\/span>k<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">sampleGaussian<\/span><span class=\"token punctuation\">(<\/span>mean<span class=\"token punctuation\">,<\/span> cov_theta<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token keyword\">void<\/span> <span class=\"token function\">gibbsStep<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token function\">sampleTransitions<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token function\">sampleStates<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token function\">sampleEmissions<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token keyword\">void<\/span> <span class=\"token function\">run<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> nIter<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> iter <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> iter <span class=\"token operator\">&lt;<\/span> nIter<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>iter<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token function\">gibbsStep<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>iter <span class=\"token operator\">%<\/span> <span class=\"token number\">50<\/span> <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n                std<span class=\"token double-colon punctuation\">::<\/span>cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;Iter &#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">setw<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&lt;&lt;<\/span> iter<br \/>\n                          <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034; | active states: &#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token function\">countActiveStates<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                          <span class=\"token operator\">&lt;&lt;<\/span> std<span class=\"token double-colon punctuation\">::<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token keyword\">int<\/span> <span class=\"token function\">countActiveStates<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">const<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        std<span class=\"token double-colon punctuation\">::<\/span>vector<span class=\"token operator\">&lt;<\/span><span class=\"token keyword\">bool<\/span><span class=\"token operator\">&gt;<\/span> <span class=\"token function\">used<\/span><span class=\"token punctuation\">(<\/span>L<span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> s <span class=\"token operator\">:<\/span> z<span class=\"token punctuation\">)<\/span> used<span class=\"token punctuation\">[<\/span>s<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">int<\/span> cnt <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">bool<\/span> b <span class=\"token operator\">:<\/span> used<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>b<span class=\"token punctuation\">)<\/span> cnt<span class=\"token operator\">&#043;&#043;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> cnt<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token keyword\">void<\/span> <span class=\"token function\">printTransitionMatrix<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">const<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        std<span class=\"token double-colon punctuation\">::<\/span>cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;Transition Matrix A:&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> std<span class=\"token double-colon punctuation\">::<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n        std<span class=\"token double-colon punctuation\">::<\/span>cout <span class=\"token operator\">&lt;&lt;<\/span> std<span class=\"token double-colon punctuation\">::<\/span>fixed <span class=\"token operator\">&lt;&lt;<\/span> std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">setprecision<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">4<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> i <span class=\"token operator\">&lt;<\/span> L<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>i<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            std<span class=\"token double-colon punctuation\">::<\/span>cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;  &#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> j <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> j <span class=\"token operator\">&lt;<\/span> L<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>j<span class=\"token punctuation\">)<\/span><br \/>\n                std<span class=\"token double-colon punctuation\">::<\/span>cout <span class=\"token operator\">&lt;&lt;<\/span> std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">setw<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">8<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token function\">A<\/span><span class=\"token punctuation\">(<\/span>i<span class=\"token punctuation\">,<\/span> j<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            std<span class=\"token double-colon punctuation\">::<\/span>cout <span class=\"token operator\">&lt;&lt;<\/span> std<span class=\"token double-colon punctuation\">::<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">private<\/span><span class=\"token operator\">:<\/span><br \/>\n    <span class=\"token keyword\">double<\/span> <span class=\"token function\">logEmissionProb<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> Matrix<span class=\"token operator\">&amp;<\/span> x_row<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">int<\/span> k<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">const<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        Matrix x <span class=\"token operator\">&#061;<\/span> x_row<span class=\"token punctuation\">.<\/span><span class=\"token function\">transpose<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>     <span class=\"token comment\">\/\/ D x 1<\/span><br \/>\n        Matrix diff <span class=\"token operator\">&#061;<\/span> x <span class=\"token operator\">&#8211;<\/span> theta<span class=\"token punctuation\">[<\/span>k<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">double<\/span> logDet <span class=\"token operator\">&#061;<\/span> std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span>Sigma<span class=\"token punctuation\">[<\/span>k<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">determinant<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">1e-300<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        Matrix quad <span class=\"token operator\">&#061;<\/span> diff<span class=\"token punctuation\">.<\/span><span class=\"token function\">transpose<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">*<\/span> Sigma<span class=\"token punctuation\">[<\/span>k<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">inverse<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">*<\/span> diff<span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token number\">0.5<\/span> <span class=\"token operator\">*<\/span> <span class=\"token punctuation\">(<\/span>D <span class=\"token operator\">*<\/span> std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">2<\/span> <span class=\"token operator\">*<\/span> M_PI<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span> logDet <span class=\"token operator\">&#043;<\/span> <span class=\"token function\">quad<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    Matrix <span class=\"token function\">sampleDirichlet<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> Matrix<span class=\"token operator\">&amp;<\/span> alpha<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">int<\/span> K <span class=\"token operator\">&#061;<\/span> alpha<span class=\"token punctuation\">.<\/span>rows<span class=\"token punctuation\">;<\/span><br \/>\n        Matrix <span class=\"token function\">samples<\/span><span class=\"token punctuation\">(<\/span>K<span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> i <span class=\"token operator\">&lt;<\/span> K<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>i<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            std<span class=\"token double-colon punctuation\">::<\/span>gamma_distribution<span class=\"token operator\">&lt;<\/span><span class=\"token keyword\">double<\/span><span class=\"token operator\">&gt;<\/span> <span class=\"token function\">g<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">alpha<\/span><span class=\"token punctuation\">(<\/span>i<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1.0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token function\">samples<\/span><span class=\"token punctuation\">(<\/span>i<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">g<\/span><span class=\"token punctuation\">(<\/span>rng<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token keyword\">double<\/span> s <span class=\"token operator\">&#061;<\/span> samples<span class=\"token punctuation\">.<\/span><span class=\"token function\">sum<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>s <span class=\"token operator\">&lt;<\/span> <span class=\"token number\">1e-300<\/span><span class=\"token punctuation\">)<\/span> s <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">1e-300<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        samples <span class=\"token operator\">\/&#061;<\/span> s<span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> samples<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token keyword\">int<\/span> <span class=\"token function\">sampleDiscrete<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> Matrix<span class=\"token operator\">&amp;<\/span> probs<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">double<\/span> total <span class=\"token operator\">&#061;<\/span> probs<span class=\"token punctuation\">.<\/span><span class=\"token function\">sum<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>total <span class=\"token operator\">&lt;&#061;<\/span> <span class=\"token number\">0.0<\/span><span class=\"token punctuation\">)<\/span> total <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">1e-300<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        std<span class=\"token double-colon punctuation\">::<\/span>uniform_real_distribution<span class=\"token operator\">&lt;<\/span><span class=\"token keyword\">double<\/span><span class=\"token operator\">&gt;<\/span> <span class=\"token function\">u<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> total<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">double<\/span> r <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">u<\/span><span class=\"token punctuation\">(<\/span>rng<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">double<\/span> c <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> i <span class=\"token operator\">&lt;<\/span> probs<span class=\"token punctuation\">.<\/span>rows<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>i<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            c <span class=\"token operator\">&#043;&#061;<\/span> <span class=\"token function\">probs<\/span><span class=\"token punctuation\">(<\/span>i<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>r <span class=\"token operator\">&lt;&#061;<\/span> c<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">return<\/span> i<span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> probs<span class=\"token punctuation\">.<\/span>rows <span class=\"token operator\">&#8211;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u4ece N(mean, cov) \u91c7\u6837 (Cholesky \u6cd5)<\/span><br \/>\n    Matrix <span class=\"token function\">sampleGaussian<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> Matrix<span class=\"token operator\">&amp;<\/span> mean<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">const<\/span> Matrix<span class=\"token operator\">&amp;<\/span> cov<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">int<\/span> d <span class=\"token operator\">&#061;<\/span> mean<span class=\"token punctuation\">.<\/span>rows<span class=\"token punctuation\">;<\/span><br \/>\n        Matrix <span class=\"token function\">zvec<\/span><span class=\"token punctuation\">(<\/span>d<span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        std<span class=\"token double-colon punctuation\">::<\/span>normal_distribution<span class=\"token operator\">&lt;<\/span><span class=\"token keyword\">double<\/span><span class=\"token operator\">&gt;<\/span> <span class=\"token function\">nd<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> i <span class=\"token operator\">&lt;<\/span> d<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>i<span class=\"token punctuation\">)<\/span> <span class=\"token function\">zvec<\/span><span class=\"token punctuation\">(<\/span>i<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">nd<\/span><span class=\"token punctuation\">(<\/span>rng<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        Matrix Lm <span class=\"token operator\">&#061;<\/span> cov<span class=\"token punctuation\">.<\/span><span class=\"token function\">cholesky<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> mean <span class=\"token operator\">&#043;<\/span> Lm <span class=\"token operator\">*<\/span> zvec<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ InvWishart(nu, Psi) \u91c7\u6837 (Bartlett \u5206\u89e3)<\/span><br \/>\n    Matrix <span class=\"token function\">sampleInvWishart<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">double<\/span> nu<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">const<\/span> Matrix<span class=\"token operator\">&amp;<\/span> Psi<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">int<\/span> d <span class=\"token operator\">&#061;<\/span> Psi<span class=\"token punctuation\">.<\/span>rows<span class=\"token punctuation\">;<\/span><br \/>\n        Matrix <span class=\"token function\">S<\/span><span class=\"token punctuation\">(<\/span>d<span class=\"token punctuation\">,<\/span> d<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0.0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        std<span class=\"token double-colon punctuation\">::<\/span>normal_distribution<span class=\"token operator\">&lt;<\/span><span class=\"token keyword\">double<\/span><span class=\"token operator\">&gt;<\/span> <span class=\"token function\">nd<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> i <span class=\"token operator\">&lt;<\/span> d<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>i<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            std<span class=\"token double-colon punctuation\">::<\/span>chi_squared_distribution<span class=\"token operator\">&lt;<\/span><span class=\"token keyword\">double<\/span><span class=\"token operator\">&gt;<\/span> <span class=\"token function\">chi<\/span><span class=\"token punctuation\">(<\/span>nu <span class=\"token operator\">&#8211;<\/span> i<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token function\">S<\/span><span class=\"token punctuation\">(<\/span>i<span class=\"token punctuation\">,<\/span> i<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;<\/span> std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">sqrt<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">chi<\/span><span class=\"token punctuation\">(<\/span>rng<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> j <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> j <span class=\"token operator\">&lt;<\/span> i<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>j<span class=\"token punctuation\">)<\/span><br \/>\n                <span class=\"token function\">S<\/span><span class=\"token punctuation\">(<\/span>i<span class=\"token punctuation\">,<\/span> j<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">nd<\/span><span class=\"token punctuation\">(<\/span>rng<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n        Matrix W <span class=\"token operator\">&#061;<\/span> S <span class=\"token operator\">*<\/span> S<span class=\"token punctuation\">.<\/span><span class=\"token function\">transpose<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>        <span class=\"token comment\">\/\/ ~ Wishart(nu, I)<\/span><br \/>\n        Matrix Lm <span class=\"token operator\">&#061;<\/span> Psi<span class=\"token punctuation\">.<\/span><span class=\"token function\">cholesky<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>          <span class=\"token comment\">\/\/ Psi &#061; Lm * Lm^T<\/span><br \/>\n        <span class=\"token comment\">\/\/ X ~ InvWishart(nu, Psi)  &#061;&gt;  X &#061; Lm * W^{-1} * Lm^T<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> Lm <span class=\"token operator\">*<\/span> W<span class=\"token punctuation\">.<\/span><span class=\"token function\">inverse<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">*<\/span> Lm<span class=\"token punctuation\">.<\/span><span class=\"token function\">transpose<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token comment\">\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token comment\">\/\/ main<\/span><br \/>\n<span class=\"token comment\">\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token keyword\">int<\/span> <span class=\"token function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">int<\/span> T <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">1000<\/span><span class=\"token punctuation\">,<\/span> D <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">2<\/span><span class=\"token punctuation\">,<\/span> trueK <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">3<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    Matrix <span class=\"token function\">data<\/span><span class=\"token punctuation\">(<\/span>T<span class=\"token punctuation\">,<\/span> D<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    std<span class=\"token double-colon punctuation\">::<\/span>vector<span class=\"token operator\">&lt;<\/span>std<span class=\"token double-colon punctuation\">::<\/span>vector<span class=\"token operator\">&lt;<\/span><span class=\"token keyword\">double<\/span><span class=\"token operator\">&gt;&gt;<\/span> trueMeans <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span> <span class=\"token number\">0.0<\/span><span class=\"token punctuation\">,<\/span>  <span class=\"token number\">0.0<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span> <span class=\"token number\">5.0<\/span><span class=\"token punctuation\">,<\/span>  <span class=\"token number\">5.0<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token punctuation\">{<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">5.0<\/span><span class=\"token punctuation\">,<\/span>  <span class=\"token number\">5.0<\/span><span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u751f\u6210\u5408\u6210\u6570\u636e (3 \u72b6\u6001\u9ad8\u65af HMM, \u81ea\u8f6c\u79fb 0.9) &#8211; \u56fa\u5b9a\u79cd\u5b50\u4fdd\u8bc1\u53ef\u590d\u73b0<\/span><br \/>\n    std<span class=\"token double-colon punctuation\">::<\/span>mt19937 <span class=\"token function\">rng<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">42<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    std<span class=\"token double-colon punctuation\">::<\/span>normal_distribution<span class=\"token operator\">&lt;<\/span><span class=\"token keyword\">double<\/span><span class=\"token operator\">&gt;<\/span> <span class=\"token function\">noise<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    std<span class=\"token double-colon punctuation\">::<\/span>uniform_real_distribution<span class=\"token operator\">&lt;<\/span><span class=\"token keyword\">double<\/span><span class=\"token operator\">&gt;<\/span> <span class=\"token function\">u01<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">int<\/span> state <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> t <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> t <span class=\"token operator\">&lt;<\/span> T<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>t<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">u01<\/span><span class=\"token punctuation\">(<\/span>rng<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&lt;<\/span> <span class=\"token number\">0.1<\/span><span class=\"token punctuation\">)<\/span> state <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span>state <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">%<\/span> trueK<span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> d <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> d <span class=\"token operator\">&lt;<\/span> D<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>d<span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token function\">data<\/span><span class=\"token punctuation\">(<\/span>t<span class=\"token punctuation\">,<\/span> d<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;<\/span> trueMeans<span class=\"token punctuation\">[<\/span>state<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span>d<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token function\">noise<\/span><span class=\"token punctuation\">(<\/span>rng<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u6784\u9020 HDP-HMM (\u56fa\u5b9a\u79cd\u5b50, \u4fbf\u4e8e\u590d\u73b0)<\/span><br \/>\n    HDPHMM <span class=\"token function\">model<\/span><span class=\"token punctuation\">(<\/span><span class=\"token comment\">\/*L&#061;*\/<\/span><span class=\"token number\">10<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token comment\">\/*alpha&#061;*\/<\/span><span class=\"token number\">1.0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token comment\">\/*gamma&#061;*\/<\/span><span class=\"token number\">1.0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token comment\">\/*kappa&#061;*\/<\/span><span class=\"token number\">10.0<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                 <span class=\"token comment\">\/*seed&#061;*\/<\/span><span class=\"token number\">42u<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    model<span class=\"token punctuation\">.<\/span><span class=\"token function\">initialize<\/span><span class=\"token punctuation\">(<\/span>data<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    std<span class=\"token double-colon punctuation\">::<\/span>cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;&#061;&#061;&#061; HDP-HMM Gibbs Sampling &#061;&#061;&#061;&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> std<span class=\"token double-colon punctuation\">::<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n    model<span class=\"token punctuation\">.<\/span><span class=\"token function\">run<\/span><span class=\"token punctuation\">(<\/span><span class=\"token comment\">\/*nIter&#061;*\/<\/span><span class=\"token number\">500<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    std<span class=\"token double-colon punctuation\">::<\/span>cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;\\\\nFinal active states: &#034;<\/span><br \/>\n              <span class=\"token operator\">&lt;&lt;<\/span> model<span class=\"token punctuation\">.<\/span><span class=\"token function\">countActiveStates<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&lt;&lt;<\/span> std<span class=\"token double-colon punctuation\">::<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n    model<span class=\"token punctuation\">.<\/span><span class=\"token function\">printTransitionMatrix<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    std<span class=\"token double-colon punctuation\">::<\/span>cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;\\\\nEstimated emission means:&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> std<span class=\"token double-colon punctuation\">::<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n    std<span class=\"token double-colon punctuation\">::<\/span>cout <span class=\"token operator\">&lt;&lt;<\/span> std<span class=\"token double-colon punctuation\">::<\/span>fixed <span class=\"token operator\">&lt;&lt;<\/span> std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">setprecision<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">4<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    std<span class=\"token double-colon punctuation\">::<\/span>vector<span class=\"token operator\">&lt;<\/span><span class=\"token keyword\">bool<\/span><span class=\"token operator\">&gt;<\/span> <span class=\"token function\">used<\/span><span class=\"token punctuation\">(<\/span>model<span class=\"token punctuation\">.<\/span>L<span class=\"token punctuation\">,<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> s <span class=\"token operator\">:<\/span> model<span class=\"token punctuation\">.<\/span>z<span class=\"token punctuation\">)<\/span> used<span class=\"token punctuation\">[<\/span>s<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> k <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> k <span class=\"token operator\">&lt;<\/span> model<span class=\"token punctuation\">.<\/span>L<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>k<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>used<span class=\"token punctuation\">[<\/span>k<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            std<span class=\"token double-colon punctuation\">::<\/span>cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;State &#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> k <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;: &#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> d <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> d <span class=\"token operator\">&lt;<\/span> model<span class=\"token punctuation\">.<\/span>D<span class=\"token punctuation\">;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>d<span class=\"token punctuation\">)<\/span><br \/>\n                std<span class=\"token double-colon punctuation\">::<\/span>cout <span class=\"token operator\">&lt;&lt;<\/span> std<span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">setw<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">9<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&lt;&lt;<\/span> model<span class=\"token punctuation\">.<\/span>theta<span class=\"token punctuation\">[<\/span>k<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">(<\/span>d<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            std<span class=\"token double-colon punctuation\">::<\/span>cout <span class=\"token operator\">&lt;&lt;<\/span> std<span class=\"token double-colon punctuation\">::<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token keyword\">return<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\/\/<br \/>\n\/\/ HDP-HMM with Sticky Transitions (Fox et al., 2011)<br \/>\n\/\/ \u5b8c\u5168\u81ea\u5305\u542b (\u4ec5\u4f9d\u8d56 C \u6807\u51c6\u5e93, \u65e0\u7b2c\u4e09\u65b9\u4f9d\u8d56)<br \/>\n\/\/ \u7f16\u8bd1: g -stdc14 -O2 HDPHMM.cpp -o hdpmm_demo<br \/>\n\/\/ \u8fd0\u884c: .\/hdpmm_demo<br \/>\n\/\/ #include<br \/>\n#include<br \/>\n#include<br \/>\n#include<br \/>\n#include &lt;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[55,1284,190,427],"topic":[],"class_list":["post-116324","post","type-post","status-publish","format-standard","hentry","category-server","tag-c","tag-matlab","tag-190","tag-427"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>C++\u4ee3\u7801\u5b9e\u73b0MATLAB\u4e2d\u7684hdphmm\u51fd\u6570\u529f\u80fd - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.wsisp.com\/helps\/116324.html\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"C++\u4ee3\u7801\u5b9e\u73b0MATLAB\u4e2d\u7684hdphmm\u51fd\u6570\u529f\u80fd - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"og:description\" content=\"\/\/ \/\/ HDP-HMM with Sticky Transitions (Fox et al., 2011) \/\/ \u5b8c\u5168\u81ea\u5305\u542b (\u4ec5\u4f9d\u8d56 C \u6807\u51c6\u5e93, \u65e0\u7b2c\u4e09\u65b9\u4f9d\u8d56) \/\/ \u7f16\u8bd1: g -stdc14 -O2 HDPHMM.cpp -o hdpmm_demo \/\/ \u8fd0\u884c: .\/hdpmm_demo \/\/ #include #include #include #include #include &lt;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.wsisp.com\/helps\/116324.html\" \/>\n<meta property=\"og:site_name\" content=\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-20T23:25:16+00:00\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/116324.html\",\"url\":\"https:\/\/www.wsisp.com\/helps\/116324.html\",\"name\":\"C++\u4ee3\u7801\u5b9e\u73b0MATLAB\u4e2d\u7684hdphmm\u51fd\u6570\u529f\u80fd - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"isPartOf\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\"},\"datePublished\":\"2026-10-20T23:25:16+00:00\",\"dateModified\":\"2026-10-20T23:25:16+00:00\",\"author\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/116324.html#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.wsisp.com\/helps\/116324.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/116324.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.wsisp.com\/helps\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"C++\u4ee3\u7801\u5b9e\u73b0MATLAB\u4e2d\u7684hdphmm\u51fd\u6570\u529f\u80fd\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\",\"url\":\"https:\/\/www.wsisp.com\/helps\/\",\"name\":\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"description\":\"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"contentUrl\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"caption\":\"admin\"},\"sameAs\":[\"http:\/\/wp.wsisp.com\"],\"url\":\"https:\/\/www.wsisp.com\/helps\/author\/admin\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"C++\u4ee3\u7801\u5b9e\u73b0MATLAB\u4e2d\u7684hdphmm\u51fd\u6570\u529f\u80fd - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.wsisp.com\/helps\/116324.html","og_locale":"zh_CN","og_type":"article","og_title":"C++\u4ee3\u7801\u5b9e\u73b0MATLAB\u4e2d\u7684hdphmm\u51fd\u6570\u529f\u80fd - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","og_description":"\/\/ \/\/ HDP-HMM with Sticky Transitions (Fox et al., 2011) \/\/ \u5b8c\u5168\u81ea\u5305\u542b (\u4ec5\u4f9d\u8d56 C \u6807\u51c6\u5e93, \u65e0\u7b2c\u4e09\u65b9\u4f9d\u8d56) \/\/ \u7f16\u8bd1: g -stdc14 -O2 HDPHMM.cpp -o hdpmm_demo \/\/ \u8fd0\u884c: .\/hdpmm_demo \/\/ #include #include #include #include #include &lt;","og_url":"https:\/\/www.wsisp.com\/helps\/116324.html","og_site_name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","article_published_time":"2026-10-20T23:25:16+00:00","author":"admin","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"admin","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"11 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.wsisp.com\/helps\/116324.html","url":"https:\/\/www.wsisp.com\/helps\/116324.html","name":"C++\u4ee3\u7801\u5b9e\u73b0MATLAB\u4e2d\u7684hdphmm\u51fd\u6570\u529f\u80fd - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","isPartOf":{"@id":"https:\/\/www.wsisp.com\/helps\/#website"},"datePublished":"2026-10-20T23:25:16+00:00","dateModified":"2026-10-20T23:25:16+00:00","author":{"@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41"},"breadcrumb":{"@id":"https:\/\/www.wsisp.com\/helps\/116324.html#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.wsisp.com\/helps\/116324.html"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.wsisp.com\/helps\/116324.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.wsisp.com\/helps"},{"@type":"ListItem","position":2,"name":"C++\u4ee3\u7801\u5b9e\u73b0MATLAB\u4e2d\u7684hdphmm\u51fd\u6570\u529f\u80fd"}]},{"@type":"WebSite","@id":"https:\/\/www.wsisp.com\/helps\/#website","url":"https:\/\/www.wsisp.com\/helps\/","name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","description":"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41","name":"admin","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/","url":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","contentUrl":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","caption":"admin"},"sameAs":["http:\/\/wp.wsisp.com"],"url":"https:\/\/www.wsisp.com\/helps\/author\/admin"}]}},"_links":{"self":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/116324","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/comments?post=116324"}],"version-history":[{"count":0,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/116324\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media?parent=116324"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/categories?post=116324"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/tags?post=116324"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/topic?post=116324"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}