2017-09-12 7 views
1

제목에서 추측했듯이, 나는 tridiagonal Gaussjordan 제거를 시도하고 있습니다. 나는 기본 솔버없이 그것을하려고 노력하고있다. 내 대답이 정확하지 않고 오류가 내 코드에있는 경우 도움이 필요합니다.Tridiagonal Gauss-Jordan 제거 시도 Matlab

내가 가진 코드를 사용하여 A/b와 x에 대해 다른 값을 얻고 있습니다.

n = 4; 

#Range for diagonals 
ranged = [15 20]; 
rangesd = [1 5]; 

#Vectors for tridiagonal matrix 
supd = randi(rangesd,[1,n-1]); 
d = randi(ranged,[1,n]); 
subd = randi(rangesd,[1,n-1]); 

#Creates system Ax+b 
A = diag(supd,1) + diag(d,0) + diag(subd,-1) 

b = randi(10,[1,n]) 

#Uses default solver 
y = A/b 


function x = naive_gauss(A,b); 

#Forward elimination 
for k=1:n-1 
     for i=k+1:n 
      xmult = A(i,k)/A(k,k); 
      for j=k+1:n 
      A(i,j) = A(i,j)-xmult*A(k,j); 
      end 
      b(i) = b(i)-xmult*b(k); 
     end 
end 
#Backwards elimination 
x(n) = b(n)/A(n,n); 
for i=n-1:-1:1 
    sum = b(i); 
    for j=i+1:n 
    sum = sum-A(i,j)*x(j); 
    end 
    x(i) = sum/A(i,i) 
end 
end 

x 
+0

https://en.wikipedia.org/wiki/Tridiagonal_matrix_algorithm – duffymo

답변

1

알고리즘이 정확합니다. 비교 대상인 y의 값이 잘못되었습니다.

당신은 y=A/b이지만 시스템의 솔루션을 얻는 올바른 구문은 y=A\b이어야합니다.