python - 使用 simpy.optimize.bisect 查找函数的零点,具有复杂函数
问题描述
我是一名机械工程专业的学生,这是我第一次接触 Python 环境,或者 Anaconda 的发行版。我的任务是找到这个函数的零点:
⋅sin()cos()+⋅cos()sin()2−⋅cos()−ℎ⋅sin()=0
使用参数:
D = 220mm,
h = 1040mm,
l = 1420mm,where
n = 81
是函数上等距点的数量,函数限于:
∈[0,2] 其中是一个 np.array。
绘制函数
问题是,当我尝试将函数插入时bisect(fun, a, b)
,错误提示
“numpy.ndarray”对象不可调用
有人可以帮助一个菜鸟程序员吗?谢谢。
解决方案
问题不清楚,你应该分享你的代码,如果我是正确的,标题应该说 scipy,而不是 simpy。
除此之外,我没有得到相同的函数图,你能检查它是否正确吗?
如果你想使用二分法,你应该这样做:
import numpy as np
from scipy.optimize import bisect
def fun(x, D, h, l):
return D * np.sin(x) * np.cos(x) + l * np.cos(x) * np.sin(x) * 2 - l * np.cos(x) - h * np.sin(x)
D = 220
h = 1040
l = 1420
print(bisect(lambda x: fun(x, D, h, l), 0, 2*np.pi))
请注意,二分法只能找到一个零,这根本不起作用,因为函数的两个极值具有相同的符号。对于这个特定的函数,您可以在 (0, pi) 和 (pi, 2pi) 区间运行平分以找到两个零点。
推荐阅读
- kubernetes - 在 kubernetes 上打开 Jupyterhub url 太慢了(获取 js、图标)
- javascript - VS 代码中断语句中更漂亮的扩展
- selenium - 为什么 jsoup 比 selenium 或 curl 快这么多?
- reactjs - React 组件到 hooks,如何迁移 redux-thunk 触发的 redux 动作?
- html - 如何使用 HTML 和 CSS 添加 Windows 鼠标悬停效果
- c++ - 在移动构造函数中,“member(other.member)”的含义是什么
- docker - 设置 Hyperledger Fabric 开发环境时出现路由错误
- c++ - 为 QML ListView 实现 QAbstractListModel 子类?
- c++ - C++:使用 std::ofstream 的文本文件写入过程中的韩文字母编码问题
- vue.js - 如何将表格添加到 vue2-editor 组件?