Warning: Matrix is singular to working precision. (Finite difference method)
    조회 수: 3 (최근 30일)
  
       이전 댓글 표시
    
Hi! 
I have a problem with the following code.
In the end the output u contains N-1 elements "Nan".
Does this warning depend on the input value u0? (I insert the input u0=1)
function [x,u]= fdnlin(N,u0, tol)
%x partition of the intervall
%u values of the approximated solution
%u0 is the initial solution
h=2/N;
x=-1:h:1;
uk=u0*ones(N,1); %because u0 is insered and can be a vector or a scalar 
%In this way we have a coloumn vector with the same value u0
nfk=1+tol; %norm of phik. We set it in this way to enter in the while cycle.
while nfk>=tol
    J=zeros(N);
    phi=zeros(N,1); %coloumn vector
    J(1,1)=1+h/4*exp(-x(2))*(uk(2)+ exp(-1)); %is D1
    J(1,2)= -0.5+h/4* exp(-x(2))*uk(1); %is C1
    phi(1)=-0.5*uk(2)+uk(1)+exp(-1)/2+h/4*exp(-x(2))*uk(1)*(uk(2)+ exp(-1))-...
        h^2/2*exp(x(2))*(x(2)^2-2); %the non therm
    for n=2:N-1
        J(n,n)=1+h/4*exp(-x(n+1))*(uk(n+1)- uk(n-1)); %Dn
        J(n,n+1)=-0.5+h/4* exp(-x(n+1))*(uk(n)); %Cn
        J(n,n-1)=-0.5-h/4* exp(-x(n+1))*(uk(n));%En
        phi(n)= -0.5*uk(n+1)+uk(n)-1/2*uk(n-1)+h/4*exp(-x(n+1))*uk(n)*(uk(n+1)-uk(n-1))-...
            h^2/2*exp(x(n+1))*((x(n+1)^2-2));
    end
     J(N,N)= 1+h+h^2/2*exp(-x(N+1))*(3*exp(1)- 2*uk(N)); %DN
     J(N,N-1)=-1; %EN
     phi(N)=-uk(N-1)+(1+h)*uk(N)+h^2/2*exp(-x(N+1))*uk(N)*(3*exp(1)-uk(N))-...
         h^2/2*exp(x(N+1))*((x(N+1)^2-2));
     duk=J\phi; %solution of linear sistem (delta uk)
     uk=uk+duk; %Eulero's method
     nfk=sqrt(sum(phi.^2)); %norm of phi
end
u=[-exp(-1); uk]; %insert u0 in the first position
end
댓글 수: 0
답변 (0개)
참고 항목
카테고리
				Help Center 및 File Exchange에서 FPGA, ASIC, and SoC Development에 대해 자세히 알아보기
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
