我已经在Julia中实现了多元牛顿法。
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)
的第一个系统,那么我现在没有遇到任何错误,但返回的是对第一个系统完全不正确的解决方案。
当我尝试解决第一个系统时究竟出了什么问题?如何解决该错误?