尝试Tridiagonal Gauss-Jordan消除Matlab

时间:2017-09-12 19:40:14

标签: matlab math linear-algebra

正如你可能从标题中猜到的那样,我正试图做三角形的GaussJordan消除。我试图在没有默认求解器的情况下做到这一点。我的答案不正确,我需要一些帮助,以确定错误在我的代码中的位置。

我使用我的代码获得了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

1 个答案:

答案 0 :(得分:1)

您的算法是正确的。您比较的y的值是错误的。

您拥有y=A/b,但获取系统解决方案的正确语法应为 y=A\b