0001
0002
0003 function [M]=Fd_mtx(d, a, bound)
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026 n = size(a, 1)-2;
0027 if (d==1)
0028 bar_a = zeros(n,3);
0029 for i=1:n
0030
0031 bar_a(i,2)=(a(i+2)+2*a(i+1)+a(i))*0.25;
0032 bar_a(i,1)=(a(i)+a(i+1))*0.5;
0033 bar_a(i,3)=(a(i+1)+a(i+2))*0.5;
0034 end
0035 D1=2*eye(n)-diag(ones(n-1,1),1)-diag(ones(n-1,1),-1);
0036
0037 M=D1;
0038 bar_a_M=spdiags(bar_a,[-1,0,1],n,n);
0039 M = M.*bar_a_M;
0040 return;
0041 end
0042
0043 if (d==2)
0044 if (bound==0)
0045 bar_a = zeros(n^2, 5);
0046 for i=1:n
0047 for j=1:n
0048 bar_a((i-1)*n+j, 3) = (a(i+1,j+1)+a(i+2,j+1)+a(i+1,j+2)+a(i+2,j+2))*0.25;
0049 if (j>1) bar_a((i-1)*n+j-1, 2) = (a(i+1,j+1)+a(i+2,j+1))*0.5; end;
0050 if (j<n) bar_a((i-1)*n+j+1, 4) = (a(i+1,j+2)+a(i+2,j+2))*0.5; end;
0051 if (i>1) bar_a((i-1-1)*n+j, 1) = (a(i+1,j+1)+a(i+1,j+2))*0.5; end;
0052 if (i<n) bar_a((i+1-1)*n+j, 5) = (a(i+2,j+1)+a(i+2,j+2))*0.5; end;
0053 end;
0054 end;
0055 D1 = spdiags(-1*ones(n,1), [-1], n, n)+spdiags(2*ones(n,1), [0], n, n)+spdiags(-1*ones(n,1), [1], n, n);
0056 M = kron(D1*(n+1)^2, speye(n))+kron(speye(n), D1*(n+1)^2);
0057 bar_a_M = spdiags(bar_a, [-n, -1, 0, 1, n], n^2, n^2);
0058 M = M.*bar_a_M;
0059 else
0060 wa = zeros(n+3,n+3);
0061 wa(1:n+2,1:n+2)=a;
0062 wa(n+3,1:n+2)=a(n+2,:);
0063 wa(1:n+2,n+3)=a(:,n+2);
0064 wa(n+3,n+3)=a(n+2,n+2);
0065 n = n+2;
0066 bar_a = zeros(n^2, 5);
0067 for i=1:n
0068 for j=1:n
0069 bar_a((i-1)*n+j, 3) = (wa(i,j)+wa(i+1,j)+wa(i,j+1)+wa(i+1,j+1))*0.25;
0070 if (j>1) bar_a((i-1)*n+j-1, 2) = (wa(i,j)+wa(i+1,j))*0.5; end;
0071 if (j<n) bar_a((i-1)*n+j+1, 4) = (wa(i,j+1)+wa(i+1,j+1))*0.5; end;
0072 if (i>1) bar_a((i-1-1)*n+j, 1) = (wa(i,j)+wa(i,j+1))*0.5; end;
0073 if (i<n) bar_a((i+1-1)*n+j, 5) = (wa(i+1,j)+wa(i+1,j+1))*0.5; end;
0074 end;
0075 end;
0076 D1 = spdiags(-1*ones(n,1), [-1], n, n)+spdiags(2*ones(n,1), [0], n, n)+spdiags(-1*ones(n,1), [1], n, n);
0077 D1(1,1)=1;
0078 D1(n,n)=1;
0079 M = kron(D1*(n-1)^2, speye(n))+kron(speye(n), D1*(n-1)^2);
0080 bar_a_M = spdiags(bar_a, [-n, -1, 0, 1, n], n^2, n^2);
0081 M = M.*bar_a_M;
0082 end;
0083 end;
0084
0085 if (d==3)
0086 if (bound==0)
0087 bar_a = zeros(n^3, 7);
0088 wa=a;
0089 for i=1:n
0090 for j=1:n
0091 for k=1:n
0092 bar_a((i-1)*n^2+(j-1)*n+k, 4) = (wa(i+1,j+1,k+1)+wa(i+2,j+1,k+1)+wa(i+1,j+2,k+1)+wa(i+2,j+2,k+1)+wa(i+1,j+1,k+2)+wa(i+2,j+1,k+2)+wa(i+1,j+2,k+2)+wa(i+2,j+2,k+2))*0.125;
0093 if (k>1) bar_a((i-1)*n^2+(j-1)*n+k-1, 3) = (wa(i+1,j+1,k+1)+wa(i+2,j+1,k+1)+wa(i+1,j+2,k+1)+wa(i+2,j+2,k+1))*0.25; end;
0094 if (k<n) bar_a((i-1)*n^2+(j-1)*n+k+1, 5) = (wa(i+1,j+1,k+2)+wa(i+2,j+1,k+2)+wa(i+1,j+2,k+2)+wa(i+2,j+2,k+2))*0.25; end;
0095
0096 if (j>1) bar_a((i-1)*n^2+(j-1-1)*n+k, 2) = (wa(i+1,j+1,k+1)+wa(i+2,j+1,k+1)+wa(i+1,j+1,k+2)+wa(i+2,j+1,k+2))*0.25; end;
0097 if (j<n) bar_a((i-1)*n^2+(j+1-1)*n+k, 6) = (wa(i+1,j+2,k+1)+wa(i+2,j+2,k+1)+wa(i+1,j+2,k+2)+wa(i+2,j+2,k+2))*0.25; end;
0098
0099 if (i>1) bar_a((i-1-1)*n^2+(j-1)*n+k, 1) = (wa(i+1,j+1,k+1)+wa(i+1,j+2,k+1)+wa(i+1,j+1,k+2)+wa(i+1,j+2,k+2))*0.25; end;
0100 if (i<n) bar_a((i+1-1)*n^2+(j-1)*n+k, 7) = (wa(i+2,j+1,k+1)+wa(i+2,j+2,k+1)+wa(i+2,j+1,k+2)+wa(i+2,j+2,k+2))*0.25; end;
0101 end;
0102 end;
0103 end;
0104 D1 = spdiags(-1*ones(n,1), [-1], n, n)+spdiags(2*ones(n,1), [0], n, n)+spdiags(-1*ones(n,1), [1], n, n);
0105 M = kron(kron(D1*(n+1)^2, speye(n)), speye(n))+kron(kron(speye(n), D1*(n+1)^2), speye(n)) + kron(kron(speye(n), speye(n)), D1*(n+1)^2);
0106 bar_a_M = spdiags(bar_a, [-n^2, -n, -1, 0, 1, n, n^2], n^3, n^3);
0107 M = M.*bar_a_M;
0108 else
0109 wa = zeros(n+3,n+3,n+3);
0110 wa(1:n+2, 1:n+2, 1:n+2) = a;
0111 wa(n+3, 1:n+2, 1:n+2) = a(n+2, :, :);
0112 wa(1:n+2, n+3, 1:n+2) = a(:, n+2, :);
0113 wa(1:n+2, 1:n+2, n+3) = a(:, :, n+2);
0114 wa(1:n+2, n+3, n+3) = a(:, n+2, n+2);
0115 wa(n+3, 1:n+2, n+3) = a(n+2, :, n+2);
0116 wa(n+3, n+3, 1:n+2) = a(n+2, n+2, :);
0117 wa(n+3,n+3,n+3)=a(n+2,n+2,n+2);
0118 n = n+2;
0119 bar_a = zeros(n^3, 7);
0120 for i=1:n
0121 for j=1:n
0122 for k=1:n
0123 bar_a((i-1)*n^2+(j-1)*n+k, 4) = (wa(i,j,k)+wa(i+1,j,k)+wa(i,j+1,k)+wa(i+1,j+1,k)+wa(i,j,k+1)+wa(i+1,j,k+1)+wa(i,j+1,k+1)+wa(i+1,j+1,k+1))*0.125;
0124 if (k>1) bar_a((i-1)*n^2+(j-1)*n+k-1, 3) = (wa(i,j,k)+wa(i+1,j,k)+wa(i,j+1,k)+wa(i+1,j+1,k))*0.25; end;
0125 if (k<n) bar_a((i-1)*n^2+(j-1)*n+k+1, 5) = (wa(i,j,k+1)+wa(i+1,j,k+1)+wa(i,j+1,k+1)+wa(i+1,j+1,k+1))*0.25; end;
0126
0127 if (j>1) bar_a((i-1)*n^2+(j-1-1)*n+k, 2) = (wa(i,j,k)+wa(i+1,j,k)+wa(i,j,k+1)+wa(i+1,j,k+1))*0.25; end;
0128 if (j<n) bar_a((i-1)*n^2+(j+1-1)*n+k, 6) = (wa(i,j+1,k)+wa(i+1,j+1,k)+wa(i,j+1,k+1)+wa(i+1,j+1,k+1))*0.25; end;
0129
0130 if (i>1) bar_a((i-1-1)*n^2+(j-1)*n+k, 1) = (wa(i,j,k)+wa(i,j+1,k)+wa(i,j,k+1)+wa(i,j+1,k+1))*0.25; end;
0131 if (i<n) bar_a((i+1-1)*n^2+(j-1)*n+k, 7) = (wa(i+1,j,k)+wa(i+1,j+1,k)+wa(i+1,j,k+1)+wa(i+1,j+1,k+1))*0.25; end;
0132 end;
0133 end;
0134 end;
0135 D1 = spdiags(-1*ones(n,1), [-1], n, n)+spdiags(2*ones(n,1), [0], n, n)+spdiags(-1*ones(n,1), [1], n, n);
0136 D1(1,1)=1;
0137 D1(n,n)=1;
0138 M = kron(kron(D1*(n-1)^2, speye(n)), speye(n))+kron(kron(speye(n), D1*(n-1)^2), speye(n)) + kron(kron(speye(n), speye(n)), D1*(n-1)^2);
0139 bar_a_M = spdiags(bar_a, [-n^2, -n, -1, 0, 1, n, n^2], n^3, n^3);
0140 M = M.*bar_a_M;
0141 end;
0142 end;
0143
0144 end