相关文章推荐
卖萌的热水瓶  ·  台新銀「中小企業創新論壇」從佈局重構到韌性升 ...·  5 月前    · 
没有腹肌的西瓜  ·  男孩儿化身触手怪向同学伸出黑手_哔哩哔哩_b ...·  1 年前    · 
个性的竹笋  ·  吉林市规划和自然资源局·  1 年前    · 
爱吹牛的棒棒糖  ·  革命文物修复伤痕里的热血芳华 _中国经济网― ...·  1 年前    · 
温文尔雅的绿豆  ·  合安、郑阜高铁初步设计获批,安九高铁预计下半年开建·  1 年前    · 
Code  ›  使用apache.commons.math求解一元多项式方程开发者社区
apache 牛顿
https://cloud.tencent.com/developer/article/1797039
开心的炒粉
2 年前
作者头像
算法之名
0 篇文章

使用apache.commons.math求解一元多项式方程

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > 算法之名 > 正文

使用apache.commons.math求解一元多项式方程

发布 于 2021-03-04 10:28:12
698 0
举报

添加依赖

<dependency>
   <groupId>org.apache.commons</groupId>
   <artifactId>commons-math3</artifactId>
   <version>3.6.1</version>
</dependency>

它的原理是Newton-Raphson算法,又叫做牛顿-拉裴森(Newton-Raphson)方法,是一维求根方法中最著名的一种。其特点是在计算时需要同时计算函数值与其一阶导数值,从几何上解释,牛顿法是将当前点处的切线延长,使之与横轴相交,然后把交点处值作为下一估值点。

从数学上解释,牛顿法可以从函数的泰勒展开得到。?(?)f(x)的泰勒展开可以表示为:

?(?+?)=?(?)+?′(?)?+?″(?)2?2+?(?3)f(x+δ)=f(x)+f′(x)δ+f″(x)2δ2+O(δ3)

对于足够小的?δ,可以将只保留上式右端关于的一阶项,得到:

?=−?(?)?′(?)δ=−f(x)f′(x)

于是得到由到的递推公式:

??+1=??+?=??−?(??)?′(??)xi+1=xi+δ=xi−f(xi)f′(xi)

可见牛顿法是让?x沿着?(?)f(x)梯度的方向下降,类似于最优化方法中的梯度下降法。牛顿法也可以作为最优化算法,只不过那时需要求函数的二阶导数。

public class MathMain {
    public static void main(String[] args) {
        double[] d = new double[]{6.0,-5.0,1.0};
        UnivariateDifferentiableFunction function = new PolynomialFunction(d);
        System.out.println(function);
        UnivariateDifferentiableSolver solver = new NewtonRaphsonSolver();
        List<Double> res = new ArrayList<>();
        double solusion = solver.solve(10, function, 0);
        res.add(solusion);
        solusion++;
 
推荐文章
卖萌的热水瓶  ·  台新銀「中小企業創新論壇」從佈局重構到韌性升級 攜手中小企業競力再造 - 台新銀行
5 月前
没有腹肌的西瓜  ·  男孩儿化身触手怪向同学伸出黑手_哔哩哔哩_bilibili
1 年前
个性的竹笋  ·  吉林市规划和自然资源局
1 年前
爱吹牛的棒棒糖  ·  革命文物修复伤痕里的热血芳华 _中国经济网――国家经济门户
1 年前
温文尔雅的绿豆  ·  合安、郑阜高铁初步设计获批,安九高铁预计下半年开建
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号