5 votos

Creación de una matriz tridiagonal en matlab

¿Cómo puedo crear una matriz tridiagonal que pueda utilizar para la factorización de Crout? Y, no tengo ningún código sobre cómo crear uno ya que soy nuevo en matlab.

enter image description here

Ok, por favor, ayúdame a entender qué significa la frase "El programa debe emitir el $\infty$ ¿Qué significa en este caso "la norma del residuo de la solución calculada y el número de iteraciones utilizadas"? Estoy muy confuso.

11voto

sliders_alpha Puntos 168
>> n = 10;
>> full(gallery('tridiag',n,-1,2,-1))

ans =

     2    -1     0     0     0     0     0     0     0     0
    -1     2    -1     0     0     0     0     0     0     0
     0    -1     2    -1     0     0     0     0     0     0
     0     0    -1     2    -1     0     0     0     0     0
     0     0     0    -1     2    -1     0     0     0     0
     0     0     0     0    -1     2    -1     0     0     0
     0     0     0     0     0    -1     2    -1     0     0
     0     0     0     0     0     0    -1     2    -1     0
     0     0     0     0     0     0     0    -1     2    -1
     0     0     0     0     0     0     0     0    -1     2

Crout:

% Source: http://users.csc.tntech.edu/~mjkosa/3020/matlab/crout.m
% MATLAB implementation of Crout reduction algorithm (p. 140 of your book)
function [L,U] = crout(A,n)  % returns two matrices

for i = 1:n
    L(i,1) = A(i,1);
end

for j = 1:n
    U(1,j) = A(1,j)/L(1,1);
end

for j = 2:n
    for i = j:n
        sum = 0.0;
        for k = 1:(j-1)
            sum = sum + L(i,k) * U(k,j);
        end
        L(i,j) = A(i,j) - sum;
    end

    U(j,j) = 1;

    for i = (j+1):n
        sum = 0.0;
        for k = 1:(j-1)
            sum = sum + L(j,k) * U(k,i);
        end
        U(j,i) = (A(j,i) - sum)/L(j,j);
    end
end

10voto

CTKeane Puntos 530

La parte tridiagonal puede crearse mediante sumas de llamadas a diag()

n = 5 ;
nOnes = ones(n, 1) ;
x = diag(2 * nOnes, 0) - diag(nOnes(1:n-1), -1) - diag(nOnes(1:n-1), 1)

x =

     2    -1     0     0     0
    -1     2    -1     0     0
     0    -1     2    -1     0
     0     0    -1     2    -1
     0     0     0    -1     2

4voto

user31462 Puntos 37

En su caso

toeplitz([2 -1 zeros(1, N-2)], [2 -1 zeros(1, N-2)])

o incluso

toeplitz([2 -1 zeros(1, N-2)])

-1voto

Brandon Graham Puntos 1

También puedes utilizar conv2 para crear una matriz tridiagonal

B = conv2(eye(5),[-1 2 -1],'same');

B =

 2    -1     0     0     0
-1     2    -1     0     0
 0    -1     2    -1     0
 0     0    -1     2    -1
 0     0     0    -1     2

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X