Я реализовал многомерный метод Ньютона в Джулии.
function newton(f::Function, J::Function, x)
h = Inf64
tolerance = 10^(-10)
while (norm(h) > tolerance)
h = J(x)\f(x)
x = x - h
end
return x
end
С одной стороны, когда я пытаюсь решить приведенную ниже систему уравнений, LoadError: SingularException(2)
выбрасывается.
f(θ) = [cos(θ[1]) + cos(θ[2] - 1.3),
sin(θ[1]) + sin(θ[2]) - 1.3]
J(θ) = [-sin(θ[1]) -sin(θ[2]);
cos(θ[1]) cos(θ[2])]
θ = [pi/3, pi/7]
newton(f, J, θ)
С другой стороны, когда я пытаюсь решить эту другую систему
f(x) = [(93-x[1])^2 + (63-x[2])^2 - 55.1^2,
(6-x[1])^2 + (16-x[2])^2 - 46.2^2]
J(x) = [-2*(93-x[1]) -2*(63-x[2]); -2*(6-x[1]) -2*(16-x[2])]
x = [35, 50]
newton(f, J, x)
Не выдается никаких ошибок и возвращается правильное решение.
Более того, если я сначала решу вторую систему, а затем попытаюсь решить первую систему, которая обычно выдает SingularException(2)
, я вместо этого не вижу ошибок, но мне возвращается совершенно неточное решение для первой системы.
Что именно не так, когда я пытаюсь решить первую систему и как я могу устранить ошибку?