#print(dydt[len(x)-2]) #dydt[-1] = dydt[-2] return dydt T = 5 sol = solve_ivp(odesys, [0, T], initial, max_step=0.1, dense_output=True, method='LSODA') fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2) H00 = h.D0(xx, L) for j in range(len(sol.t)): index = min(range(len(sol.t)), key=lambda i: abs(sol.t[i] - j)) ax1.set_xlim([0, L]) ax1.set_ylim([0, 2]) ax1.plot(xx, sol.y[:N, index]) ax1.set_ylabel('H') ax1.set_xlabel('x') ax2.plot(xx, sol.y[N:, index]) ax2.set_xlim([0, L]) ax2.set_ylim([0, 1]) ax2.set_ylabel('E') ax2.set_xlabel('x')
Ha = h.initial(x) Ha[0] = 0 Ha[-1] = 0 T = 10 dt = dx / 2 s = dt / (2 * dx) m = int(round(T / dt)) Herr = np.zeros(N) Eerr = np.zeros(N) H00 = h.D0(L) def n(z): return 1 + z / float(L) for j in range(m): #Ea[1:-1] = Ea[1:-1] + s*(Ha[2:] - Ha[:-2]) Ha[0] = (4. / 3) * Ha[1] - (1. / 3) * Ha[2] Ha[-1] = (4. / 3) * Ha[-2] - (1. / 3) * Ha[-3] Ha[1:-1] = Ha[1:-1] + s * (Ea[2:] - Ea[:-2]) #Ha[0] = (4./3)*Ha[1] - (1./3)*Ha[2] #Ha[-1] = -(4./3)*Ha[-2] + (1./3)*Ha[-3]