python - 有效计算多参数函数的根的问题
问题描述
你好,我亲爱的互联网上的聪明人,
我想使用 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 只有一个参数,但我想计算 0 到 1 之间的 _Av_e_2 值的根。因此,我想要一个仅包含 100 个 _Av_e_2 值的根集的数组。到目前为止,这就是我的代码的样子:
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)])
解决方案
推荐阅读
- visual-studio-code - 如何通过右键单击打开 VSCode Remote-WSL
- bash - cURL:管理下载错误
- python - 使用 group by 后如何将结果保存为数据框
- shell - 循环监听代码不适用于 Shuttler 按钮
- c# - 如何在不循环的情况下将 LINQ 查询结果分组到 DataGridView
- html - 如果 HTML 表格太大,则直到下一页才会开始
- haskell - 如何在 haskell 中获取元组的索引?
- javascript - 我正在使用 node js 开发一个应用程序,它在本地运行良好,但每当我尝试将其上传到 heroku 时就会崩溃,它说 cat find dotenv
- javascript - 通过谷歌应用脚本向不和谐频道发送消息
- oracle - 如何在 PL/SQL 中创建可以创建限制的触发器,以便它们只能放置 1 个字符?