Creating function to use pcg

조회 수: 4 (최근 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개)

카테고리

Help CenterFile Exchange에서 Eigenvalue Problems에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by