tridiagonal matrix with a corner entry from upper diagonal
Ältere Kommentare anzeigen
I am trying a construct a matlab code such that it will solve an almost tridiagonal matrix. The input I want to put in is the main diagonal (a), the upper diagonal (b) and the lower diagonal and the RHS vector (r). The matrix I want to solve looks like this:
| a(1) b(1) |
| c(1) a(2) b(2) |
| c(2) a(3) b(3) |
| . . . |
| . . . |
| . . b(n-1) |
| b(n) c(n) a(n) |
I can construct a code that works for the tridiagonal, but that corner entry got me, especially when it is supposed to come from the original input c.
This is what I got so far:
function y = tridiagonal ( c, a, b, r )
n = length ( a );
for i = 1 : n-1 b(i) = b(i) / a(i); a(i+1) = a(i+1) - c(i) * b(i); end
r(1) = r(1) / a(1); for i = 2 : n r(i) = ( r(i) - c(i-1) * r(i-1) ) / a(i); end
for i = n-1 : -1 : 1 r(i) = r(i) - r(i+1) * b(i); end
if ( nargout == 0 ) disp ( r ) else y = r; end
Thanks for any input!
1 Kommentar
Guillaume
am 22 Apr. 2015
The c entry on the last row should be c(n-1) not c(n). Where does c(n) go? The last column of the first row?
Akzeptierte Antwort
Weitere Antworten (2)
Ahmet Cecen
am 22 Apr. 2015
0 Stimmen
Check out spdiags and diag functions for a much easier way to do this.
Jacob Lane
am 16 Apr. 2019
0 Stimmen
I am having trouble with trying to write a function for a tridiagonal matrix. I am just trying to prove that one is in fact tridiagonal. Can anyone help me?
Kategorien
Mehr zu Creating and Concatenating Matrices finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!