我正在尝试编写高斯消除代码,这是我正在使用的代码片段。矩阵已经是三角形,但这个表达式有一个错误:
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
感谢您的帮助。 BTW我是Matlab的新手...
修改:添加更多信息
我这样调用这个函数: A = [6 3 2; 9 -1 4; 10 5 3] b = [12 37 21]
sol = gauss(A, b);
答案 0 :(得分: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