from __future__ import division
import numpy as np
import matplotlib.pyplot as plt
def f(x, t): #function for x'(t) = f(x,t)
return -x
def exact(t): #exact solution
return np.exp(-t)
def Rk4(x0, t0, dt): #Runge-Kutta Fourth Order Approximation
t = np.arange(0, 1+dt, dt)
n = len(t)
x = np.array([x0]*n)
E = np.array([x0]*n)
E0 = x0-exact(1)
x[0],t[0],E[0] = x0,t0,E0
for i in range(n-1):
h = t[i+1] - t[i]
k1 = h*f(x[i], t[i])
k2 = h*f(x[i] + 0.5 * k1, t[i] + 0.5 * h)
k3 = h*f(x[i] + 0.5 * k2, t[i] + 0.5 * h)
k4 = h*f(x[i] + k3, t[i+1])
x[i+1] = x[i] + (k1 + 2.0*(k2 + k3) + k4)/6.0
E[i+1] = E[i]+(x[i+1]-x[i])
return E
vecRk4 = np.vectorize(Rk4)
dtime = np.arange(10e-4,1,10e-5)
S = vecRk4(1.0,0.0,dtime)
plt.plot(dtime,S)
Я просто пытаюсь построить функцию Rk4 для x0 = 1.0, t0 = 0.0 как функцию dt. Я попробовал путем векторизации функции и создания массива для timestep dt, но получим ошибку «ValueError: установка элемента массива с последовательностью».Как построить определенную функцию по одному из своих аргументов в Python