34 lines
860 B
Python
34 lines
860 B
Python
import numpy as np
|
|
|
|
x0 = 1.7
|
|
xk = 2.7
|
|
h = 0.1
|
|
y0 = 5.3
|
|
|
|
def f(x, y):
|
|
return x**2 + np.cos(y / np.pi)
|
|
|
|
def runge_kutta_4(f, x0, y0, h, xk):
|
|
n = int((xk - x0) / h) + 1
|
|
x = [x0 + i * h for i in range(n)]
|
|
y = [0] * n
|
|
y[0] = y0
|
|
|
|
print("Tabela wyników:")
|
|
print(f"{'i':<5}{'x':<10}{'y':<15}{'k1':<10}{'k2':<10}{'k3':<10}{'k4':<10}{'Δy':<10}")
|
|
|
|
for i in range(1, n):
|
|
k1 = h * f(x[i-1], y[i-1])
|
|
k2 = h * f(x[i-1] + h/2, y[i-1] + k1/2)
|
|
k3 = h * f(x[i-1] + h/2, y[i-1] + k2/2)
|
|
k4 = h * f(x[i-1] + h, y[i-1] + k3)
|
|
Δy = (k1 + 2*k2 + 2*k3 + k4) / 6
|
|
y[i] = y[i-1] + Δy
|
|
print(f"{i-1:<5}{x[i-1]:<10.2f}{y[i-1]:<15.5f}{k1:<10.5f}{k2:<10.5f}{k3:<10.5f}{k4:<10.5f}{Δy:<10.5f}")
|
|
|
|
print(f"{n-1:<5}{x[-1]:<10.2f}{y[-1]:<15.5f}")
|
|
|
|
return x, y
|
|
|
|
x, y = runge_kutta_4(f, x0, y0, h, xk)
|