Решите уравнение, используя optim () - PullRequest
0 голосов
/ 28 мая 2019

У меня есть 2 уравнения, которые должны быть решены с помощью Optim

{(4x^2-20x+1/4 y^2+8=0
  1/2 xy^2+2x-5y+8=0)

Я уже запустил код, но я запутался, если должен быть 1 ответ или 2, потому что функция будет возвращать результаты только для последней строки

Должен ли я сделать это

> myfunc=function(x){
+  4*x[1]^2-20*x[1]+(x[2]^2/4)+8
+  }
> optim(c(0,0),myfunc,method="BFGS")

и

>  myfunc=function(x){
+  (1/2)*(x[1]*x[2]^2)+2*x[1]-5*x[2]+8
+  }
> optim(c(0,0),myfunc,method="BFGS")

или я должен сделать это

> myfunc=function(x){
+  4*x[1]^2-20*x[1]+(x[2]^2/4)+8
+  (1/2)*(x[1]*x[2]^2)+2*x[1]-5*x[2]+8
+  }
> optim(c(0,0),myfunc,method="BFGS")

Для второго он все еще дает мне только ответ для второй функции, так что метод правильный.

Ответы [ 2 ]

1 голос
/ 28 мая 2019

Минимизируйте сумму квадратов двух выражений, которые должны равняться нулю, и убедитесь, что значение в оптимуме равно 0 (с точностью до приближения с плавающей запятой).

myfunc <- function(z) {
  x <- z[1]
  y <- z[2]
  (4*x^2-20* x + 1/4*y^2 + 8)^2 + (1/2 * x*y^2 + 2*x- 5*y + 8)^2
}
optim(c(0, 0), myfunc)

дает:

$par
[1] 0.5000553 2.0002986

$value
[1] 1.291233e-06

$counts
function gradient 
      67       NA 

$convergence
[1] 0

$message
NULL
0 голосов
/ 28 мая 2019

Вы также можете использовать пакет для решения систем нелинейных уравнений, например nleqslv.

Немного переопределить вашу функцию, заставив ее возвращать вектор, содержащий результат для каждого уравнения

myfunc <- function(x){
    y <- numeric(length(x))
    y[1] <- 4*x[1]^2-20*x[1]+(x[2]^2/4)+8
    y[2] <- (1/2)*(x[1]*x[2]^2)+2*x[1]-5*x[2]+8
    y
}

Определите начальное значение для решателя

xstart <- c(0,0)  

Затем сделайте это

library(nleqslv)
nleqslv(xstart,myfunc)

, дав

$x
[1] 0.5 2.0

$fvec
[1] -1.472252e-09 -7.081979e-10

$termcd
[1] 1

$message
[1] "Function criterion near zero"

$scalex
[1] 1 1

$nfcnt
[1] 7

$njcnt
[1] 1

$iter
[1] 7

Есть еще пакеты, которые могут решать системы уравненийтакие как BB и pracma.

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