1 votos

Creación de la matriz laplaciana de vecinos más cercanos

Quiero crear una fórmula general para un $N \times N$ matriz laplaciana de los vecinos más cercanos, de manera que pueda escribir un archivo m en MATLAB para calcular la matriz para un determinado $N$ .

La matriz laplaciana de los vecinos más cercanos tiene la siguiente forma

\begin{equation} L=\left[ \begin{array}{ccc} -2 & 1 & 0 & \cdots & 0 & 1\\ 1 & -2 & 1 & 0 & \cdots & 0\\ \vdots & \vdots & \vdots & \vdots & \vdots & \vdots \\ 0 & \cdots & 0 & 1 & -2 & 1\\ 1 & 0 & \cdots & 0 & 1 & -2\\ \end{array} \[derecha]. \fin{s} {equipamiento}

donde los elementos de la diagonal principal son todos $-2$ y tenemos dos elementos de $1$ antes y después de cada elemento de la diagonal principal.

Agradecería cualquier ayuda...

2voto

David Puntos 496

Puede que esté interpretando mal lo que has escrito como el $L$ matriz, pero creo que se puede utilizar

L = gallery('tridiag',ones(1,N-1),-2*ones(1,N),ones(1,N-1));

Esto devolverá la matriz tridiaganol en forma dispersa. Puede envolverla en full() para convertirla en una matriz estándar. Luego puede cambiar manualmente las esquinas superior e inferior a 1.

Dime si esto funciona o si he entendido mal la forma de L.

0voto

Joe Puntos 91

Otra forma de hacerlo para matrices completas es:

>> N=5;
>> L=diag(-2*ones(1,N),0)+diag(ones(1,N-1),1)+diag(ones(1,N-1),-1)
L =

  -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

>> L(1,N)=1
L =

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

>> L(N,1)=1
L =

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

>>

0voto

Esa matriz simétrica es casi una tridiagonal Toeplitz matriz. Por lo tanto,

r = [-2, 1, zeros(1,n-2)];
L = toeplitz(r);

Actualiza ahora las esquinas noreste y suroeste:

L(1,n) = 1;
L(n,1) = 1;

0voto

greg Puntos 156

Para matrices pequeñas (por ejemplo $n=10$ ), intente

L = eye(10)
L = circshift(L,[1 0]) + circshift(L,[0 1]) - 2*L

Para dimensiones mayores (por ejemplo $n=1000$ ), probablemente querrá una matriz dispersa

L = speye(1000)
L = circshift(L,[1 0]) + circshift(L,[0 1]) - 2*L

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