Angenommen, ich habe einen symmetrischen Zeilenvektor mit einer ungeraden Länge, wobei jedes Element kleiner als das nächste in der ersten Hälfte des Vektors ist und jedes Element größer als das nächste in der zweiten ist halb und das mittlere Element ist das größte. (z.B. [1 2 3 2 1]
oder [10 20 50 20 10]
).Erstellen Sie eine "Pyramide" -Matrix
Ich möchte eine quadratische Matrix erstellen, wo dieser Zeilenvektor seine mittlere Zeile ist und der äquivalente Spaltenvektor (v'
) seine mittlere Spalte und jede andere Zeile oder Spalte eine reduzierte Version des angegebenen Vektors gemäß dem mittleren Element ist in dieser Zeile oder Spalte. Und wenn es keine "ursprünglichen Elemente" mehr gibt, setzen wir 0
.
Beispiele:
wenn v = [1 2 3 2 1]
wir
0 0 1 0 0
0 1 2 1 0
1 2 3 2 1
0 1 2 1 0
0 0 1 0 0
wenn v = [3 5 3]
wir
0 3 0
3 5 3
0 3 0
bekommen bekommen, was ich bisher tat ich es geschafft, eine Matrix mit v
als der mittleren Reihe zu erstellen und v'
als die mittlere Spalte mit diesem Code schrieb ich:
s = length(vector);
matrix= zeros(s);
matrix(round(s/2),:) = vector;
matrix(:, round(s/2)) = vector';
aber blieb bei der Zuweisung der anderen Werte stecken.
@Adrian und @AndrasDeak: die 'hankel' Funktion verwendet' bsxfun' intern. – horchler
Oh, nicht! Die Art, wie ich 'bsxfun' benutze, ist nicht ähnlich wie 'hankel' mit 'bsxfun' implementiert wurde. AFAIK hankel hat 'bsxfun (@ plus'. – Divakar