C++ 中的马尔可夫矩阵程序
给定一个具有 'r' 行和 'c' 列的矩阵 M[r][c],我们必须检查给定矩阵是否为马尔可夫矩阵。如果输入矩阵是马尔可夫矩阵,则输出“它是一个马尔可夫矩阵”,如果不是马尔可夫矩阵,则输出“它不是一个马尔可夫矩阵”。
马尔可夫矩阵
那么,什么是**马尔可夫矩阵**?当且仅当矩阵 M 的每一行的和都等于 1 时,矩阵 M 才是一个马尔可夫矩阵。
例如,如下所示:
$$\begin{bmatrix}0.2 & 0.3 & 0.5 \0.1 & 0.7 & 0.2 \0.4 & 0.5 & 0.1 \\end{bmatrix}\$$
在上例中,如果我们对每一行求和:
1st row sum = 0.2+0.3+0.5 = 1.0 2nd row sum = 0.1+0.7+0.2 = 1.0 3rd row sum = 0.4+0.5+0.1 = 1.0
这里每一行的和都为 1.0,所以上述矩阵是马尔可夫矩阵。
示例
Input: m[][] = { {0.2, 0.3, 0.5} , {0.1, 0.7, 0.2}, {0.4, 0.5, 0.1}} Output: It is a Markov matrix Input: m[][] = { {0, 0, 1} , {0, 0.7, 0.3}, {0.5, 0.5, 0}} Output: It is a Markov matrix
方法
我们将创建一个另一个一维矩阵,并将每一行的和存储在该矩阵中。然后,我们将遍历整个数组,并找到数组中的所有元素是否都为 1,如果是 1,则给定矩阵为马尔可夫矩阵,否则矩阵不是马尔可夫矩阵。
算法
Start Step 1 -> Define macro as #define n 3 Step 2 -> declare function to check for markov matrix bool check(double arr[][n]) Loop For int i = 0 and i <n and i++ Declare double sum = 0 Loop For int j = 0 and j < n and j++ Set sum = sum + arr[i][j] If (sum != 1) return false End End Return true Step 3 -> In main () Declare double arr[3][3] = { { 0, 0, 1 }, { 0.5, 0, 0.5 }, { 0.9, 0, 0.1 } } If (check(arr)) Print its a markov matrix Else Print its not a markov matrix Stop
示例
#include <iostream> using namespace std; #define n 3 //check for markov matrix bool check(double arr[][n]){ for (int i = 0; i <n; i++){ double sum = 0; for (int j = 0; j < n; j++) sum = sum + arr[i][j]; if (sum != 1) return false; } return true; } int main(){ double arr[3][3] = { { 0, 0, 1 }, { 0.5, 0, 0.5 }, { 0.9, 0, 0.1 } }; if (check(arr)) cout << "its a markov matrix "; else cout << "its not a markov matrix "; }
输出
its a markov matrix
广告