MATLAB:生成具有特定约束的所有可能的N x N矩阵

时间:2015-12-15 19:19:21

标签: matlab matrix

假设您有一个初始N-by-N矩阵,所有对角线元素都等于零。您希望生成所有可能的N-by-N矩阵,以便:

  • 所有对角线元素继续为零
  • 列和行保留初始矩阵的总和
  • 所有元素都是正整数(包括零)

例如,对于这个3乘3的初始矩阵:

<?php
include 'connect.php';
$user = $_SESSION['id'];
$getfaves = mysql_query("SELECT postid FROM Favourites where userid='$user'") or die(mysql_query());
if ($rowfave = mysql_fetch_assoc($getfaves))
    {
        $faveposts = $rowfave['id'];

        $getposts = mysql_query("SELECT * FROM Posts where id='$faveposts' ORDER BY id DESC");
        while ($row = mysql_fetch_assoc($getposts))
        {
            $content = 'content';
            echo ($content);
        }
    }
?>

一种可能的变化是:

0 1 3
2 0 1
3 2 0

1 个答案:

答案 0 :(得分:1)

答案的初步想法,当然可以进一步改进。

您可以开始考虑一种方法来制作在对角线上具有零的矩阵,以及行和列总和为零的矩阵。如果这些可以很容易地构建,那么你可以通过添加你的所有初始矩阵来获得你的结果。

e.g:

[ 0  1 -2  1;
  1  0 -1  0;
 -1  2  0 -1;
  0 -3  3  0];

你甚至可以限制这些帮手&#39;矩阵在每行/每列上最多只有一个1和一个-1。所有其他人都可以用它们构建。

e.g。

A = [ 0 -1  2 -1;
      2  0 -2  0;
     -2  1  0  1;
      0  0  0  0];
B = [ 0 -1  1  0;
      1  0 -1  0;
     -1  1  0  0;
      0  0  0  0];
C = [ 0  0  1 -1;
      1  0 -1  0;
     -1  0  0  1;
      0  0  0  0];
% A equals B+C

我认为这至少可以减少你的问题。祝你好运!