计算6个非线性方程的变量,其中R为6个未知数

问题描述 投票:0回答:1

期待从6个非线性方程计算a,b,c,d,e,f(6个变量):

以下是我的代码

library('BB')
library('nleqslv')

y <-  rep(NA,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)

nleqslv(x, params)

我不确定我所做的是否正确。任何人都可以帮助我。谢谢。预期输出将是找出变量a,b,c,d,e,f是什么。

r equation
1个回答
0
投票

检查一下:

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)
© www.soinside.com 2019 - 2024. All rights reserved.