文档章节

使用牛顿迭代法求解一阶导数方程 python

元禛慎独
 元禛慎独
发布于 2017/02/13 17:18
字数 442
阅读 160
收藏 0

用一个给定边长 4 的正方形来折一个没有盖的纸盒,设纸盒的底部边长为 l,则纸盒的高为 (4-l)/2,那么纸盒的体积为:

怎样才能使纸盒的容积最大?也就是在 l>0,4-l>0 的限制条件下,函数 V(l) 的最大值是多少?

1、绘图

import numpy as np
import matplotlib.pyplot as plt

l = np.linspace(0,4,100)
V = lambda l: 0.5*l**2*(4-l)
plt.plot(l,V(l))

plt.show()

由图可知,f(x)只存在一个极值,并且是改点为所求的极大值点,即相当于求解方程f'(x)=0

PS D:\yunke\script\test> cat .\test_niu.py
import numpy as np

h=0.0001

def get_num(x,maxiter=10):   //默认使用牛顿法迭代10次
        #f=lambda x: x**2-c
        #f=lambda x: x**2-2*x-4
        F=lambda x: 0.5*x**2*(4-x)
        def df(x,f=F):                      //使用导数定义法求解导数
                return (f(x+h)-f(x))/h

        for i in range(maxiter):
                #x=x-F(x)/df(x)   //计算一阶导数,即是求解  f(x)=0  
                x=x-df(x)/df(x,df)  //计算二阶导数,即是求解  f'(x)=0
                print i+1,x
        return x

print get_num(10)

##############################

输出结果

1 5.7692303736
2 3.75166276899
3 2.91004604198
4 2.68541477646
5 2.66674802777
6 2.66661667775
7 2.66661666635
8 2.66661666635
9 2.66661666635
10 2.66661666635
2.66661666635

#######################################

还可以使用  sympy进行求解

详见:http://www.cnblogs.com/NaughtyBaby/p/5427779.html

    from sympy.abc import l
    V = 0.5*l**2*(4-l)
    # 看看一次导函数:
    print V.diff(l)
    # output is : -0.5*l**2 + 1.0*l*(-l + 4)
    # 一次导函数的定义域为(-oo,oo),因此关键点为V'(l)=0的根
    cp = sympy.solve(V.diff(l),l)
    print cp
    # output is: [0.0, 2.66666666666667]
    # 找到关键点后,使用二次导数测试:
    for p in cp:
        print V.diff(l,2).subs(l,p)
    # output is: 4, -4
    # 因此知道在l=2.666666处时,纸盒的体积最大

© 著作权归作者所有

元禛慎独
粉丝 3
博文 209
码字总数 60366
作品 0
朝阳
程序员
私信 提问
机器学习中牛顿法凸优化的通俗解释

之前,我发过一篇文章,通俗地解释了梯度下降算法的数学原理和推导过程,推荐一看。链接如下: 简单的梯度下降算法,你真的懂了吗? 我们知道,梯度下降算法是利用梯度进行一阶优化,而今天我...

红色石头Will
2018/06/27
0
0
机器学习之牛顿法

泰勒公式 首先看泰勒公式,对于函数,如果函数平滑且某点存在各阶导数,则可以用一个多项式来描述该点邻域的近似值。公式如下: 牛顿法 牛顿法一般用来求解方程的根和求解极值。 数值优化算法...

超人汪小建
2017/11/16
0
0
优化算法——拟牛顿法之DFP算法

一、牛顿法 在博文“优化算法——牛顿法(Newton Method)”中介绍了牛顿法的思路,牛顿法具有二阶收敛性,相比较最速下降法,收敛的速度更快。在牛顿法中使用到了函数的二阶导数的信息,对于函...

google19890102
2015/05/19
0
0
【最优化】教你用牛顿法寻找最优点

在最速梯度下降法中,可以知道迭代点的更新为:x^(k+1)=x^(k)+tkdf(x^(k)) ,可以看到只用到了目标函数的一阶导数信息(迭代方向df(x^(k))),而牛顿法则用到了二阶导数信息,下面讲解如何用到...

机器学习算法与自然语言处理
2018/02/10
0
0
深度学习优化入门:Momentum、RMSProp 和 Adam

虽然局部极小值和鞍点会阻碍我们的训练,但病态曲率会减慢训练的速度,以至于从事机器学习的人可能会认为搜索已经收敛到一个次优的极小值。让我们深入了解什么是病态曲率。 病态曲率 考虑以下...

技术小能手
2018/07/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

分页查询

一、配置 /*** @author beth* @data 2019-10-14 20:01*/@Configurationpublic class MybatisPlusConfig { @Bean public PaginationInterceptor paginationInterceptor(){ ......

一个yuanbeth
昨天
5
0
在LINQPad中使用Ignite.NET

LINQPad是进行.NET开发的一款优秀工具,非常有利于Ignite.NET API的快速入门。 入门 下载LINQPad:linqpad.net/Download.aspx,注意要选择64位操作系统的AnyCPU版本; 安装Ignite.NET的NuGet...

李玉珏
昨天
7
0
JS其他类型值转化为Boolean类型规则

本文转载于:专业的前端网站➤JS其他类型值转化为Boolean类型规则 由于最近在笔试的时候,发现好多关于其他类型转化为Boolean类型的题目,因此总结一下! 一、String类型转化为Boolean 1.转化...

前端老手
昨天
7
0
EurekaClient自动装配及启动流程解析

在上篇文章中,我们简单介绍了EurekaServer自动装配及启动流程解析,本篇文章则继续研究EurekaClient的相关代码 老规矩,先看spring.factories文件,其中引入了一个配置类EurekaDiscoveryClie...

Java学习录
昨天
11
0
析构函数是否必须为虚函数?为何?

p517 在C++中,基类指针可以指向一个派生类的对象。如果基类的析构函数不是虚函数,当需要delete这个指向派生类的基类指针时,就只会调用基类的析构函数,而派生类的析构函数无法被调用。容易...

天王盖地虎626
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部