added views decorator
This commit is contained in:
@ -16,19 +16,7 @@ end
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
function householder_vector(x::Vector{T})::Tuple{Vector{T}, T} where T
|
function householder_vector(x::AbstractVecOrMat{T})::Tuple{Vector{T}, T} where T
|
||||||
# returns the normalized vector u such that H*x is a multiple of e_1
|
|
||||||
s = norm(x)
|
|
||||||
if x[1] ≥ 0
|
|
||||||
s = -s
|
|
||||||
end
|
|
||||||
u = copy(x)
|
|
||||||
u[1] -= s
|
|
||||||
u ./= norm(u)
|
|
||||||
return u, s
|
|
||||||
end
|
|
||||||
|
|
||||||
function householder_vector(x::Matrix{T})::Tuple{Matrix{T}, T} where T
|
|
||||||
# returns the normalized vector u such that H*x is a multiple of e_1
|
# returns the normalized vector u such that H*x is a multiple of e_1
|
||||||
s = norm(x)
|
s = norm(x)
|
||||||
if x[1] ≥ 0
|
if x[1] ≥ 0
|
||||||
@ -45,12 +33,12 @@ function qrfact(A::Matrix{T})::QRhous where T
|
|||||||
R = deepcopy(A)
|
R = deepcopy(A)
|
||||||
d = zeros(n)
|
d = zeros(n)
|
||||||
|
|
||||||
for k ∈ 1:n
|
for k ∈ 1:min(m, n)
|
||||||
(u, s) = householder_vector(R[k:end, k])
|
@views (u, s) = householder_vector(R[k:m, k])
|
||||||
# construct R
|
# construct R
|
||||||
d[k] = s
|
d[k] = s
|
||||||
R[k:end, k+1:end] -= 2 * u * (u' * R[k:end, k+1:end])
|
@views R[k:m, k+1:n] -= 2 * u * (u' * R[k:m, k+1:n])
|
||||||
R[k:end, k] .= u
|
R[k:m, k] .= u
|
||||||
end
|
end
|
||||||
return QRhous(R, d)
|
return QRhous(R, d)
|
||||||
end
|
end
|
||||||
@ -59,19 +47,19 @@ end
|
|||||||
function qyhous(A::QRhous{T}, y::AbstractArray{T}) where T
|
function qyhous(A::QRhous{T}, y::AbstractArray{T}) where T
|
||||||
m, n = size(A)
|
m, n = size(A)
|
||||||
z = deepcopy(y)
|
z = deepcopy(y)
|
||||||
for j ∈ n:-1:1
|
for k ∈ n:-1:1
|
||||||
# z[j:m] = z[j:m] - 2 * A.A[j:m, j] * (A.A[j:m, j]' * z[j:m])
|
# z[j:m] = z[j:m] - 2 * A.A[j:m, j] * (A.A[j:m, j]' * z[j:m])
|
||||||
z[j:m] -= 2 * A.A[j:m, j] .* dot(A.A[j:m, j], z[j:m])
|
@views z[k:m] -= 2 * A.A[k:m, k] .* dot(A.A[k:m, k], z[k:m])
|
||||||
end
|
end
|
||||||
return z
|
return z
|
||||||
end
|
end
|
||||||
|
|
||||||
function qyhoust(A::QRhous{T}, y::AbstractArray{T}) where T
|
function qyhoust(A::QRhous{T}, y::AbstractArray{T}) where T
|
||||||
m, n = size(A.A)
|
m, n = size(A)
|
||||||
z = deepcopy(y)
|
z = deepcopy(y)
|
||||||
for j ∈ 1:n
|
for k ∈ 1:n
|
||||||
# z[j:m] = z[j:m] - A.A[j:m, j] * (A.A[j:m, j]' * z[j:m])
|
# z[j:m] = z[j:m] - 2 * A.A[j:m, j] * (A.A[j:m, j]' * z[j:m])
|
||||||
z[j:m] -= 2 * A.A[j:m, j] .* dot(A.A[j:m, j], z[j:m])
|
@views z[k:m] -= 2 * A.A[k:m, k] .* dot(A.A[k:m, k], z[k:m])
|
||||||
end
|
end
|
||||||
return z
|
return z
|
||||||
end
|
end
|
||||||
@ -125,9 +113,18 @@ function (\)(A::QRhous{T}, b::AbstractVector{T}) where T
|
|||||||
n, m = size(A)
|
n, m = size(A)
|
||||||
v = qyhoust(A, b)
|
v = qyhoust(A, b)
|
||||||
x = zeros(m)
|
x = zeros(m)
|
||||||
for j ∈ m:-1:1
|
|
||||||
x[j] = (v[j] - dot(x[j+1:m], A.A[j, j+1:m])) * A.d[j]^-1
|
|
||||||
end
|
@show size(v)
|
||||||
|
@show size(x)
|
||||||
|
@show size(A.A)
|
||||||
|
@show size(A.d)
|
||||||
|
@show m
|
||||||
|
#@inbounds begin
|
||||||
|
for j ∈ m:-1:1
|
||||||
|
@views x[j] = (v[j] - dot(x[j+1:m], A.A[j, j+1:m])) * A.d[j]^-1
|
||||||
|
end
|
||||||
|
#end
|
||||||
return x
|
return x
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
2481
project/testing.ipynb
generated
2481
project/testing.ipynb
generated
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user