Я пытаюсь реализовать многомерный метод Ньютона в Джулии, но столкнулся с ошибкой "нет соответствия методу". Ниже моя реализация и код, который я использую для его вызова.
function newton(f::Vector, J::Matrix, x::Vector)
h = Inf64
tolerance = 10^(-10)
while (norm(h) > tolerance)
h = J(x)\f(x)
x = x - h
end
return x
end
Попытка вызова 1
f(x::Vector) = [(93-x[1])^2 + (63-x[2])^2 - 55.1^2,
(6-x[1])^2 + (16-x[2])^2 - 46.2^2]
J(x::Vector) = [-2*(93-x[1]) -2*(63-x[2]); -2*(6-x[1]) -2*(16-x[2])]
x = [35, 50]
newton(f, J, x)
При запуске вышеуказанного кода выдается следующая ошибка:
ERROR: LoadError: MethodError: no method matching newton(::typeof(f), ::typeof(J), ::Array{Int64,1})
Closest candidates are:
newton(::Array{T,1} where T, ::Array{T,2} where T, ::Array{Int64,1})
newton(::Array{T,1} where T, ::Array{T,2} where T, ::Array{T,1} where T)
newton(::Array{T,1} where T, ::Array{T,2} where T, ::Array)
Попытка вызова 2
f(x::Vector) = [(93-x[1])^2 + (63-x[2])^2 - 55.1^2,
(6-x[1])^2 + (16-x[2])^2 - 46.2^2]
J(x::Vector) = [-2*(93-x[1]) -2*(63-x[2]); -2*(6-x[1]) -2*(16-x[2])]
x = [35, 50]
newton(f(x), J(x), x) # passing x into f and J
При попытке вызвать метод, как при попытке 2, я не сталкиваюсь с ошибкой, но процесс никогда не завершается. Для справки: соответствующая реализация многомерного метода Ньютона, который я написал в MATLB, решает систему уравнений из примеров примерно за 10 секунд.
Как правильно реализовать и вызвать многомерный метод Ньютона в Джулии?