How can I store the whole diagonal and not only the first element (For loop)

6 Ansichten (letzte 30 Tage)
% Part 3.1: Diagonal
%A
rng('default')
r2 = randi(100,3,3); % Creating a 3x3 matrix, with random values from 1 to 100
%B
d = diag(r2) % Obtain the diagonal elements
%C
Metod1 = d(2,1) % Using two parameters (row 2, column 1)
Metod2 = d(3) % Using one parametr (3rd element)
%D
for K = 1 : size(d,1)
d(K,K)
end
I have a problem in storing the diagonal values of the Matrix. It somehow only stores the first entry of the diagonal, where instead it should store 3 entries in total. How can I change the for loop so it also stores the rest of the entries?
Also I get this error message when using the for loop:
"Index in position 2 exceeds array bounds. Index must not exceed 1"
What does it mean and how can I fix this?

Akzeptierte Antwort

VBBV
VBBV am 8 Mai 2022
% Part 3.1: Diagonal
%A
rng('default')
r2 = randi(100,3,3); % Creating a 3x3 matrix, with random values from 1 to 100
%B
d = diag(r2) % Obtain the diagonal elements
d = 3×1
82 64 96
%C
Metod1 = d(2,1) % Using two parameters (row 2, column 1)
Metod1 = 64
Metod2 = d(3) % Using one parametr (3rd element)
Metod2 = 96
%D
for K = 1 : size(d,1)
D(K,K) = d(K); % d matrix has only 3 rows , 1 col
end
D % declare/assign a new matrix which stores all elements of d into D diagonally.
D = 3×3
82 0 0 0 64 0 0 0 96
  2 Kommentare
Jonas Morgner
Jonas Morgner am 8 Mai 2022
Awesome Thank you very much! Unfortunately, I forgot to add that I need to store it in a 1x3 or 3x1 vector. How would the code differ if I want to store it in this specific new vector?
VBBV
VBBV am 8 Mai 2022
You can simply use
D = d; % With out using loop
for K = 1 : size(d,1)
D(K,1) = d(K); % using loop
end

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Operating on Diagonal Matrices finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by