0

我正在尝试编写高斯消除代码,这是我正在使用的一段代码。矩阵已经是三角形的,但是这个表达式有一个错误:

x(n) = b(n) / A(n, n);

这是完整的代码:

function [x] = gauss(A, b)
  n = size(A);
  for k=1 : n-1
      for i=k+1 : n
          m = A(i, k) / A(k, k);
          for j=1 : n
              A(i, j) = A(i, j) - m * A(k, j);
          end
          b(i) = b(i) - m * b(k);
      end
  end
  x(n) = b(n) / A(n, n);
  disp(double(b(n)));
  for k=n-1 : -1 : 1
      s=0;
      for i=k+1 : n
          s = s + A(k, i) * x(i);
      end
      x(k) = (b(k) - s) / A(k, k);
  end
  disp(x);
end

谢谢你的帮助。顺便说一句,我是 Matlab 的新手...

编辑:添加更多信息

我这样调用这个函数: A = [6 3 2 ; 9 -1 4 ; 10 5 3] b = [12 37 21]

sol = gauss(A, b);
4

1 回答 1

0

这条线

 n = size(A);

将有一个向量结果作为A一个矩阵。看来您正在期待这条线

x(n) = b(n) / A(n, n);

表现得像标量除法,但是使用n向量实际上是在尝试划分不同维度的矩阵。根据您的示例代码检查这些语句的输出

n = size(A);
A(n,n)
b(n)

并看到你不是在处理标量。如果你想n成为一个标量等于A尝试替换的行数

n = size(A);

[n n1] = size(A);

现在n应该真正代表A

于 2013-02-25T22:28:29.227 回答