<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/160110</link>
    <title>MATLAB Central Newsreader - Combinatorics question</title>
    <description>Feed for thread: Combinatorics question</description>
    <language>en-us</language>
    <copyright>&amp;copy;1994-2008 by The MathWorks, Inc.</copyright>
    <webmaster>webmaster@mathworks.com</webmaster>
    <generator>MATLAB Central Newsreader</generator>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <ttl>60</ttl>
    <image>
      <title>The MathWorks</title>
      <url>http://www.mathworks.com/images/membrane_icon.gif</url>
    </image>
    <item>
      <pubDate>Thu, 29 Nov 2007 16:37:28 -0500</pubDate>
      <title>Combinatorics question</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/160110#403753</link>
      <author>Greg von Winckel</author>
      <description>What would be an efficient way to compute all vectors with&lt;br&gt;
natural number elements of length n&amp;lt;N such that the l^1 norm&lt;br&gt;
of the vector is N?&lt;br&gt;
</description>
    </item>
    <item>
      <pubDate>Thu, 29 Nov 2007 17:24:49 -0500</pubDate>
      <title>Re: Combinatorics question</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/160110#403766</link>
      <author>roberson@ibd.nrc-cnrc.gc.ca (Walter Roberson)</author>
      <description>In article &amp;lt;fimps8$7in$1@fred.mathworks.com&amp;gt;,&lt;br&gt;
Greg von Winckel &amp;lt;gregvw@gmail.com&amp;gt; wrote:&lt;br&gt;
&amp;gt;What would be an efficient way to compute all vectors with&lt;br&gt;
&amp;gt;natural number elements of length n&amp;lt;N such that the l^1 norm&lt;br&gt;
&amp;gt;of the vector is N?&lt;br&gt;
&lt;br&gt;
You mean "the knapsack problem" with a fixed number of weights&lt;br&gt;
(but the size of each weight is limited only to natural numbers&lt;br&gt;
1 thru N-n+1) ?&lt;br&gt;
-- &lt;br&gt;
&amp;nbsp;&amp;nbsp;"All is vanity."                                   -- Ecclesiastes&lt;br&gt;
</description>
    </item>
    <item>
      <pubDate>Thu, 29 Nov 2007 17:53:55 -0500</pubDate>
      <title>Re: Combinatorics question</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/160110#403773</link>
      <author>John D'Errico</author>
      <description>"Greg von Winckel" &amp;lt;gregvw@gmail.com&amp;gt; wrote in message &lt;br&gt;
&amp;lt;fimps8$7in$1@fred.mathworks.com&amp;gt;...&lt;br&gt;
&amp;gt; What would be an efficient way to compute all vectors with&lt;br&gt;
&amp;gt; natural number elements of length n&amp;lt;N such that the l^1 norm&lt;br&gt;
&amp;gt; of the vector is N?&lt;br&gt;
&lt;br&gt;
My partitions code from the FEX is close to&lt;br&gt;
what you are asking for. Is it efficient?&lt;br&gt;
Reasonably so.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://www.mathworks.com/matlabcentral/fileexchange/loadFile.do?"&gt;http://www.mathworks.com/matlabcentral/fileexchange/loadFile.do?&lt;/a&gt;&lt;br&gt;
objectId=12009&amp;objectType=FILE&lt;br&gt;
&lt;br&gt;
The only flaw is that its set up to limit only the&lt;br&gt;
quantity of any single number, not to fix the&lt;br&gt;
total number of elements.&lt;br&gt;
&lt;br&gt;
However, it should be reasonably efficient to&lt;br&gt;
write a recursive code to solve your problem&lt;br&gt;
using much the same scheme found in&lt;br&gt;
partitions. For example:&lt;br&gt;
&lt;br&gt;
% =============================&lt;br&gt;
function list = parts(Nsum,Nel,MaximumElement)&lt;br&gt;
% parts: find all decreasing positive integer vectors of length Nel that sum to &lt;br&gt;
Nsum &lt;br&gt;
% list = parts(Nsum,Nel)&lt;br&gt;
% &lt;br&gt;
% arguments:&lt;br&gt;
%  Nsum - scalar integer - defines the sum&lt;br&gt;
%&lt;br&gt;
%  Nel  - scalar integer - number of elements in the vector&lt;br&gt;
&lt;br&gt;
if (nargin&amp;lt;3) || isempty(MaximumElement)&lt;br&gt;
&amp;nbsp;&amp;nbsp;MaximumElement = Nsum;&lt;br&gt;
end&lt;br&gt;
&lt;br&gt;
if (Nel == Nsum)&lt;br&gt;
&amp;nbsp;&amp;nbsp;% the simple case, where all elements are equal and unity&lt;br&gt;
&amp;nbsp;&amp;nbsp;list = ones(1,Nel);&lt;br&gt;
&amp;nbsp;&amp;nbsp;return&lt;br&gt;
elseif (Nsum &amp;lt;= 0) || (Nel == 0)&lt;br&gt;
&amp;nbsp;&amp;nbsp;% either of these events cannot be satisfied by any list&lt;br&gt;
&amp;nbsp;&amp;nbsp;% of positive integers&lt;br&gt;
&amp;nbsp;&amp;nbsp;list = [];&lt;br&gt;
&amp;nbsp;&amp;nbsp;return&lt;br&gt;
elseif (Nel == 1)&lt;br&gt;
&amp;nbsp;&amp;nbsp;% Only one element in the list - it must be Nsum&lt;br&gt;
&amp;nbsp;&amp;nbsp;if (MaximumElement &amp;gt;= Nsum)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list = Nsum;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&lt;br&gt;
&amp;nbsp;&amp;nbsp;else&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;% but that possibility is disallowed&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list = [];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&lt;br&gt;
&amp;nbsp;&amp;nbsp;end&lt;br&gt;
elseif (Nel&amp;gt;Nsum)&lt;br&gt;
&amp;nbsp;&amp;nbsp;% another non-viable possibility&lt;br&gt;
&amp;nbsp;&amp;nbsp;list = [];&lt;br&gt;
&amp;nbsp;&amp;nbsp;return&lt;br&gt;
end&lt;br&gt;
&lt;br&gt;
% if we drop down to here, there are at least two elements, and&lt;br&gt;
% at least one solution to be found.&lt;br&gt;
list = cell(0,1);&lt;br&gt;
for maxel = min(MaximumElement,Nsum - Nel + 1):-1:1&lt;br&gt;
&amp;nbsp;&amp;nbsp;% Assume that the first element in the list is maxel&lt;br&gt;
&amp;nbsp;&amp;nbsp;sublist = parts(Nsum - maxel,Nel-1,maxel);&lt;br&gt;
&amp;nbsp;&amp;nbsp;if ~isempty(sublist)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;r = size(sublist,1);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list{end+1,1} = [repmat(maxel,r,1),sublist];&lt;br&gt;
&amp;nbsp;&amp;nbsp;end&lt;br&gt;
end&lt;br&gt;
&lt;br&gt;
% aggregate all solutions into a flat array&lt;br&gt;
list = cell2mat(list);&lt;br&gt;
% =============================&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
parts(10,4)&lt;br&gt;
ans =&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7     1     1     1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6     2     1     1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5     3     1     1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5     2     2     1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4     4     1     1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4     3     2     1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4     2     2     2&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3     3     3     1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3     3     2     2&lt;br&gt;
&lt;br&gt;
parts(20,4)&lt;br&gt;
ans =&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;17     1     1     1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;16     2     1     1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;15     3     1     1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;15     2     2     1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;14     4     1     1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;14     3     2     1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;14     2     2     2&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;13     5     1     1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;13     4     2     1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;13     3     3     1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;13     3     2     2&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;12     6     1     1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;12     5     2     1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;12     4     3     1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;12     4     2     2&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;12     3     3     2&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;11     7     1     1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;11     6     2     1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;11     5     3     1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;11     5     2     2&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;11     4     4     1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;11     4     3     2&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;11     3     3     3&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;10     8     1     1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;10     7     2     1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;10     6     3     1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;10     6     2     2&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;10     5     4     1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;10     5     3     2&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;10     4     4     2&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;10     4     3     3&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9     9     1     1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9     8     2     1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9     7     3     1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9     7     2     2&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9     6     4     1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9     6     3     2&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9     5     5     1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9     5     4     2&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9     5     3     3&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9     4     4     3&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8     8     3     1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8     8     2     2&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8     7     4     1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8     7     3     2&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8     6     5     1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8     6     4     2&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8     6     3     3&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8     5     5     2&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8     5     4     3&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8     4     4     4&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7     7     5     1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7     7     4     2&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7     7     3     3&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7     6     6     1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7     6     5     2&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7     6     4     3&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7     5     5     3&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7     5     4     4&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6     6     6     2&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6     6     5     3&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6     6     4     4&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6     5     5     4&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5     5     5     5&lt;br&gt;
&lt;br&gt;
Now I'd write a permutation code for each&lt;br&gt;
row of this result. Expect this all to get nasty&lt;br&gt;
exponentially fast for larger sums. parts(50,10)&lt;br&gt;
found 16928 solutions, each of which can occur&lt;br&gt;
in a multitude of sequences.&lt;br&gt;
&lt;br&gt;
John&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
</description>
    </item>
    <item>
      <pubDate>Thu, 29 Nov 2007 18:37:03 -0500</pubDate>
      <title>Re: Combinatorics question</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/160110#403786</link>
      <author>Bruno Luong</author>
      <description>"John D'Errico" &amp;lt;woodchips@rochester.rr.com&amp;gt; wrote in &lt;br&gt;
&amp;gt; parts(10,4)&lt;br&gt;
&amp;gt; ans =&lt;br&gt;
&amp;gt;      7     1     1     1&lt;br&gt;
&amp;gt;      6     2     1     1&lt;br&gt;
&amp;gt;      5     3     1     1&lt;br&gt;
&amp;gt;      5     2     2     1&lt;br&gt;
&amp;gt;      4     4     1     1&lt;br&gt;
&amp;gt;      4     3     2     1&lt;br&gt;
&amp;gt;      4     2     2     2&lt;br&gt;
&amp;gt;      3     3     3     1&lt;br&gt;
&amp;gt;      3     3     2     2&lt;br&gt;
&lt;br&gt;
Is it all combination? I find 84 possible solutions:&lt;br&gt;
&lt;br&gt;
1 1 1 7 &lt;br&gt;
1 1 2 6 &lt;br&gt;
1 1 3 5 &lt;br&gt;
1 1 4 4 &lt;br&gt;
1 1 5 3 &lt;br&gt;
1 1 6 2 &lt;br&gt;
1 1 7 1 &lt;br&gt;
1 2 1 6 &lt;br&gt;
1 2 2 5 &lt;br&gt;
1 2 3 4 &lt;br&gt;
1 2 4 3 &lt;br&gt;
1 2 5 2 &lt;br&gt;
1 2 6 1 &lt;br&gt;
1 3 1 5 &lt;br&gt;
1 3 2 4 &lt;br&gt;
1 3 3 3 &lt;br&gt;
1 3 4 2 &lt;br&gt;
1 3 5 1 &lt;br&gt;
1 4 1 4 &lt;br&gt;
1 4 2 3 &lt;br&gt;
1 4 3 2 &lt;br&gt;
1 4 4 1 &lt;br&gt;
1 5 1 3 &lt;br&gt;
1 5 2 2 &lt;br&gt;
1 5 3 1 &lt;br&gt;
1 6 1 2 &lt;br&gt;
1 6 2 1 &lt;br&gt;
1 7 1 1 &lt;br&gt;
2 1 1 6 &lt;br&gt;
2 1 2 5 &lt;br&gt;
2 1 3 4 &lt;br&gt;
2 1 4 3 &lt;br&gt;
2 1 5 2 &lt;br&gt;
2 1 6 1 &lt;br&gt;
2 2 1 5 &lt;br&gt;
2 2 2 4 &lt;br&gt;
2 2 3 3 &lt;br&gt;
2 2 4 2 &lt;br&gt;
2 2 5 1 &lt;br&gt;
2 3 1 4 &lt;br&gt;
2 3 2 3 &lt;br&gt;
2 3 3 2 &lt;br&gt;
2 3 4 1 &lt;br&gt;
2 4 1 3 &lt;br&gt;
2 4 2 2 &lt;br&gt;
2 4 3 1 &lt;br&gt;
2 5 1 2 &lt;br&gt;
2 5 2 1 &lt;br&gt;
2 6 1 1 &lt;br&gt;
3 1 1 5 &lt;br&gt;
3 1 2 4 &lt;br&gt;
3 1 3 3 &lt;br&gt;
3 1 4 2 &lt;br&gt;
3 1 5 1 &lt;br&gt;
3 2 1 4 &lt;br&gt;
3 2 2 3 &lt;br&gt;
3 2 3 2 &lt;br&gt;
3 2 4 1 &lt;br&gt;
3 3 1 3 &lt;br&gt;
3 3 2 2 &lt;br&gt;
3 3 3 1 &lt;br&gt;
3 4 1 2 &lt;br&gt;
3 4 2 1 &lt;br&gt;
3 5 1 1 &lt;br&gt;
4 1 1 4 &lt;br&gt;
4 1 2 3 &lt;br&gt;
4 1 3 2 &lt;br&gt;
4 1 4 1 &lt;br&gt;
4 2 1 3 &lt;br&gt;
4 2 2 2 &lt;br&gt;
4 2 3 1 &lt;br&gt;
4 3 1 2 &lt;br&gt;
4 3 2 1 &lt;br&gt;
4 4 1 1 &lt;br&gt;
5 1 1 3 &lt;br&gt;
5 1 2 2 &lt;br&gt;
5 1 3 1 &lt;br&gt;
5 2 1 2 &lt;br&gt;
5 2 2 1 &lt;br&gt;
5 3 1 1 &lt;br&gt;
6 1 1 2 &lt;br&gt;
6 1 2 1 &lt;br&gt;
6 2 1 1 &lt;br&gt;
7 1 1 1 &lt;br&gt;
&lt;br&gt;
Bruno&lt;br&gt;
</description>
    </item>
    <item>
      <pubDate>Thu, 29 Nov 2007 18:42:15 -0500</pubDate>
      <title>Re: Combinatorics question</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/160110#403788</link>
      <author>Bruno Luong</author>
      <description>If you consider "natural number" starts from 0, call:&lt;br&gt;
v=allVL1(n, L1);&lt;br&gt;
&lt;br&gt;
If you consider "natural number" starts from 1, then call:&lt;br&gt;
v=allVL1(n, L1-n)+1;&lt;br&gt;
&lt;br&gt;
Bruno&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
function v=allVL1(n, L1)&lt;br&gt;
% function v=allVL1(n, L1)&lt;br&gt;
% INPUT&lt;br&gt;
%   n: length of the vector&lt;br&gt;
%   L1: desired L1 norm&lt;br&gt;
% OUTPUT:&lt;br&gt;
%   v: m x n array such as sum(v,2)=L1&lt;br&gt;
%      all elements of v is naturel numbers {0,1,...}&lt;br&gt;
%      v contains all possible combination&lt;br&gt;
&lt;br&gt;
if n==1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;v = L1;&lt;br&gt;
else&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;v1 = (0:L1)';&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vrest = arrayfun(@(j) allVL1(n-1, L1-j),  v1, ...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'UniformOutput', false);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;v = arrayfun(@(i) ...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[repmat(v1(i),size(vrest{i},1),1) vrest{i}], ...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(1:length(v1))',...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'UniformOutput', false);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;v = cell2mat(v);&lt;br&gt;
end&lt;br&gt;
</description>
    </item>
    <item>
      <pubDate>Thu, 29 Nov 2007 20:53:01 -0500</pubDate>
      <title>Re: Combinatorics question</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/160110#403822</link>
      <author>Steven Lord</author>
      <description>&lt;br&gt;
"Bruno Luong" &amp;lt;b.luong@fogale.fr&amp;gt; wrote in message &lt;br&gt;
news:fin0sf$g6s$1@fred.mathworks.com...&lt;br&gt;
&amp;gt; "John D'Errico" &amp;lt;woodchips@rochester.rr.com&amp;gt; wrote in&lt;br&gt;
&amp;gt;&amp;gt; parts(10,4)&lt;br&gt;
&amp;gt;&amp;gt; ans =&lt;br&gt;
&amp;gt;&amp;gt;      7     1     1     1&lt;br&gt;
&amp;gt;&amp;gt;      6     2     1     1&lt;br&gt;
&amp;gt;&amp;gt;      5     3     1     1&lt;br&gt;
&amp;gt;&amp;gt;      5     2     2     1&lt;br&gt;
&amp;gt;&amp;gt;      4     4     1     1&lt;br&gt;
&amp;gt;&amp;gt;      4     3     2     1&lt;br&gt;
&amp;gt;&amp;gt;      4     2     2     2&lt;br&gt;
&amp;gt;&amp;gt;      3     3     3     1&lt;br&gt;
&amp;gt;&amp;gt;      3     3     2     2&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; Is it all combination? I find 84 possible solutions:&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; 1 1 1 7&lt;br&gt;
&amp;gt; 1 1 2 6&lt;br&gt;
&amp;gt; 1 1 3 5&lt;br&gt;
&amp;gt; 1 1 4 4&lt;br&gt;
&amp;gt; 1 1 5 3&lt;br&gt;
&amp;gt; 1 1 6 2&lt;br&gt;
&amp;gt; 1 1 7 1&lt;br&gt;
&amp;gt; 1 2 1 6&lt;br&gt;
&lt;br&gt;
*snip*&lt;br&gt;
&lt;br&gt;
Note that some of the elements of John's list appear multiple times in your &lt;br&gt;
list, just with the elements permuted.  For instance, [1 1 1 7] and [1 1 7 &lt;br&gt;
1] are each permutations of [7 1 1 1] in John's list.  The OP's question &lt;br&gt;
didn't specify whether the order of the elements in the vector was important &lt;br&gt;
for his application.&lt;br&gt;
&lt;br&gt;
-- &lt;br&gt;
Steve Lord&lt;br&gt;
slord@mathworks.com &lt;br&gt;
&lt;br&gt;
&lt;br&gt;
</description>
    </item>
    <item>
      <pubDate>Thu, 29 Nov 2007 21:41:05 -0500</pubDate>
      <title>Re: Combinatorics question</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/160110#403830</link>
      <author>Bruno Luong</author>
      <description>Same function, slightly improved.&lt;br&gt;
&lt;br&gt;
Bruno&lt;br&gt;
&lt;br&gt;
function [v m]=allVL1(n, L1)&lt;br&gt;
% function v=allVL1(n, L1)&lt;br&gt;
% INPUT&lt;br&gt;
%    n: length of the vector&lt;br&gt;
%    L1: desired L1 norm&lt;br&gt;
% OUTPUT:&lt;br&gt;
% v: (m x n) array such as sum(v,2)=L1&lt;br&gt;
%    all elements of v is naturel numbers {0,1,...}&lt;br&gt;
%    v contains all possible combinations&lt;br&gt;
% Remark:&lt;br&gt;
%    allVL1(n,L1-n)+1 for natural numbers defined as {1,2,...}&lt;br&gt;
&lt;br&gt;
if n==1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;v = L1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m = 1;&lt;br&gt;
else&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;v1 = (0:L1)';&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[vrest m]= arrayfun(@(j) allVL1(n-1, L1-j), v1, ...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'UniformOutput', false);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;v1 = arrayfun(@(n,m) n+zeros(m,1), v1, [m{:}]', ...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'UniformOutput', false);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;v = [cell2mat(v1) cell2mat(vrest)];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m = size(v,1);&lt;br&gt;
end&lt;br&gt;
</description>
    </item>
    <item>
      <pubDate>Thu, 29 Nov 2007 22:50:12 -0500</pubDate>
      <title>Re: Combinatorics question</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/160110#403845</link>
      <author>Bruno Luong</author>
      <description>Probably the best I can do: ;-)&lt;br&gt;
&lt;br&gt;
Bruno&lt;br&gt;
&lt;br&gt;
function v=allVL1(n, L1, head)&lt;br&gt;
% function v=allVL1(n, L1);&lt;br&gt;
% INPUT&lt;br&gt;
%    n: length of the vector&lt;br&gt;
%    L1: desired L1 norm&lt;br&gt;
% OUTPUT:&lt;br&gt;
%    v: (m x n) array such as sum(v,2)=L1&lt;br&gt;
%       all elements of v is naturel numbers {0,1,...}&lt;br&gt;
%       v contains all (=m) possible combinations&lt;br&gt;
% Remark:&lt;br&gt;
%    allVL1(n,L1-n)+1 for natural numbers defined as {1,2,...}&lt;br&gt;
&lt;br&gt;
if n==1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;v = L1;&lt;br&gt;
else&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;v = cell2mat(arrayfun(@(j) allVL1(n-1, L1-j, j), ...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(0:L1)', 'UniformOutput', false));&lt;br&gt;
end&lt;br&gt;
&lt;br&gt;
if nargin&amp;gt;=3&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;v = [head+zeros(size(v,1),1) v];&lt;br&gt;
end&lt;br&gt;
</description>
    </item>
    <item>
      <pubDate>Fri, 30 Nov 2007 10:10:50 -0500</pubDate>
      <title>Re: Combinatorics question</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/160110#403908</link>
      <author>Greg von Winckel</author>
      <description>Thanks for all the ideas. I will check out your codes. I do&lt;br&gt;
indeed need every permutation of the solution vectors. &lt;br&gt;
&lt;br&gt;
I'm working on some sparse grid codes in MATLAB and the&lt;br&gt;
interpolants on a sparse grid of order N are constructed from&lt;br&gt;
all possible combinations of tensor product interpolants&lt;br&gt;
where the indices of the constituent dimensions add up to N. &lt;br&gt;
&lt;br&gt;
Thanks for the suggestions!&lt;br&gt;
&lt;br&gt;
Greg&lt;br&gt;
</description>
    </item>
    <item>
      <pubDate>Fri, 30 Nov 2007 10:43:54 -0500</pubDate>
      <title>Re: Combinatorics question</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/160110#403913</link>
      <author>Bruno Luong</author>
      <description>I have submitted my code in FEX. You can also select the&lt;br&gt;
criteria L1 norm by ==, or &amp;lt;= or &amp;lt; to some quantity.&lt;br&gt;
&lt;br&gt;
Bruno&lt;br&gt;
</description>
    </item>
    <item>
      <pubDate>Fri, 30 Nov 2007 10:57:23 -0500</pubDate>
      <title>Re: Combinatorics question</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/160110#403916</link>
      <author>Greg von Winckel</author>
      <description>Bruno, your code is very compact and looks good, although I&lt;br&gt;
should mention that zero is not a natural number. I can make&lt;br&gt;
the necessary modifications though.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
"Bruno Luong" &amp;lt;b.luong@fogale.fr&amp;gt; wrote in message&lt;br&gt;
&amp;lt;fiopha$jb7$1@fred.mathworks.com&amp;gt;...&lt;br&gt;
&amp;gt; I have submitted my code in FEX. You can also select the&lt;br&gt;
&amp;gt; criteria L1 norm by ==, or &amp;lt;= or &amp;lt; to some quantity.&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; Bruno&lt;br&gt;
&lt;br&gt;
</description>
    </item>
    <item>
      <pubDate>Fri, 30 Nov 2007 11:12:35 -0500</pubDate>
      <title>Re: Combinatorics question</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/160110#403917</link>
      <author>Bruno Luong</author>
      <description>"Greg von Winckel" &amp;lt;gregvw@gmail.com&amp;gt; wrote in message&lt;br&gt;
&amp;lt;fioqaj$rrr$1@fred.mathworks.com&amp;gt;...&lt;br&gt;
&amp;gt; Bruno, your code is very compact and looks good, although I&lt;br&gt;
&amp;gt; should mention that zero is not a natural number. I can make&lt;br&gt;
&amp;gt; the necessary modifications though.&lt;br&gt;
&amp;gt; &lt;br&gt;
&lt;br&gt;
Sure, feel free to modify it. Or as I write above, you could&lt;br&gt;
also call the original function:&lt;br&gt;
&lt;br&gt;
V = allVL1(n,L1-n)+1&lt;br&gt;
&lt;br&gt;
and this will return the vectors of natural numbers starting&lt;br&gt;
from 1, and satified sum(V,2)=L1.&lt;br&gt;
&lt;br&gt;
Bruno&lt;br&gt;
&lt;br&gt;
</description>
    </item>
  </channel>
</rss>
