微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决有效计算多参数函数根的问题

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

我想使用 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 举报,一经查实,本站将立刻删除。