I need to reshape a portion of a matrix computed with the values of a bell triangle where n is the number of rows of a matrix. How can I generate a matrix contain the bell values? I mean, as an example, for n= 4 but could be any value:
1
1 2
2 3 5
5 7 10 15
empty space with 0.

6 Kommentare

Guillaume
Guillaume am 22 Mai 2015
How do you represent that triangle as a matrix (which by definition is a rectangle) ?
Millone
Millone am 22 Mai 2015
Sorry, you are right, it is a rectangle. I would just put 0 in the empty cells.
Millone
Millone am 22 Mai 2015
Bearbeitet: Millone am 22 Mai 2015
I would non even mind to have it on one side of the matrix:
1 0 0 0
1 2 0 0
2 3 5 0
5 7 10 15
Titus Edelhofer
Titus Edelhofer am 22 Mai 2015
Hi Millone,
a loop over the rows and using cumsum will do the job ... have you tried this?
Titus
Millone
Millone am 22 Mai 2015
No, I have no tried it but I give it a test. Thanks
Millone
Millone am 22 Mai 2015
I do not get it! I am just approaching Matlab!

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

John D'Errico
John D'Errico am 22 Mai 2015

0 Stimmen

Simple. Just use loops.
n = 5;
BellTri = zeros(n);
BellTri(1,1) = 1;
for i = 2:n
BellTri(i,1) = BellTri(i-1,i-1);
for j = 2:i
BellTri(i,j) = BellTri(i - 1,j-1) + BellTri(i,j-1);
end
end
BellTri
BellTri =
1 0 0 0 0
1 2 0 0 0
2 3 5 0 0
5 7 10 15 0
15 20 27 37 52

Weitere Antworten (3)

Titus Edelhofer
Titus Edelhofer am 22 Mai 2015

3 Stimmen

O.k., when there is a full solution, I'm happy to share mine as well ;-)
function B = bell(n)
B = zeros(n);
B(1,1) = 1;
for row=2:n
B(row, 1:row) = B(row-1,row-1) + cumsum([0 B(row-1, 1:row-1)]);
end
Titus
Andrei Bobrov
Andrei Bobrov am 22 Mai 2015

2 Stimmen

n = 5;
a = zeros(n);
a(1) = 1;
for jj = 1:n-1
a(jj+1,1:jj+1) = cumsum(a(jj,[jj,1:jj]),2);
end
Guillaume
Guillaume am 22 Mai 2015

0 Stimmen

Assuming you're talking about this, I've tried to come up with a clever way to generate it, but didn't find any (didn't spend too much time on it either). When all else fail, loops always work:
bell = zeros(n);
bell(1) = 1;
for row = 2 : n
bell(row, 1) = bell(row-1, row-1);
for col = 2 : row
bell(row, col) = bell(row, col-1) + bell(row-1, col-1);
end
end

Kategorien

Produkte

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by