R语言)不依赖求导的寻根方法:Nelder-Mead方法

本文介绍了R语言中的一种不依赖导数的寻根方法——Nelder-Mead方法,该方法适用于函数不连续的情况。通过详细解释算法步骤并提供R代码示例,展示了如何在R中实现这一算法,包括扩展、收缩和对称点的计算,以及迭代过程。同时,代码还包含了生成动画的功能,以帮助理解算法动态过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(R语言)不依赖求导的寻根方法:Nelder-Mead方法

牛顿法需要一阶和二阶导数,如果导函数不可用,则可以通过伪牛顿(Quasi-Newton)方法近似它们。如果导函数直接不存在怎么办?函数中存在不连续则可能发生这种情况。

Nelder-Mead Method

在Nelder-Mead算法下即使函数不连续,Nelder-Mead算法也是十分稳健的,该算法是基于评估n维单纯形的顶点处的函数,其中n是函数中输入变量的数量(在这里我只写计算二维问题的算法)。对于二维问题,n维单纯形只是一个三角形,每个角的一个顶点,通常有n+1个顶点。


下面是算法的具体步骤:
Step1: 下面为三个初始值点X(1)=(x1,x2)X(1) = (x_1,x_2)X(1)=(x1,x2) X(2)=(x3,x4)X(2) = (x_3,x_4)X(2)=(x3,x4) X(3)=(x5,x6)X(3) = (x_5,x_6)X(3)=(x5,x6)
将上述三个初始值点代入函数f(x)f(x)f(x)中,即f(X1)f(X_1)f(X1)f(X2)f(X_2)f(X2)f(X3)f(X_3)f(X3),再对它们进行排序,假设三个初始值代入的大小排序为:f(X1)≤f(X2)≤f(X3)f(X_1)\leq f(X_2)\leq f(X_3)f(X1)f(X2)f(X3)
Step2: 计算这三个点的中心点 X(0)=∑i=1nXinX(0) = \frac {\sum_{i=1}^n X_i} {n}X(0)=ni=1nXi
Step3: 计算对称点 X(r)=X(0)+α(X(0)−X(3))X(r) = X(0) + \alpha(X(0)-X(3))X(r)=X(0)+α(X(0)X(3))
通常情况下α\alphaα取1

Case1: f(X1)≤f(Xr)≤f(X3)f(X_1)\leq f(X_r) \leq f(X_3)f(X1)f(Xr)f(X3)此时XrX_rXr不是最优点也不是最差点,用XrX_rXr取代X3X_3X3,新的三个构造点变为X1X_1X1

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值