用R语言实现牛顿迭代求最优点

牛顿迭代的基本原理见百科http://baike.sogou.com/v1846821.htm?fromTitle=%E7%89%9B%E9%A1%BF%E8%BF%AD%E4%BB%A3%E6%B3%95
基本公式:10122800_Ivk8.jpg

泰勒展开公式:f(x) = f(x0)+f'(x0)*(x-x0)+1/2*f''(x0)*(x-x0)^2

                   →f'(x) = f'(x0)+f''(x0)*(x-x0)  #一阶导为零是极值

                   →x = x0 - f'(x0)/f''(x0)         #公式

下面是R语言的代码实现 函数为y = x^2+2

x = 5  #初始值,自己定
diedai   = 40 #迭代次数
g        = function(x){x^2+2} #目标函数
g.prime  = function(x){2*x}    #一阶导
g.2prime = function(x){2}      #二阶导

#公式
for(i in 1:diedai){x = x - g.prime(x)/g.2prime(x)} 
x
 

下面是结果

> x
[1] 5
>  
> 
> x = 5  #初始值,自己定
> diedai   = 40 #迭代次数
> g        = function(x){x^2+2} #目标函数
> g.prime  = function(x){2*x}    #一阶导
> g.2prime = function(x){2}      #二阶导
> 
> #公式
> for(i in 1:diedai){x = x - g.prime(x)/g.2prime(x)} 
> x
[1] 0

---------------------------------------------------------------------------------------------------------

下面是复杂函数的牛顿迭代求最优点

x = 5  #初始值,自己定
diedai   = 40 #迭代次数
g        = function(x){sin(x)^3+log(cos(x))+x^(-1)} #目标函数
x=5
g.prime  = function(x){
fun = expression(sin(x)^3+log(cos(x))+x^(-1))
D(fun,'x')
f = deriv(D(fun,'x'),'x',func=T)
f(x)}    #一阶导
g.2prime = function(x){
D(D(fun,'x'),'x')
f = deriv(D(D(fun,'x'),'x'),'x',func=T)
f(x)}      #二阶导

#公式
for(i in 1:diedai){x = x - g.prime(x)/g.2prime(x)} 
x

--------------------------------------------------------------------------------------------------------

 

转载于:https://my.oschina.net/u/3272626/blog/856173

  • 3
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在R语言中,可以使用“lm”函数来实现多元线性回归。牛顿代的多元回归系数可以通过以下步骤实现: 1. 首先,导入所需的R包,如“stats”和“nleqslv”。 2. 然后,定义多元回归模型,并初始化回归系数的初始值。 3. 接下来,使用“nleqslv”函数来进行牛顿代,以解最优的回归系数。该函数需要提供初始值、代函数和雅可比矩阵。 4. 在代函数中,需要定义残差的一阶和二阶导数,以及雅可比矩阵的计算。 5. 最后,得到收敛的回归系数后,即可得到多元回归模型的参数估计值。 下面是一个简单的伪代码示例,来展示如何使用R语言实现牛顿代的多元回归系数: ```R # 导入所需的包 library(stats) library(nleqslv) # 定义多元线性回归模型 model <- lm(y ~ x1 + x2 + x3, data = mydata) # 初始化回归系数的初始值 beta_init <- c(0, 0, 0, 0) # 定义代函数 iteration_function <- function(beta) { # 计算残差的一阶导数和二阶导数 gradient <- compute_gradient(beta) hessian <- compute_hessian(beta) # 计算雅可比矩阵 jacobian <- compute_jacobian(gradient, hessian) # 返回雅可比矩阵 return(jacobian) } # 使用nleqslv函数进行牛顿代 result <- nleqslv(beta_init, iteration_function) # 得到收敛的回归系数 regression_coefficients <- result$estimate ``` 通过上述方法,就可以使用R语言实现牛顿代的多元回归系数计算。这样可以更加灵活地定制多元回归模型,并得到最优的参数估计值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值