美文网首页
利用割线法求解一元函数极小值(Python实现)

利用割线法求解一元函数极小值(Python实现)

作者: 向阳花继续开放 | 来源:发表于2017-04-27 23:55 被阅读0次

1 问题

对于下述一元函数:
$$
\phi(\alpha)=4(1024\alpha-4)4+(2\alpha-1)2 \tag{1}
$$
求取$\phi(\alpha)$在$[0,+\infty]$上的极小点$\alpha_0$。


2 分析

利用割线法的算法进行求解,在给定初值$\alpha{-1}$和$\alpha{0}$的情况下,迭代进行求解,求解算法如下:
$$
\alpha{k+1}=\frac{\phi'(x{k})x{(k-1)}-\phi'(x{k-1})x{(k)}}{\phi'(x{k})-\phi'(x^{(k-1)})} \tag{2}
$$


3 编程实现

利用Python进行实现:

import sys

def derivative(x, dx=1e-6):
    # Computes the numerical derivative of a function.
        return (g(x+dx) - g(x)) / dx

def g(x):
    return 4*(1024*x-4)**4 + (2*x-1)**2

def secant_method(aList):
    a = aList[-1]
    b = aList[-2]
    numerator = float(derivative(a)*b - derivative(b)*a)
    denominator = float(derivative(a) - derivative(b))
    step_length = numerator / denominator
    if g(step_length) < g(aList[-1]):
        aList.append(step_length)
        secant_method(aList)
    else:
        return aList

aList = [1, 0.5]
finalList = secant_method(aList)
answer = finalList[-1]
print(answer)

得到结果:$\alpha_0=3.67\times10^{-3}$


4 遇到的问题

问题

最开始采用以下代码:

aList = [1, 0.5]
finalList = secant_method(aList)
answer = finalList[-1]
print(answer)

报错如下:

Traceback (most recent call last):
  File "G:/PyCharm/PycharmProjects/Optimization/An introduction to optimization/diff.py", line 25, in <module>
    answer = finalList[-1]
TypeError: 'NoneType' object is not subscriptable

Process finished with exit code 1

问题原因

报错原因在于列表被函数调用是一个in-place过程,将其赋给另一个对象时,传递的是一个None类型的数据

解决办法

修改为以下代码即可:

aList = [1, 0.5]
secant_method(aList)
answer = aList[-1]
print(answer)

相关文章

  • 利用割线法求解一元函数极小值(Python实现)

    1 问题 对于下述一元函数:$$\phi(\alpha)=4(1024\alpha-4)4+(2\alpha-1)...

  • 熵权法的pytho

    借鉴上述对熵权法的介绍和实例讲解,用python实现求解,主要利用的是numpy的矩阵计算。

  • 牛顿法python3实现

    本文参考链接:牛顿法实现偏导数求解 输出结果 从输出结果可以看出最终收敛至(0,0),即f在(0,0)处取得极小值。

  • 最优化算法总结

    最优化算法是建立神经网络模型后,求解模型参数的算法 牛顿法 收敛速度快 靠近极小值时收敛速度减慢,求解Hessia...

  • 计算1到100的和

    利用递归求解 用 最笨的方法求解: 用python牛逼的sum求解: 用奇偶相加求解:

  • 分治策略

    求解递归式方法 最大子数组问题 分治策略 分治法流程 伪代码 C++实现 线性解 流程 代入法求解递归式 递归树法...

  • Python3 趣味系列题4 ------非递归解决

      人们通常利用递归的方法求解汉诺塔问题。递归程序的实现比较简单,但是难于理解。下面给出python3的递归程序:...

  • 求解根号2

    梯度下降求解 公式 理解设时,的解即为的解。也是该函数的极小值点。对应问题可以转化为求解时的值。1.png如果使用...

  • 常微分方程数值解:Python求解

    这里对使用python求解常微分方程提供两种思路,一种是自己编程实现欧拉法,改进欧拉法或者四阶龙格库塔,这样有助于...

  • 求解析式

    求解析式问题 换元法 步骤 配凑法 概述 步骤 消元法 概述 步骤 拓展 1 2 待定系数法 概述 步骤 利用函数...

网友评论

      本文标题:利用割线法求解一元函数极小值(Python实现)

      本文链接:https://www.haomeiwen.com/subject/qtpinttx.html