El código es este, primero construyo unos vectores y los meto como diagonales de una matriz sparse
d1=(-4)*ones(n1+n3-1,n8); %La inicializamos así y conservaremos los puntos interiores
B1=zeros(n1+n3-1,n8); %Construyo el vector de términos independientes inicializado a 0
for i=1:(n1+n3-1)
for j=1:n8
if d1(i,j)==(-4) %puntos interiores que se iran sobreescribiendo segun convenga
d2sup(i,j)=1;
d2inf(i,j)=1;
d3sup(i,j)=1;
d3inf(i,j)=1;
end
if i==1 && j>1 && j<n8 %Frontera OG
d1(i,j)=-4;
d2sup(i,j)=2;
d2inf(i,j)=0;
d3sup(i,j)=1;
d3inf(i,j)=1;
B1(i,j)=b;
end
if i>1 && i<n1 && j==1 %Frontera OA
d1(i,j)=a;
d2sup(i,j)=1;
d2inf(i,j)=1;
d3sup(i,j)=2;
d3inf(i,j)=0;
B1(i,j)=c;
end
if i==n1 && j>1 && j<n2 %Frontera AB
d1(i,j)=a;
d2sup(i,j)=0;
d2inf(i,j)=2;
d3sup(i,j)=1;
d3inf(i,j)=1;
B1(i,j)=c;
end
if i>n1 && i<(n1+n3-1) && j==n2 %Frontera BC
d1(i,j)=a;
d2sup(i,j)=1;
d2inf(i,j)=1;
d3sup(i,j)=2;
d3inf(i,j)=0;
B1(i,j)=c;
end
if i==(n1+n3-1) && j>n2 && j<(n2+n4-1) %Frontera CD
d1(i,j)=a;
d2sup(i,j)=0;
d2inf(i,j)=2;
d3sup(i,j)=1;
d3inf(i,j)=1;
B1(i,j)=c;
end
if i>n7 && i<(n7+n5-1) && j==(n2+n4-1) %Frontera DE
d1(i,j)=a;
d2sup(i,j)=1;
d2inf(i,j)=1;
d3sup(i,j)=0;
d3inf(i,j)=2;
B1(i,j)=c;
end
if i==n7 && j>(n2+n4-1) && j<n8 %Frontera EF
d1(i,j)=a;
d2sup(i,j)=0;
d2inf(i,j)=2;
d3sup(i,j)=1;
d3inf(i,j)=1;
B1(i,j)=c;
end
if i>1 && i<n7 && j==n8 %Frontera FG
d1(i,j)=a;
d2sup(i,j)=1;
d2inf(i,j)=1;
d3sup(i,j)=0;
d3inf(i,j)=2;
B1(i,j)=c;
end
if i>n1 && j<n2 %Espacio Inferior
d1(i,j)=1;
d2sup(i,j)=0;
d2inf(i,j)=0;
d3sup(i,j)=0;
d3inf(i,j)=0;
B1(i,j)=Texterna;
end
if i>n7 && j>(n2+n4-1) %Espacio Superior
d1(i,j)=1;
d2sup(i,j)=0;
d2inf(i,j)=0;
d3sup(i,j)=0;
d3inf(i,j)=0;
B1(i,j)=Texterna;
end
if i==1 && j==1 %Esquina O
d1(i,j)=a;
d2sup(i,j)=2;
d2inf(i,j)=0;
d3sup(i,j)=2;
d3inf(i,j)=0;
B1(i,j)=d;
end
if i==n1 && j==1 %Esquina A
d1(i,j)=e;
d2sup(i,j)=0;
d2inf(i,j)=2;
d3sup(i,j)=2;
d3inf(i,j)=0;
B1(i,j)=f;
end
if i==(n1+n3-1) && j==n2 %Esquina C
d1(i,j)=e;
d2sup(i,j)=0;
d2inf(i,j)=2;
d3sup(i,j)=2;
d3inf(i,j)=0;
B1(i,j)=f;
end
if i==(n1+n3-1) && j==(n2+n4-1) %Esquina D
d1(i,j)=e;
d2sup(i,j)=0;
d2inf(i,j)=2;
d3sup(i,j)=0;
d3inf(i,j)=2;
B1(i,j)=f;
end
if i==n7 && j==n8 %Esquina F
d1(i,j)=e;
d2sup(i,j)=0;
d2inf(i,j)=2;
d3sup(i,j)=0;
d3inf(i,j)=2;
B1(i,j)=f;
end
if i==1 && j==n8 %Esquina G
d1(i,j)=a;
d2sup(i,j)=2;
d2inf(i,j)=0;
d3sup(i,j)=0;
d3inf(i,j)=2;
B1(i,j)=d;
end
end
end
diag1=d1(:); %ponemos en forma de columna la diagonal 1
d2sup=d2sup(:); %ponemos en forma de columna las diagonales 2
d2inf=d2inf(:);
d3sup=d3sup(:); %ponemos en forma de columna las diagonales 3
d3inf=d3inf(:);
B=B1(:); %ponemos en forma de columna el vector de los términos independientes
m=0; %arreglamos el tamaño de las diagonales 2
for k=1:n8*(n1+n3-1) %arreglamos el tamaño de la diagonal 2 inf
if m~=0
diag2inf(m,1)=d2inf(k,1);
m=m+1;
else
m=1;
end
end
for k=1:n8*(n1+n3-1)-1 %arreglamos el tamaño de la diagonal 2 sup
diag2sup(k,1)=d2sup(k,1);
end
m=0; %arreglamos el tamaño de las diagonales 3
for k=1:n8*(n1+n3-1) %arreglamos el tamaño de la diagonal 3 inf
if m<n8
m=m+1;
else
m=m+1;
diag3inf(m-n8,1)=d3inf(k,1);
end
end
for k=1:n8*(n1+n3-1)-n8 %arreglamos el tamaño de la diagonal 3 sup
diag3sup(k,1)=d3sup(k,1);
end
%------------------------------------------------------------------------
%Colocamos las diagonales en la matriz
matrizA=diag(diag1)+diag(diag2sup,1)+diag(diag2inf,-1)+diag(diag3sup,n8)+diag(diag3inf,-n8);
A=sparse(matrizA);