栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【Python】最速上升法求函数最大值

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Python】最速上升法求函数最大值

简介

运用回归设计和响应曲面分析的方法来解决实验工作者通过实验寻找最佳的工艺条件,在实验者所选定的一个小区域上运用回归设计拟合线性回归方程,用最速上升法向最佳区域逼近因子区域,通常,将此法重复使用若干次,就可达到最佳区域。

方法步骤

利用最速上升法寻找最佳区域的步骤为:
(1)在变量 的某区域内,通过正交设计,拟合一个线性回归方程;
(2)由拟合的线性回归方程,找出最速上升路线;
(3)沿着这条上升路线进行一系列实验,直到y的值不再明显增大为止;
(4)在(3)中y值不再明显增大的那一点的邻域内重复(1)、(2)、(3);
(5)当拟合的线性回归方程不再显著,y的曲面具有明显的弯曲时,拟合二次回归,进
而找出最佳条件。

题目

代码实现
# Method of Steepest Ascent 範例7.5, page 690


import math as m

def f(x,y):                                #定義函數f(x,y)
    return 4*x*y-m.pow(x,4)-m.pow(y,4)+4


def Gf(x,y):                               #定義f(x,y)的一次偏導數
    x1=4*y-4*m.pow(x,3)
    x2=4*x-4*m.pow(y,3)
    return [x1,x2]

def GGf(x,y):                              #定義f(x,y)的二次偏導數
    x1=-12*m.pow(x,2)
    x2=4
    x3=-12*m.pow(y,2)
    return [x1,x2,x3]

def h(t,x,y):              #定義f(x,y)沿著梯度方向的單變數函數h(t)
    u=Gf(x,y)
    return f(x+t*u[0],y+t*u[1])

def dh(t,x,y):             #定義h(t)的一次導函數
    u=Gf(x,y)
    v= Gf(x+t*u[0],y+t*u[1])
    return u[0]*v[0]+u[1]*v[1]

def ddh(t,x,y):            #定義h(t)的二次導函數
    u=Gf(x,y)
    x=x+t*u[0]
    y=y+t*u[1]
    v=GGf(x,y)
    return v[0]*m.pow(u[0],2)+2*v[1]*u[0]*u[1]+v[2]*m.pow(u[1],2)
    

x=4        #隨意起始點
y=3
max=-100.7    #隨意函數初值
m1=f(x,y)     #起始點含數值
while abs(max-m1)>0.0000001:      #Steepest Ascent method
    max=m1
    u=Gf(x,y)
    t=0.3
    s=t-dh(t,x,y)/ddh(t,x,y)
    while abs(s-t)>0.0000001:    #尋找dh的零根 (牛頓法)
       t=s
       s=t-dh(t,x,y)/ddh(t,x,y)
    
    x=x+s*u[0]   #新的起始點
    y=y+s*u[1]
    m1=f(x,y)

print(x)      #印出最大值發生的位置
print(y) 
print(max)

https://baike.baidu.com/item/%E6%9C%80%E9%80%9F%E4%B8%8A%E5%8D%87%E6%B3%95/19190718?fr=aladdin#4

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/649274.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号