专栏
标签
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科学计算环境
科学计算

全部回答 1

发布于 2024-11-14 15:38:46

您好,列主元高斯消去法函数的示例代码,如下,仅供参考。

function Gaussliezhuyuan(A::Matrix{Float64}, b::Vector{Float64})
    n = size(A, 1)
    x = zeros(n)

    # 进行列主元高斯消去法
    for k = 1:n-1
        # 寻找第k列绝对值最大的元素作为主元
        max_row = k
        for i = k+1:n
            if abs(A[i, k]) > abs(A[max_row, k])
                max_row = i
            end
        end

        # 交换行,将主元所在行置于对角线位置
        if max_row != k
            A[[k, max_row], :] = A[[max_row, k], :]
            b[[k, max_row]] = b[[max_row, k]]
        end

        # 消元
        for i = k+1:n
            factor = A[i, k] / A[k, k]
            A[i, k+1:n] .= A[i, k+1:n] - factor * A[k, k+1:n]
            b[i] = b[i] - factor * b[k]
        end
    end

    # 回代求解
    x[n] = b[n] / A[n, n]
    for i = n-1:-1:1
        x[i] = (b[i] - A[i, i+1:n][1] * x[i+1:n][1]) / A[i, i]
    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)
用户
和原帖交流更多问题细节吧,去
我要发帖 我要发帖
资料中心 资料中心
查看更多>
热门帖子 热门帖子
主要贡献者 主要贡献者
过去7天