Проверьте это:
library('BB')
library('nleqslv')
y <- rep(0,6)
params <- function (x) {
a <- x[1]
b <- x[2]
c <- x[3]
d <- x[4]
e <- x[5]
f <- x[6]
y[1] <- 1960*b - 10000*c^2 +1
y[2] <- a + 980*d -10000*c*f
y[3] <- -2.8*b - 100*c + 980*e -10000*c*f
y[4] <- 2*b -10000*e^2
y[5] <- -2.8*d -100*e + c -10000*e*f
y[6] <- -5.6*e -200*f -10000*f^2
return(y)
}
x <-c(0,0,0,0,0,0)
params(x)
results <-nleqslv(x, params)
results$x # x values
results$fvec #y values
a <- results$x[1]
b <- results$x[2]
c <- results$x[3]
d <- results$x[4]
e <- results$x[5]
f <- results$x[6]
#Check
y[1] <- 1960*b - 10000*c^2 +1
y[2] <- a + 980*d -10000*c*f
y[3] <- -2.8*b - 100*c + 980*e -10000*c*f
y[4] <- 2*b -10000*e^2
y[5] <- -2.8*d -100*e + c -10000*e*f
y[6] <- -5.6*e -200*f -10000*f^2
y
Если мы используем значения x vector
AKA c(a,b,c,d,e,f)
и пытаемся решить y
, мы получим значения, близкие к 0.
results$x
дает вам шесть значений, которые делают y (results$fvec
) ближе к 0. Худшее из полученных вами значений - y[4]
, равное -1.020406e-03
, но если вы сочтете его достаточно близким, вы хороши.
Во всяком случае, как справедливо говорит @Bhas: решатель выдал «Превышен лимит итераций», что обычно означает, что он перепробовал много значений без получения результатов, близких к 0 с определенным допуском.
Поэтому, если вы не удовлетворены своими результатами (а можете и не захотеть, потому что хотите получить ответы на свои проблемы), возможно, вы захотите попробовать еще раз. Может также случиться, что существует достаточно близкое решение ... или нет.
Например, если вы немного настроите y[4]
на y[4] <- 2*b +10000*e^2
, вы получите достаточно близкий (это просто для примера, что вы не можете свободно изменять свою функцию):
y <- rep(0,6)
params <- function (x) {
a <- x[1]
b <- x[2]
c <- x[3]
d <- x[4]
e <- x[5]
f <- x[6]
y[1] <- 1960*b - 10000*c^2 +1
y[2] <- a + 980*d -10000*c*f
y[3] <- -2.8*b - 100*c + 980*e -10000*c*f
y[4] <- 2*b +10000*e^2
y[5] <- -2.8*d -100*e + c -10000*e*f
y[6] <- -5.6*e -200*f -10000*f^2
return(y)
}
x <-c(0,0,0,0,0,0)
params(x)
results <-nleqslv(x, params)