The following code builds a finite difference differentiation matrix on an irregular boundary. I would like to vectorise it
clear all N=10; t= linspace(-1,1,N); [X,Y]=meshgrid(t); Z = X + 1i*Y; idx = abs(Z)<=1; mylabels= zeros(size(idx)); F = 0; mylabels(idx) = 1:sum(idx(:)); mylabels = [zeros(1,length(X)+2);zeros(length(X),1), mylabels, zeros(length(X),1);zeros(1,length(X)+2)]; d =max(max(mylabels)) C= zeros(d,d); for i=1:N for j=1:N %If the node its self is zero then we dont care, so just move on if mylabels(i,j) ~= 0 K = [[mylabels(i-1,j-1) == 0 mylabels(i-1,j ) == 0 mylabels(i-1,j+1) == 0 ]; [mylabels(i ,j-1) == 0 mylabels(i ,j ) == 0 mylabels(i ,j+1) == 0 ]; [mylabels(i+1,j-1) == 0 mylabels(i+1,j ) == 0 mylabels(i+1,j+1) == 0 ]]; if sum(sum(K)) == 0 C(mylabels(i,j),mylabels(i ,j )) = -2; C(mylabels(i,j),mylabels(i-1,j )) = 2; C(mylabels(i,j),mylabels(i+1,j )) = 2; C(mylabels(i,j),mylabels(i ,j+1)) = 6; C(mylabels(i,j),mylabels(i-1,j+1)) = 1; C(mylabels(i,j),mylabels(i+1,j+1)) = 1; C(mylabels(i,j),mylabels(i ,j-1)) = 1; C(mylabels(i,j),mylabels(i-1,j-1)) = 1; C(mylabels(i,j),mylabels(i+1,j-1)) = 1; end end end end spy(C)