Julia中LU分解递归函数的构造

Julia中LU分解递归函数的构造,julia,linear-algebra,Julia,Linear Algebra,我对Julia很陌生,并尝试对我为递归LU分解编写的一些代码进行故障排除。 这是我的全部代码: `using LinearAlgebra function recurse_lu(A) n=size(A)[1] L=zeros(n,n) U=zeros(n,n) k=n/2 convert(Int, k) A11=A[1:(k),1:(k)] A12=A[1:(k),(k+1):n] A21=A[(k+1):n,1:(k)]

我对Julia很陌生,并尝试对我为递归LU分解编写的一些代码进行故障排除。 这是我的全部代码:

`using LinearAlgebra
function recurse_lu(A)
    n=size(A)[1]
    L=zeros(n,n)
    U=zeros(n,n)
    k=n/2
    convert(Int, k)
    A11=A[1:(k),1:(k)]
    A12=A[1:(k),(k+1):n]
    A21=A[(k+1):n,1:(k)]
    A22=A[(k+1):n,(k+1):n]
    if n>2
        L11,U11=recurse_lu(A11)
        L12=zeros(size(A11)[1],size(A11)[1])
        U21=zeros(size(A11)[1],size(A11)[1])
        U12=inv(L11)*A12
        L21=inv(U11)*A21
        L22,U22=recurse_lu(A22-L21*U12)
    else
        L11=1
        L21=A21/A11
        L22=1
        L12=0
        U21=0
        U12=A12
        U22=A22-L21*A12
        U11=A11
    end
    L[1:(k),1:(k)]=L11
    L[1:(k),(k+1):n]=L12
    L[(k)+1:n,1:(k)]=L21
    L[(k)+1:n,(k+1):n]=L22

    U[1:(k),1:(k)]=U11
    U[1:(k),(k+1):n]=U12
    U[(k+1):n,1:(k)]=U21
    U[(k+1):n,(k+1):n]=U22
    return L,U 
end`
这就遇到了 ArgumentError:当我尝试计算矩阵的函数时,无效索引:Float64类型的1.0。我真的很感激未来的任何提示以及如何解决这个问题。我猜我使用了错误的变量类型,但是Julia没有告诉您问题的确切位置。
非常感谢。

错误是因为您试图使用浮点数对数组进行索引,例如:

julia> x = [1, 2, 3]; x[1.0]
ERROR: ArgumentError: invalid index: 1.0 of type Float64
它似乎起源于以下两行:

k=n/2
convert(Int, k)
也许应该是这样

k=n/2
k = convert(Int, k)
或者,您可以直接使用整数除法:

k = div(n, 2) # or n ÷ 2

它将返回一个可用于索引的
Int

错误是因为您试图使用浮点数索引数组,例如:

julia> x = [1, 2, 3]; x[1.0]
ERROR: ArgumentError: invalid index: 1.0 of type Float64
它似乎起源于以下两行:

k=n/2
convert(Int, k)
也许应该是这样

k=n/2
k = convert(Int, k)
或者,您可以直接使用整数除法:

k = div(n, 2) # or n ÷ 2

它将返回一个
Int
,您可以使用它进行索引。

谢谢,我认为这是有效的,我假设convert()工作正常。我现在遇到MethodError:no方法匹配setindex\u shape\u check(::Int64,::Int64,::Int64)你知道这是怎么回事吗?谢谢!这个错误是由如下原因引起的:
x=[1,2,3];x[1:2]=1
需要使用广播的地方:
x=[1,2,3];x[1:2].=1
(注意
)将标量分配给
x
数组中的多个索引。我猜这是从所有看起来像
L[1:(k),1:(k)]=L11
的行中得到的。谢谢,我认为这是有效的,我假设convert()工作正常。我现在遇到MethodError:no方法匹配setindex\u shape\u check(::Int64,::Int64,::Int64)你知道这是怎么回事吗?谢谢!这个错误是由如下原因引起的:
x=[1,2,3];x[1:2]=1
需要使用广播的地方:
x=[1,2,3];x[1:2].=1
(注意
)将标量分配给
x
数组中的多个索引。我猜这是从所有看起来像
L[1:(k),1:(k)]=L11
的行中得到的。