有效计算多参数函数根的问题

问题描述

你好,我亲爱的互联网上的聪明人,

我想使用 scipy.optimize.fsolve 计算给定区间内(不可逆的)两个参数函数的根:

kappa = 1.4

def Av_ma(Ma):
    Ma[np.where(Ma < 0)] = 0
    return Ma * ((2 + (kappa - 1) * (Ma ** 2)) / (kappa + 1)) ** ((kappa + 1) / (2 * (1 - kappa)))


def Av_ma_root(Ma,_Av_e_2):
    return Av_ma(Ma) - _Av_e_2

实际功能 Av_ma 只有一个参数,但我想计算 _Av_e_2 值在 0 和 1 之间的根。因此,我想要一个只包含 _Av_e_2 的 100 个值的根集的数组。 这是我的代码到目前为止的样子:

Av_e_2 = np.arange(0,1 + 1e-12,0.01)
x0 = np.arange(0.1,1,0.1)
    
startvec = np.repeat(x0,len(Av_e_2))
lAv_e_2 = np.tile(Av_e_2,np.shape(x0)[0])
pv2 = optimize.fsolve(Av_ma_root,startvec,args=lAv_e_2)
pv2 = np.reshape(pv2,(len(x0),len(Av_e_2)))
pv2 = np.round(pv2,6)
pv2 = np.array([np.unique(p) for p in np.transpose(pv2)])
print(pv2)

我定义了一个长度为 Av_e_2 的“起始估计”数组。 它用于为 fsolve 的每个 Av_e_2 值提供相同的起始估计。

然后我定义了一个包含 Av_e_2 值的数组。它用来给 fsolve Av_e_2 的每一个

优化后,我重塑,舍入并丢弃非唯一值。

简而言之:我的代码不起作用。它不会产生我想要的解决方

test_vec_opt.py:25: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this,you must specify 'dtype=object' when creating the ndarray.

pv2 = np.array([np.unique(p) for p in np.transpose(pv2)])

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)