Python 求函数极小值、极大值点

3 篇文章 0 订阅
1 篇文章 0 订阅

Python 求函数极小值、极大值点

一、求极小值

1.不含参数的函数

例:求f(x)=sin(2*x)cos(3x)在x=0.2附近的极小值点。
利用scipy.optimize中的fmin函数求解,代码如下:

from scipy.optimize import fmin
import numpy as np
def f(x):
	return np.sin(2*x)*np.cos(3*x)
result=fmin(f,0.2)#第一个参数是所求解的函数,第二个是x的初始迭代值
#result=fmin(f,0.2,disp=False,xtol=1e-8)
print(result[0])

fmin的第一个参数是所求解的函数,第二个是x的初始迭代值,这里选取在x=0.2处开始迭代,最终找到x=0.2附近的极小值点。如果函数有多个极小值点,则会得到靠近初始迭代值的那个极小值点。此外还可以设置参数disp=False来使得在求解时不输出任何消息,还可以修改参数xtol来设置误差,还可以设置参数args来求解含参数的函数(将在下面介绍)。

2.含参数的函数

例:求f(x)=sin(w1*x)cos(w2x)在x=0.2附近的极小值点,其中w1和w2是可任取的参数。
只需在fmin函数中设置参数args即可,代码如下:

from scipy.optimize import fmin
import numpy as np
def f(x,w1,w2):
	return np.sin(w1*x)*np.cos(w2*x)
result=fmin(f,0.2,args=(2,3))#参数args=(2,3)代表w1=2, w2=3
#result=fmin(f,0.2,args=(2,3),disp=False,xtol=1e-8)
print(result[0])

二、求极大值

由于scipy.optimize中只有fmin函数,没有fmax函数,我们自定义一个fmax函数。代码如下:

from scipy.optimize import fmin
import numpy as np
def fmax(func, x0, args=(), **kwargs):
    return fmin(lambda x:-func(x,*args),x0, **kwargs)#对函数加个负号相当于求极大值
def f(x):
	return np.sin(2*x)*np.cos(3*x)
def f2(x,w1,w2):
	return np.sin(w1*x)*np.cos(w2*x)
result=fmax(f,0.1)#,disp=False,xtol=1e-8
print(result[0])
result2=fmax(f2,0.1,args=(2,3))#,disp=False,xtol=1e-8
print(result2[0])

使用方法与fmin完全相同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值