(MATLAB) 线性方程的整数正解

问题描述 投票:0回答:1

我想生成一个名为

listt
的列表,其中包含所有可能的正整数,总和为特定数字
d
。例如,我正在查看
x's
的所有可能正整数值的列表,使得
x1 + x2 + ... + xk = d

在这种情况下,

listt
的行大小应为
(d+k-1) choose (k-1)

我已经有了

MATLAB code
来执行此操作(见下文),但主要问题是此代码允许
listt
中重复行。 我需要帮助才能更改此代码,确保
listt
中没有重复的行。

k = 2;
d = 2;
m = nchoosek(d+k-1, k-1);

% generate non-negative integer random (m x k) array row-sum to d 
ss=rand(m,d+k-1);
[~,r] = maxk(ss,k-1,2);
z = zeros(m,1);
listt = diff([z, sort(r,2), (d+k)+z],1,2)-1;

任何帮助将不胜感激!

matlab math combinatorics discrete-mathematics
1个回答
0
投票

这称为整数分区。它以n为指数,Python中有一个很好的实现,https://ics.uci.edu/~eppstein/PADS/IntegerPartitions.py

我找到了 MATLAB 实现,但从未使用过它:https://www.mathworks.com/matlabcentral/fileexchange/36437-integer-partition-generator

© www.soinside.com 2019 - 2024. All rights reserved.