SingularException (2) при вызове многомерного метода Ньютона в Юлии - PullRequest
0 голосов
/ 19 апреля 2019

Я реализовал многомерный метод Ньютона в Джулии.

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), я вместо этого не вижу ошибок, но мне возвращается совершенно неточное решение для первой системы.

Что именно не так, когда я пытаюсь решить первую систему и как я могу устранить ошибку?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...