Diag ist die normale MATLAB-Lösung (wie von posdef hervorgehoben).
D = diag(vec);
ergibt eine Matrix mit Diagonalelementen nach Bedarf.
In manchen Anwendungen ist es vielleicht besser, eine dünnbesetzte Matrix zu erstellen, da eine Diagonalmatrix recht dünnbesetzt ist. Bei der Multiplikation von Matrizen hilft dies, die Zahl der unnötigen Operationen zu verringern.
n = length(vec);
D = spdiags(vec(:),0,n,n);
Wenn Sie die Zuordnung wirklich in expliziter Form vornehmen wollen, verwenden Sie einen einzelnen linearen Index wie diesen:
n = length(vec);
D = zeros(n);
D(cumsum([1,repmat(n+1,1,n-1)])) = vec;
Oder Sie können die Funktion sub2ind verwenden, um eine Reihe von Indizes in einen einzigen Index umzuwandeln.
5 Stimmen
Können Sie Ihre MATLAB-Installation überprüfen, da ich glaube, dass es ein Problem mit den installierten Hilfedateien gibt? Ich habe gerade "diagonal vector" in den MATLAB-Hilfedialog eingegeben und das allererste Beispiel auf der allerersten Seite ist dieses Beispiel mit der Verwendung von diag().
3 Stimmen
@cMinor Danke, dass Sie das hier gefragt haben, diese Frage war für mich nützlich.