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

在R中使用uniroot求解指数函数根得到错误结果的原因咨询

问题描述

我有一个指数函数:

f = function(x){
  exp(3*x)+4*exp(2*x)-3*exp(x)
}

该函数的唯一实根被认为是$\sqrt{7}-2$(约0.6457513),但在R中执行以下代码求解根时:

uniroot(f, lower = -3, upper = 3)$root
[1] -0.4373415

得到的结果并非预期值,请问出现该问题的原因是什么?

问题原因分析
  • 根的概念混淆
    原函数可通过换元简化:令$y=e^x$($y>0$,指数函数值域恒正),函数转化为:
    $$y^3 + 4y^2 - 3y = y(y^2 + 4y - 3)$$
    解方程$y(y^2 + 4y - 3)=0$,因$y>0$,仅需解二次方程$y^2 + 4y - 3=0$,得正根为$y=-2+\sqrt{7}\approx0.6457513$——这是换元后$y$的根,而非$x$的根。对应的x的实根是$x=\ln(y)=\ln(-2+\sqrt{7})\approx-0.4373415$,和uniroot计算的结果完全一致。

  • uniroot的工作逻辑
    R的uniroot函数要求输入区间[lower, upper]内,函数两端点取值符号相反(即$f(lower)*f(upper)<0$),它会在该区间内寻找函数值为0的点。计算你的函数在区间端点的值:

    • $f(-3)=e{-9}+4e{-6}-3e^{-3}\approx-0.143$(负值)
    • $f(3)=e9+4e6-3e^3\approx9670$(正值)
      区间内存在符号变化,uniroot找到的是该区间内唯一的实根,也就是正确的x的实根。

内容的提问来源于stack exchange,提问作者Homer Jay Simpson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 07:20:27