亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用solve_ivp代替odeint求解初始問題值

使用solve_ivp代替odeint求解初始問題值

斯蒂芬大帝 2021-08-24 16:55:00
目前,我使用 odeint 求解以下 ODE 方程組dx/dt = (-x + u)/2.0dy/dt = (-y + x)/5.0初始條件:x = 0,y = 0但是,我想使用 solve_ivp 這似乎是此類問題的推薦選項,但老實說我不知道如何調整代碼......這是我與 odeint 一起使用的代碼:import numpy as npfrom scipy.integrate import odeint, solve_ivpimport matplotlib.pyplot as pltdef model(z, t, u):    x = z[0]    y = z[1]    dxdt = (-x + u)/2.0    dydt = (-y + x)/5.0    dzdt = [dxdt, dydt]    return dzdtdef main():    # initial condition    z0 = [0, 0]    # number of time points    n = 401    # time points    t = np.linspace(0, 40, n)    # step input    u = np.zeros(n)    # change to 2.0 at time = 5.0    u[51:] = 2.0    # store solution    x = np.empty_like(t)    y = np.empty_like(t)    # record initial conditions    x[0] = z0[0]    y[0] = z0[1]    # solve ODE    for i in range(1, n):        # span for next time step        tspan = [t[i-1], t[i]]        # solve for next step        z = odeint(model, z0, tspan, args=(u[i],))        # store solution for plotting        x[i] = z[1][0]        y[i] = z[1][1]        # next initial condition        z0 = z[1]    # plot results    plt.plot(t,u,'g:',label='u(t)')    plt.plot(t,x,'b-',label='x(t)')    plt.plot(t,y,'r--',label='y(t)')    plt.ylabel('values')    plt.xlabel('time')    plt.legend(loc='best')    plt.show()main()
查看完整描述

1 回答

  • 1 回答
  • 0 關注
  • 464 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號