总的来说,我试图“缩放”一个数组,使数组的积分为1,即数组元素的和除以元素的个数为1。但是,这种缩放必须通过改变参数alpha来实现,而不是简单地将数组乘以比例因子。为此,我使用scipy优化最小化。问题是代码运行,输出“优化终止成功”,但当前显示的函数值不是0,所以很明显优化实际上没有成功。在
This is a screenshot from the paper that defines the equation.
import numpy as np
from scipy.optimize import minimize
# just defining some parameters
N = 100
g = np.ones(N)
eta = np.array([i/100 for i in range(N)])
g_at_one = 0.01
def my_minimization_func(alpha):
g[:] = alpha*(1+(1-g_at_one/alpha)*np.exp((eta[:]-eta[N-1])/2)*(1/np.sqrt(3)*np.sin(np.sqrt(3)/2*(eta[:] - eta[N-1])) - np.cos(np.sqrt(3)/2*(eta[:] - eta[N-1]))))
to_be_minimized = np.sum(g[:])/N - 1
return to_be_minimized
result_of_minimization = minimize(my_minimization_func, 0.1, options={'gtol': 1e-8, 'disp': True})
alpha_at_min = result_of_minimization.x
print(alpha_at_min)
我不清楚,你为什么要用最小化来解决这个问题?您可以简单地规范化矩阵,然后使用规范化矩阵和旧矩阵计算
alpha
。{寻找矩阵^的规范化。在在您的代码中,目标函数包含一个被零除的
(1-g_at_one/alpha)
,因此该函数不是在0中定义的,这就是为什么我假设scipy
正在跳过它。在编辑: 所以我只是简单地重新制定了你的问题,并使用了一个约束条件,添加了一些打印,以更好地可视化。我希望这有助于:
输出:
^{pr2}$相关问题 更多 >
编程相关推荐