2017-09-12 12 views
1

Wie Sie wahrscheinlich aus dem Titel erraten, versuche ich Tridiagonal Gauss Jordan Beseitigung zu tun. Ich versuche es ohne den Standardlöser zu machen. Meine Antworten kommen nicht richtig heraus und ich brauche Hilfe, wo der Fehler in meinem Code ist.Versuch Tridiagonal Gauss-Jordan Eliminierung Matlab

Ich bekomme verschiedene Werte für A/b und x, mit dem Code, den ich habe.

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

Antwort

1

Ihr Algorithmus ist korrekt. Der Wert von y, mit dem Sie vergleichen, ist falsch.

Sie haben y=A/b, aber die korrekte Syntax der Lösung des Systems erhalten sollte y=A\b sein.

Verwandte Themen