Creating function to use pcg

1 次查看(过去 30 天)
Samuel Martinez
Samuel Martinez 2021-6-26
Hello, I am solving a problem that involves matrices of per side, but they are matrices that only have 4 different diagonals of 0, so I am looking to implement what you mention in the following link in the part of Using Function Handle Instead of Numeric Matrix.
I'm going to show you the structure that I have in the matrix for the case of :
I get this from here. Well what I tried to do was the following:
function y=afun(x)
nx = 5;
N = nx*nx;
x1 = linspace(0,1,nx);
y1 = x1;
[X,Y] = ndgrid(x1,y1);
dx = x1(2)-x1(1);
k=@(x,y) 1+x.^2+y.^2;
isDirichlet = (X==0) | (X==1) | (Y==0) | (Y==1);
Ad = zeros(N,5);
Ad(:,1) = -k(X(:),Y(:)+dx/2);
Ad(:,2) = -k(X(:)+dx*0.5,Y(:));
Ad(:,4) = -k(X(:)-dx*0.5,Y(:));
Ad(:,5) = -k( X(:), Y(:)-dx/2 );
Ad(:,3) = -sum( Ad(:,[1,2,4,5]), 2 );
idx = find(isDirichlet(:));
L=Ad(:,1);L(idx)=[];B=Ad(:,2);B(idx)=[];
C=Ad(:,3);C(idx)=[];U=Ad(:,4);
U(idx)=[];UP=Ad(:,5);UP(idx)=[];
n=sqrt(size(C,1));
l=B(1:end-1);s=U(2:end);
for i=n:n:(n-1)*n
l(i)=0;s(i)=0;
end
y=([[diag(zeros(n));L(1:(n-1)*n)] +[0;l] +[C] +[s;0] +[UP(n+1:end);diag(zeros(n))]]).*x;
end
but when I apply pcg it does not solve the system correctly. I do not know if my code has any logic errors or if I am not understanding how the implementation works with afun.
I hope you can help me, thank you very much.

回答(0 个)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by