Anyone can help me to improve this code?
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Dear friends; I have a code which is not suitable for big matrices or unlimited matrice. I would like to make it better because some times i have a very big matrices such as A = (100,100)
A = zeros(n,n) matrix.
R = [ 0 0 0 1 1] vector
c=2
if R(5,1) == 1
A(5,5) = c
A(5,4) = - c
A(4,5) = - c
else
A(5,5) = 0
A(5,4) = 0
A(4,5) = 0
end
if R(4,1) == 1
A(4,4) = c + A(5,5)
A(3,4) = - c
A(4,3) = - c
else
A(4,4) = 0
A(3,4) = 0
A(4,3) = 0
end
.
.
.
ans
A =
0 0 0 0 0
0 0 0 0 0
0 0 0 -2 0
0 0 -2 4 -2
0 0 0 -2 2
Thanks in advance, your help always appreciated
0 Kommentare
Akzeptierte Antwort
Andrei Bobrov
am 22 Mai 2013
Bearbeitet: Andrei Bobrov
am 22 Mai 2013
[EDIT]
n = 5; %
R = [0 0 0 1 1]';% eg
c = 2; %
A1 = spdiags(-c*R,1,n,n);
A = A1 + A1' + spdiags(c*(R + [R(2:end);0]),0,n,n);
full(A)
OR
Rin(:,[1 3 2]) = c*[-[circshift(R,-1) R],R + [R(2:end);0]];
A = spdiags(Rin,-1:1,n,n);
full(A)
OR
Rin(:,[1 3 2]) = c*[-[circshift(R,-1) R],conv(R,[1;1],'same')];
A = spdiags(Rin,-1:1,n,n);
full(A)
3 Kommentare
Weitere Antworten (2)
David Sanchez
am 22 Mai 2013
Ii this what you need?
for k=1:n-1
if R(k,1) == 1
A(k,k)= c + A(k+1,k+1);
else
A(k,k) = A(k+1,k+1);
end
4 Kommentare
David Sanchez
am 22 Mai 2013
I see, you have to start the for loop by the end.
c=2;
if R(5,1) == 1
A(5,5) = c
A(5,4) = - c
A(4,5) = - c
else
A(5,5) = 0
A(5,4) = 0
A(4,5) = 0
end
for k=(n-1):-1:1
if R(k) == 1
A(k,k)= c + A(k+1,k+1);
else
A(k,k) = A(k+1,k+1);
end
Siehe auch
Kategorien
Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!