📄 rtest_1.m
字号:
function rval=rtest_1()
n = 49;
[A,b] = testmat(n,2);
x0 = [1:n]'/(n+1);
y0 = [1:n]'/(n+1);
x = repmat(x0,1,n);
y = repmat(y0',n,1);
xy = [x(:),y(:)];
rval = 0;
try
T = mst(A);
T = T + diag(diag(A));
rval = 1;
catch
lasterr
end;
try
T = prim_mst(A);
rval = 0;
catch
rval = 1;
end;
function [A,b] = testmat( n,stencil )
h = 1/(n+1);
% initialization
x = [1:n]'/(n+1);
y = [1:n]'/(n+1);
u = zeros(n,n);
% exact solution
u0 = repmat(x.^4,1,n) + repmat(12*y'.^2,n,1);
% matices
T0 = -ones(n);
T0 = sparse( triu(tril(T0,-1),-1) + triu(tril(T0,1),1) );
I = speye(n);
if stencil == 1
T = (-8*I - T0) / 3;
B = (I - T0) / 3;
else
T = (-20*I - 4*T0) / 6;
B = (4*I - T0) / 6;
end
A = kron(I,T) - kron(T0,B);
% boundary
b = zeros(n);
if stencil == 1
b(1,:) = b(1,:) + 12*y'.^2 + 12*(y-h)'.^2 + 12*(y+h)'.^2;
b(n,:) = b(n,:) + 3 + 12*y'.^2 + 12*(y-h)'.^2 + 12*(y+h)'.^2;
b(:,1) = b(:,1) + x.^2 + (x-h).^2 + (x+h).^2;
b(:,n) = b(:,n) + x.^2 + (x-h).^2 + (x+h).^2 + 12*3;
else
b(1,:) = b(1,:) + 4* 12*y'.^2 + 12*(y-h)'.^2 + 12*(y+h)'.^2;
b(n,:) = b(n,:) + 6 + 4* 12*y'.^2 + 12*(y-h)'.^2 + 12*(y+h)'.^2;
b(:,1) = b(:,1) + 4* x.^2 + (x-h).^2 + (x+h).^2;
b(:,n) = b(:,n) + 4* x.^2 + (x-h).^2 + (x+h).^2 + 12*6;
end
% fix corners
b(1,n) = b(1,n) - 12;
b(n,1) = b(n,1) - 1;
b(n,n) = b(n,n) - 13;
% normalize
if stencil == 1
b = - b / 3;
else
b = - b / 6;
end
% add source
f = 12*x.^2 + 24;
f = repmat(f,1,n);
b = b + f * h^2;
b = b(:);
return
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -