fixes
This commit is contained in:
6
10-12/lesson.ipynb
generated
6
10-12/lesson.ipynb
generated
@ -1282,7 +1282,7 @@
|
|||||||
"include(\"DIS.jl\")\n",
|
"include(\"DIS.jl\")\n",
|
||||||
"include(\"UNM.jl\")\n",
|
"include(\"UNM.jl\")\n",
|
||||||
"\n",
|
"\n",
|
||||||
"plt = plot(yscale = :log,\n",
|
"plt = plot(yscale = :log10,\n",
|
||||||
" xlims=(0, 35),\n",
|
" xlims=(0, 35),\n",
|
||||||
" ylims=(1e-15, Inf),\n",
|
" ylims=(1e-15, Inf),\n",
|
||||||
" guidefontsize=16)\n",
|
" guidefontsize=16)\n",
|
||||||
@ -1299,7 +1299,7 @@
|
|||||||
],
|
],
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"kernelspec": {
|
"kernelspec": {
|
||||||
"display_name": "Julia 1.9.3",
|
"display_name": "Julia 1.9.4",
|
||||||
"language": "julia",
|
"language": "julia",
|
||||||
"name": "julia-1.9"
|
"name": "julia-1.9"
|
||||||
},
|
},
|
||||||
@ -1307,7 +1307,7 @@
|
|||||||
"file_extension": ".jl",
|
"file_extension": ".jl",
|
||||||
"mimetype": "application/julia",
|
"mimetype": "application/julia",
|
||||||
"name": "julia",
|
"name": "julia",
|
||||||
"version": "1.9.3"
|
"version": "1.9.4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nbformat": 4,
|
"nbformat": 4,
|
||||||
|
|||||||
@ -12,7 +12,7 @@ function NWTN(f;
|
|||||||
MInf::Real=-Inf,
|
MInf::Real=-Inf,
|
||||||
mina::Real=1e-16,
|
mina::Real=1e-16,
|
||||||
plt::Union{Plots.Plot, Nothing}=nothing,
|
plt::Union{Plots.Plot, Nothing}=nothing,
|
||||||
plotatend::Bool=true,
|
plotatend::Bool=false,
|
||||||
Plotf::Integer=0,
|
Plotf::Integer=0,
|
||||||
printing::Bool=true)::Tuple{AbstractArray, String}
|
printing::Bool=true)::Tuple{AbstractArray, String}
|
||||||
|
|
||||||
@ -99,7 +99,7 @@ function NWTN(f;
|
|||||||
am = 0
|
am = 0
|
||||||
a = as
|
a = as
|
||||||
phipm = phip0
|
phipm = phip0
|
||||||
while (feval ≤ MaxFeval ) && ((as - am)) > mina && (phips > 1e-12)
|
while (feval ≤ MaxFeval ) && (as - am) > mina && (phips > 1e-12)
|
||||||
|
|
||||||
# compute the new value by safeguarded quadratic interpolation
|
# compute the new value by safeguarded quadratic interpolation
|
||||||
a = (am * phips - as * phipm) / (phips - phipm)
|
a = (am * phips - as * phipm) / (phips - phipm)
|
||||||
@ -107,7 +107,7 @@ function NWTN(f;
|
|||||||
|
|
||||||
# compute phi(a)
|
# compute phi(a)
|
||||||
phia, phip = f2phi(a, true)
|
phia, phip = f2phi(a, true)
|
||||||
|
|
||||||
if (phia ≤ phi0 + m1 * a * phip0) && (abs(phip) ≤ -m2 * phip0)
|
if (phia ≤ phi0 + m1 * a * phip0) && (abs(phip) ≤ -m2 * phip0)
|
||||||
break # Armijo + strong Wolfe satisfied, we are done
|
break # Armijo + strong Wolfe satisfied, we are done
|
||||||
end
|
end
|
||||||
@ -372,12 +372,12 @@ function NWTN(f;
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if Plotf ≥ 2
|
||||||
|
plot!(plt, gap)
|
||||||
|
elseif Plotf == 1 && n == 2
|
||||||
|
plot!(plt, PXY[1, :], PXY[2, :])
|
||||||
|
end
|
||||||
if plotatend
|
if plotatend
|
||||||
if Plotf ≥ 2
|
|
||||||
plot!(plt, gap)
|
|
||||||
elseif Plotf == 1 && n == 2
|
|
||||||
plot!(plt, PXY[1, :], PXY[2, :])
|
|
||||||
end
|
|
||||||
display(plt)
|
display(plt)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
570
11-09/Untitled.ipynb
generated
570
11-09/Untitled.ipynb
generated
File diff suppressed because one or more lines are too long
@ -1,7 +1,7 @@
|
|||||||
module thinQR
|
module thinQR
|
||||||
|
|
||||||
import Base: size, show, getproperty, getfield, propertynames, \, *
|
import Base: size, show, getproperty, getfield, propertynames, \, *
|
||||||
using LinearAlgebra: norm, I, triu, diagm, ldiv!
|
using LinearAlgebra: norm, I, triu, diagm, ldiv!, dot
|
||||||
|
|
||||||
export QRthin, qrhous!, qyhous, qyhoust
|
export QRthin, qrhous!, qyhous, qyhoust
|
||||||
|
|
||||||
@ -18,16 +18,22 @@ function qrhous!(A::AbstractMatrix{T})::QRthin{T} where T
|
|||||||
m, n = size(A)
|
m, n = size(A)
|
||||||
|
|
||||||
d = zeros(n)
|
d = zeros(n)
|
||||||
for j ∈ 1:n
|
@inbounds begin
|
||||||
s = norm(A[j:m, j])
|
for j ∈ 1:n
|
||||||
# iszero(s) && throw(ArgumentError("The matrix A is singular"))
|
s = norm(A[j:m, j])
|
||||||
d[j]= copysign(s, -A[j,j])
|
# iszero(s) && throw(ArgumentError("The matrix A is singular"))
|
||||||
fak = sqrt(s * (s + abs(A[j,j])))
|
d[j]= copysign(s, -A[j,j])
|
||||||
A[j,j] -= d[j]
|
fak = sqrt(s * (s + abs(A[j,j])))
|
||||||
A[j:m, j] ./= fak
|
A[j,j] -= d[j]
|
||||||
|
|
||||||
|
A[j:m, j] ./= fak
|
||||||
|
|
||||||
if j < n
|
if j < n
|
||||||
A[j:m, j+1:n] -= A[j:m, j] * (A[j:m, j]' * A[j:m, j+1:n])
|
A[j:m, j+1:n] -= A[j:m, j] * (A[j:m, j]' * A[j:m, j+1:n])
|
||||||
|
#for k ∈ j+1:n
|
||||||
|
# A[j:m, k] -= A[j:m, j] .* dot(A[j:m, j], A[j:m, k])
|
||||||
|
#end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -47,7 +53,8 @@ function qyhoust(A::QRthin{T}, y::AbstractArray{T}) where T
|
|||||||
m, n = size(A.A)
|
m, n = size(A.A)
|
||||||
z = deepcopy(y)
|
z = deepcopy(y)
|
||||||
for j ∈ 1:n
|
for j ∈ 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] - A.A[j:m, j] * (A.A[j:m, j]' * z[j:m])
|
||||||
|
z[j:m] -= A.A[j:m, j] .* dot(A.A[j:m, j], z[j:m])
|
||||||
end
|
end
|
||||||
return z
|
return z
|
||||||
end
|
end
|
||||||
@ -101,7 +108,7 @@ function (\)(A::QRthin{T}, b::AbstractVector{T}) where T
|
|||||||
v = qyhoust(A, b)
|
v = qyhoust(A, b)
|
||||||
x = zeros(m)
|
x = zeros(m)
|
||||||
for j ∈ m:-1:1
|
for j ∈ m:-1:1
|
||||||
x[j] = (v[j] - x[j+1:m]' * A.A[j, j+1:m]) * A.d[j]^-1
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user