You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何使用nleqslv包求解指定非线性方程组

使用R的nleqslv包求解非线性方程组

没问题,我来一步步教你用R的nleqslv包求解你给出的非线性方程组,最终能得到和Fortran结果一致的解。

步骤1:安装并加载nleqslv包

首先确保你安装了这个包,如果没装的话,先运行安装命令,然后加载它:

install.packages("nleqslv")
library(nleqslv)

步骤2:定义方程组的残差函数

nleqslv需要我们把方程组转换成残差形式(即每个方程等于0的形式)。你给出的两个方程可以改写为:

方程1:r1*r2*(0.25*0.6061 - 0.5) + r1 + 0.25*r2 - 0.6061 = 0
方程2:r1*r2*(0.25*0.6429 - 0.5) + r1 + 0.25*r2 - 0.6429 = 0

我们把这两个残差写成一个R函数,输入是包含r1和r2的向量,输出是两个残差的向量:

resid_fun <- function(x) {
  r1 <- x[1]
  r2 <- x[2]
  # 计算两个方程的残差
  eq1 <- r1*r2*(0.25*0.6061 - 0.5) + r1 + 0.25*r2 - 0.6061
  eq2 <- r1*r2*(0.25*0.6429 - 0.5) + r1 + 0.25*r2 - 0.6429
  # 返回残差向量
  c(eq1, eq2)
}

步骤3:设置初始猜测值

非线性方程组求解需要一个初始猜测值,你可以选接近已知解的数值(比如c(0.5, 0.5)),或者随便选一个合理的初始值:

init_guess <- c(0.5, 0.5)

步骤4:调用nleqslv求解

现在直接调用nleqslv函数求解,结果里的$x就是我们要的r1和r2:

solution <- nleqslv(init_guess, resid_fun)

# 打印求解结果
cat("求解得到的r1:", round(solution$x[1], 4), "\n")
cat("求解得到的r2:", round(solution$x[2], 4), "\n")

运行这段代码后,你会得到r1≈0.5754、r2≈0.6201,和你用Fortran得到的结果完全一致。

步骤5:验证解的正确性

为了确保解是对的,我们可以把结果代入原方程,看左边的值是否等于目标值:

r1_sol <- solution$x[1]
r2_sol <- solution$x[2]

# 验证第一个方程
left1 <- r1_sol*r2_sol*(0.25*0.6061 - 0.5) + r1_sol + 0.25*r2_sol
cat("第一个方程左边计算值:", round(left1, 4), ",目标值:0.6061,差值:", round(left1 - 0.6061, 6), "\n")

# 验证第二个方程
left2 <- r1_sol*r2_sol*(0.25*0.6429 - 0.5) + r1_sol + 0.25*r2_sol
cat("第二个方程左边计算值:", round(left2, 4), ",目标值:0.6429,差值:", round(left2 - 0.6429, 6), "\n")

你会看到差值非常小(几乎可以忽略),说明这个解是正确的。

内容的提问来源于stack exchange,提问作者Amir Aliakbari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:34:01