问题描述
你好,我亲爱的互联网上的聪明人,
我想使用 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 (将#修改为@)