Решаю дифур, задаю x от 0.1 до 2.5 с шагом h , как мне кажется.
Также вычисляю численно у, и если там мне понятно , что у нас 100 элементов , то откуда берется 101 в х?
Замечание:
A(a) и т.п. это я применяю функцию A(x) к каждому компоненту вектора.
Помогите разобраться, пожалуйста, если кто-то разбирается в этом.
import matplotlib.pyplot as plt
import numpy as np
def A(x):
return np.log(3 + np.sqrt(1 + x))
def B(x):
return np.exp(-x / 2)
def C(x):
return np.sqrt((3 - x) / 2)
def F(x):
return 2 - np.fabs(1 - x)
def run(n):
h = 2.4 / (n + 1)
def an(x):
return (-(2 * A(x) + B(x) * h))
def bn(x):
return (4 * A(x) + 2 * C(x) * h ^ 2)
def cn(x):
return (-(2 * A(x) - B(x) * h))
def fn(x):
return (2 * F(x) * h ^ 2)
x = np.arange(0.1, 2.5, h)
a = np.arange(n)
A(a)
b = np.arange(n)
B(b)
c = np.arange(n)
C(c)
f = np.arange(n)
F(f)
a[0] = 0
b[0] = 1
c[0] = 0
f[0] = 0.8
alpha = list(range(n))
beta = list(range(n))
alpha[0] = (-1) * (c[0]) / (b[0])
beta[0] = (f[0]) / (b[0])
for i in range(1, n):
alpha[i] = (-1) * (c[i]) / (a[i] * alpha[i - 1] + b[i])
beta[i] = (f[i] - a[i] * beta[i - 1]) / (a[i] * alpha[i - 1] + b[i])
y = list(range(n))
y[0] = 0.8
y[-1] = 1 # кладу последний n-й элемент равный 1
for i in reversed(range(0, n-1)):
y[i] = alpha[i] * y[i + 1] + beta[i]
print(alpha)
plt.plot(x, y, color='red', marker='o', linestyle='solid')
plt.show()
run(100)