Ваша система уравнений имеет несколько решений.
Я использую другой пакет для решения вашей системы: nleqslv
следующим образом:
library(nleqslv)
model <- function(x) {
F1 <- sqrt(x[1]^2 + x[3]^2) - 1
F2 <- sqrt(x[2]^2 + x[4]^2) - 1
F3 <- x[1]*x[2] + x[3]*x[4]
F4 <- -0.58*x[2] - 0.19*x[3]
c(F1 = F1, F2 = F2, F3 = F3, F4 = F4)
}
#find solution
xstart <- c(1.5, 0, 0.5, 0)
nleqslv(xstart,model)
Получается то же решение, что и в ответе Прем.
Однако ваша система имеет несколько решений.
Пакет nleqslv
предоставляет функцию поиска решений с учетом матрицы различных начальных значений. Вы можете использовать это
set.seed(13)
xstart <- matrix(runif(400,0,2),ncol=4)
searchZeros(xstart,model)
(Примечание: разные семена могут не найти все четыре решения)
Вы увидите, что есть четыре различных решения:
$x
[,1] [,2] [,3] [,4]
[1,] -1 -1.869055e-10 5.705536e-10 -1
[2,] -1 4.992198e-13 -1.523934e-12 1
[3,] 1 -1.691309e-10 5.162942e-10 -1
[4,] 1 1.791944e-09 -5.470144e-09 1
.......
Это ясно говорит о том, что точные решения приведены в следующей матрице
xsol <- matrix(c(1,0,0,1,
1,0,0,-1,
-1,0,0,1,
-1,0,0,-1),byrow=TRUE,ncol=4)
А потом сделай
model(xsol[1,])
model(xsol[2,])
model(xsol[3,])
model(xsol[4,])
Подтверждено!
Я не пытался найти эти решения аналитически, но вы можете видеть, что если x[2]
и x[3]
равны нулю, то F3
и F4
равны нулю. Решения для x[1]
и x[4]
могут быть немедленно найдены.