R中实现数值求导的包numDeriv

介绍

numDeriv 是一个用于数值求导的 R 包,它提供了计算函数导数的简单方法,支持一阶导数和高阶导数的计算。

计算一阶导数

r 复制代码
grad(func, x, method="Richardson", side=NULL, eps=1e-4, method.args=list(), ...) 

参数:

  • func:一个具有标量实数值结果的函数。
  • x:一个实标量或向量参数,表示要计算梯度的点(或多个点)。
  • method:取值为 "Richardson"、"simple" 或 "complex" 之一,用于指明进行近似计算所使用的方法。
  • method.args:传递给 method 的参数。未指定的参数将保留为详细说明中指定的默认值。
  • side:表明是否应尝试计算单侧导数。
  • eps: 数值导数的精度。
  • ...: 传递给 func 的额外参数。

一元函数

r 复制代码
library(numDeriv)
# 定义一个函数  
f <- function(x) {  
  return(x^2 + 2 * x + 1)  
}  

# 计算在 x = 1 处的导数  
result <- grad(f, x = 1)  
print(result)  # 输出:4  

二元函数

r 复制代码
library(numDeriv)
# 定义一个函数  
f <- function(x) {  
  return(x[1]^2 +  x[2]^2 + 1)  
}  

# 计算在 c(3,5)处的导数  
result <- grad(f, x = c(3,5))
print(result)  # 输出:c(6, 10)

计算二阶导数

r 复制代码
 hessian(func, x, method="Richardson", eps=1e-4, method.args=list(), ...)

参数:

  • func:一个具有标量实数值结果的函数。
  • x:一个实标量或向量参数,表示要计算梯度的点(或多个点)。
  • method:取值为 "Richardson"或 "complex" , 用于指明进行近似计算所使用的方法。
  • eps: 数值导数的精度。
  • method.args:传递给 method 的参数。未指定的参数将保留为详细说明中指定的默认值。
  • side:表明是否应尝试计算单侧导数。
  • ...: 传递给 func 的额外参数。

一元函数

r 复制代码
library(numDeriv)
# 定义一个函数  
f <- function(x) {  
  return(x^2 + 2 * x + 1)  
}  

# 计算在 x = 1 处的二阶导数  
result <- hessian(f, x = 3)  
print(result)  # 输出:2 
r 复制代码
library(numDeriv)
# 定义一个函数  
f <- function(x) {  
  return(x[1]^2 +  x[2]^2 + 1)  
}  

# 计算在 c(3,5)处的二阶导数  
result <- hessian(f, x = c(3,5))
print(result)  
# 输出
#           [,1]         [,2]
# [1,] 2.000000e+00 1.481603e-17
# [2,] 1.481603e-17 2.000000e+00

计算向量值函数的导数

r 复制代码
 jacobian(func, x, method="Richardson", side=NULL, eps=1e-4, method.args=list(), ...) 

参数:

  • func:一个向量值函数。
  • x:一个实标量或向量参数,表示要计算梯度的点(或多个点)。
  • method:取值为 "Richardson"、"simple" 或 "complex" 之一 , 用于指明进行近似计算所使用的方法。
  • method.args:传递给 method 的参数。未指定的参数将保留为详细说明中指定的默认值。
  • eps: 数值导数的精度。
  • side:表明是否应尝试计算单侧导数。
  • ...: 传递给 func 的额外参数。

示例

r 复制代码
library(numDeriv)
# 定义一个多变量函数  
g <- function(x) {  
  return(c(x[1]^2+x[2]^2, x[2]^2,x[1]^4))  
}  

# 计算雅可比矩阵  
jacobian_result <- jacobian(g, x = c(1, 2))  
print(jacobian_result)  
#        [,1] [,2]
# [1,]    2    4
# [2,]    0    4
# [3,]    4    0
相关推荐
高-老师7 小时前
基于R语言的物种气候生态位动态量化与分布特征模拟
开发语言·r语言·物种气候
Tiger Z7 小时前
R 语言科研绘图 --- 其他绘图-汇总2
r语言·论文·科研·绘图·研究生
WangYan202210 小时前
【物种分布模型】R语言物种气候生态位动态量化与分布特征模拟——气候生态位动态检验、质心转移可视化、适生区预测等
r语言·物种分布模型·物种气候生态位
q567315231 天前
告别低效:构建健壮R爬虫的工程思维
开发语言·爬虫·r语言
没有梦想的咸鱼185-1037-16631 天前
【高分论文密码】大尺度空间模拟预测与数字制图
信息可视化·数据分析·r语言
kebeiovo2 天前
项目必备流程图,类图,E-R图实例速通
开发语言·r语言·流程图
zhangfeng11333 天前
BiocManager下载失败 R语言 解决办法
开发语言·r语言
Tiger Z5 天前
《R for Data Science (2e)》免费中文翻译 (第7章) --- Data import(1)
r语言·数据科学·中文翻译
魔力之心5 天前
R notes[2]
开发语言·r语言
Tiger Z7 天前
R 语言科研绘图第 71 期 --- 散点图-边际
r语言·论文·科研·绘图·研究生