Метод Рунге- Кутте 4-го порядка
Подскажите как тут реализовать данный пример?

Мой код:
import numpy as np
from matplotlib import pyplot as plt
print("Task 6")
def make_f(b):
def foo(x, y):
return 3 / (x ** 2 + y ** 2 + b)
return foo
def runge(f, x_0, y_0, a, b, h=0.1, cor=False):
x = x_0
y = y_0
n = int((b - a) / h) + 1
print('Step:', h)
sol = {}
for i in range(n):
K1 = h * f(x, y)
K2 = h * f(x + h / 2, y + K1 / 2)
K3 = h * f(x + h / 2, y + K2 / 2)
K4 = h * f(x + h, y + K3)
if cor:
if i == 0:
theta = abs((K2 - K3) / (K1 - K2))
print('THETA', theta)
if theta > 0.033:
return runge(f, x_0, y_0, a, b, h=h / 2)
# print(x, y)
sol[x] = y
x = x + h
delta_y = (K1 + 2 * K2 + 2 * K3 + K4) / 6
y = y + delta_y
return sol
betan = [1.0, 1.4, 1.8, 2.2, 2.6, 3.0]
a = 0
b = 0.31
h = 0.1
y_0 = 0
x_0 = 0
ys = runge(make_f(betan[1]), x_0, y_0, a, b, h=h)
print(ys)
# # # xs = np.arange(a, b+h, h)
# # ys = runge(foo, x_0, y_0, a, b, h=h)
# # print(ys)
# # # plt.plot(xs, list(ys.values()))
# # # ys = runge(foo, x_0, y_0, a, b, h=h, cor=True)
# # # xs = np.arange(a, b+0.25, 0.25)
# # # plt.plot(xs, list(ys.values()))
# # # plt.plot(xs, [solution(i) for i in xs])
# # # plt.xlabel('x')
# # # plt.ylabel('y')
# # # plt.legend(['h=0.5', 'h=0.25', 'Точний'])
# # # plt.show()
Как можете заметить я пытаюся суммировать разные типы данных.Как решить эту проблему?ПОскольку у меня все в функциях то я в тупике где реализовать тут цикл for
Ответы (1 шт):
Автор решения: Stanislav Volodarskiy
→ Ссылка
Сделайте функцию, которая возвращает f:
def make_f(b):
def foo(x, y):
return 3/(x**2+y**2+b)
return foo