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

使用brentq查找函数的最佳参数

如何解决使用brentq查找函数的最佳参数

我想找到最佳角度,以70 m / s的初始速度到达300 m的距离。我想使用scipy.optimize.brentq查找使我的轨迹走给定距离的角度。我得到一些我不明白的错误。我的代码

def trajectory(V_i,theta,drag=True):
    g = 9.8
    m = 45.93
    C = 0.25
    r = 42.67/2
    A = np.pi*pow(r,2)
    ro = 0.001

    time = np.linspace(0,100,10000)
    tof = 0.0
    dt = time[1] - time[0]
    gravity = -g * m
    v_x = V_i * np.cos(theta)
    v_y = V_i * np.sin(theta)
    d_x = 0.0
    d_y = 0.0
    d_xs = list()
    d_ys = list()
    d_xs.append(d_x)
    d_ys.append(d_y)
    
    for t in time:
        F_x = 0.0
        F_y = 0.0
        if (drag == True):
            F_y = F_y - 0.5*C*A*ro*pow(v_y,2)
            F_x = F_x - 0.5*C*A*ro*pow(v_x,2) * np.sign(v_y)
        F_y = F_y + gravity

        d_x = d_x + v_x * dt + (F_x / (2 * m)) * dt**2
        d_y = d_y + v_y * dt + (F_y / (2 * m)) * dt**2
        v_x = v_x + (F_x / m) * dt
        v_y = v_y + (F_y / m) * dt
        if (d_y >= 0.0): #loop runs until y is less then 0.0- hits ground
            d_xs.append(d_x)
            d_ys.append(d_y)
        else:
            tof = t 
            d_xs.append(d_x)
            d_ys.append(d_y)
            break

    return d_xs,d_ys,tof

V_i = 70
d = 300

def distance(theta,V_i,'d',drag=True):
    return trajectory(V_i,drag=True)-d


root = scipy.optimize.brentq(distance,np.pi/9,np.pi/3,args=('V_i','d'))
plot(distance,distance(V_i,d));
plot(root,distance(root),'o');

如果我从V_i和d中删除了``,则错误提示:--'tuple'和'int'不支持的操作数类型 任何帮助将不胜感激,我刚刚开始编码!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。