【问题标题】:How to minmize an interpolated function?如何最小化插值函数?
【发布时间】:2021-06-08 10:33:01
【问题描述】:

我已经在 2D 表面上插入了一个离散函数,类似于下面来自 scipy.interpolate.griddata 的代码中的示例,现在我想使用 scipy.optimize 最小化这个函数?有什么想法或解决方案吗?

感谢您的帮助。

import numpy as np
from scipy.interpolate import griddata
import matplotlib.pyplot as plt

def func(x, y):
    return x*(1-x)*np.cos(4*np.pi*x) * np.sin(4*np.pi*y**2)**2
grid_x, grid_y = np.mgrid[0:1:100j, 0:1:200j]
points = np.random.rand(1000, 2)
values = func(points[:,0], points[:,1])
grid_z0 = griddata(points, values, (grid_x, grid_y), method='cubic')
plt.subplot(221)
plt.imshow(func(grid_x, grid_y).T, extent=(0,1,0,1), origin='lower')
plt.plot(points[:,0], points[:,1], 'k.', ms=1)
plt.title('Original')
plt.subplot(222)
plt.imshow(grid_z0.T, extent=(0,1,0,1), origin='lower')
plt.title('cubic')
plt.gcf().set_size_inches(6, 6)
plt.show()

【问题讨论】:

    标签: python optimization scipy minimization


    【解决方案1】:

    griddata 返回一个数组,因此您可以使用 numpy.argmin 从字面上找到该数组中最小数字的索引 - 无需使用 scipy.optimize 进行任何复杂的优化,因为没有优化功能 - 你只有那个数字数组。

    【讨论】:

    • 非常感谢,@ForceBru 的回答非常有帮助,但是,有没有办法最小化一个插值函数,知道她的值及其在网格中某些节点的梯度?感谢您的帮助!
    • @Lemin,你可以试试interp2d - 它返回一个可调用对象并让你计算导数
    • 非常感谢!会试试的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    • 2018-10-26
    • 2023-01-11
    • 2014-04-19
    • 2019-07-26
    • 1970-01-01
    • 2020-11-19
    相关资源
    最近更新 更多