2016-03-24 21 views
-2

a+b+c=2, a,b,c>=0 denklemi için, dizi içindeki tamsayı çözümlerini döndürebilen bir MATLAB işlevi var mı? Yani:Tamsayı çözümü hakkında a + b + c = 2

[0 0 2; 0 2 0; 2 0 0; 0 1 1; 1 0 1; 1 1 0] 

Not a1+a2+..an=k, ai,k>=0 için, (n-1+k)!/((n-1)!*k!) farklı bir tam sayıdır çözümler vardır.

+1

Hayır, ama Dosya Değişimi birkaç gönderimler olduğunu size bir tamsayı bölümleri verecektir. – beaker

cevap

2

Sembolik Matematik Araç Kutusu'na erişiminiz varsa, combinat::compositions MuPAD işlevini kullanabilirsiniz.

>> x = evalin(symengine, 'combinat::compositions(2, Length=3, MinPart=0)') 
x = 
[ [2, 0, 0], [1, 1, 0], [1, 0, 1], [0, 2, 0], [0, 1, 1], [0, 0, 2]] 

Daha sonra sayıların hücre dizisine döndü sembolik değişkenler dönüştürebilirsiniz: Siz de MuPAD veya call it from MATLAB doğrudan kullanabilirsiniz

>> x = arrayfun(@double, x, 'Uniform',false) 
x = 
    [1x3 double] [1x3 double] [1x3 double] [1x3 double] [1x3 double] [1x3 double] 

>> celldisp(x) 
x{1} = 
    2  0  0 
x{2} = 
    1  1  0 
x{3} = 
    1  0  1 
x{4} = 
    0  2  0 
x{5} = 
    0  1  1 
x{6} = 
    0  0  2 
+0

Çok teşekkürler! Bu arada, eksenler boyunca noktaları kolayca yansıtmanın bir yolu var mı? örneğin [1 1 1] 8 aynaya sahip olabilir: [1 1 1; 1 1 -1; 1 -1 1 ...] –

+0

@law_light hmm, işte hızlı bir uygulama: http://pastebin.com/MPGpuHcb. Her uzunluk için çalışır. – Amro

+0

Büyük teşekkürler! etkileyici! –

İlgili konular