Initialize Packages
md"""
# Initialize Packages
"""
begin
using Colors , ColorVectorSpace , ImageShow , FileIO , ImageIO
using PlutoUI
using HypertextLiteral
: @htl, @htl_str
using LinearAlgebra
using ForwardDiff
using Symbolics
using ForwardDiff: jacobian
end
Symbolic
md"""
# Symbolic
"""
@variables z , η
f(x) = x ^m -2;
f′ (generic function with 1 method)
f′(x) = ForwardDiff .derivative(f , x )
m =
md"""
m = $(@bind m Slider(1:6, show_value=true))
"""
expand(f (z +η ))
expand(f (z +η )) - (f (z ) + η *f′ (z ))
Implementation
md"""
# Implementation
"""
Newton 1D
md"""
## Newton 1D
"""
newton1D (generic function with 2 methods)
function newton1D(f, x0=37)
f′(x) = ForwardDiff .derivative(f , x )
x = x0
for i in 1:10
x -= f (x )/f′ (x )
end
return x
end
3.0
Newton2D
md"""
## Newton2D
"""
T (generic function with 1 method)
T(α) = ((x,y),) -> [x + α *y^2, y + α *x^2]
α =
md""" α =$(@bind α Slider(0.0:0.01:1.0, show_value=true))"""
0.3
0.4
@variables a , b , δ , ϵ
image=expand.(T (α )([(a +δ ), (b +ϵ )]))
2×2 Matrix{Text{Num}}:
1.0 0.0
0.0 1.0
simplify.(expand.(image -T (α )([a ,b ]) - jacobian (T (α ), [a ,b ])*[δ , ϵ ]))
newton2D_step (generic function with 1 method)
function newton2D_step(T, x)
J = ForwardDiff .jacobian(T , x )
δ = J / T (x )
return x - δ
end
newton2D (generic function with 2 methods)
function newton2D(T, x0, n=10)
x = x0
for i in 1:n
x = newton2D_step (T , x )
end
return x
end
inverse (generic function with 3 methods)
begin
function inverse(f, y, x0=[0,0])
return newton2D (x -> f (x ) - y , x0 )
end
inverse(f) = y -> inverse (f , y )
end
-1
0.3
0.4
DimensionMismatch: Both inputs should have the same number of columns
- /(::Matrix{Float64}, ::Vector{Float64})@generic.jl:1142
- newton2D_step(::Main.var"workspace#3".var"#4#6"{Main.var"workspace#3".var"#2#3"{Float64}, Vector{Float64}}, ::Vector{Int64})@Other: 3
- newton2D(::Function, ::Vector{Int64}, ::Int64)@Other: 4
- newton2D@Other: 2[inlined]
- inverse@Other: 3[inlined]
- top-level scope@Local: 1[inlined]