Julia语言列主元求解线性方程组问题
一般问题
发布于 2024-11-13 23:09:53
查看 31过去592天
function Gaussliezhuyuan(A, B)
(m, n) = size(A);
z = [A B];
x = zeros(Float64, n);
for k = 1:n - 1
max_val = abs(z[k, k]);
max_row = k;
for i = k + 1:m
if abs(z[i, k]) > max_val
max_val = abs(z[i, k]);
max_row = i;
end
end
if max_val == 0
for i = k + 1:m
if abs(z[i, k])!= 0
max_row = i;
break
end
end
if max_row == k
println("不能用高斯消去")
return x
end
end
if max_row!= k
z[[k, max_row], :] = z[[max_row, k], :];
end
for i = k + 1:m
m = -z[i, k] / z[k, k];
z[i, :] = z[i, :] + m * z[k, :];
end
end
b = z[:, n + 1];
x[n] = b[n] / z[n, n];
for k = (n - 1):-1:1
s = 0;
for t = k + 1:n
s = s + z[k, t] * x[t];
end
x[k] = (b[k] - s) / z[k, k];
end
return x
end
A = [1.0 -1.0 3.0; 3.0 -3.0 1.0; 1.0 1.0 0.0]
B = [2.0; -1.0; 3.0]
solution = Gaussliezhuyuan(A, B)
println("the solution is")
for i in 1:length(solution)
println("x$i = ", solution[i])
end
这个代码与列主元高斯消去法的原理一致吗?为什么运行出x的解全为0.0?如何修改呢?
所属专栏:Julia语言
产品信息:Syslab科学计算环境