-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnumeric_methods_lab6.py
50 lines (40 loc) · 1.01 KB
/
numeric_methods_lab6.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
from matplotlib import pyplot as plt
def f(x):
return 2 * x**2
def p(x):
return -0.5
def q(x):
return 3.0
a = 1.0
b = 1.3
alpha0 = 1.0
alpha1 = 2.0
beta0 = 1.0
beta1 = 0.0
A = 0.6
B = 1
def solve(n):
xval = []
yval = []
c = []
d = []
h = (b - a) / n
c.append(alpha1 / (h * alpha0 - alpha1))
d.append(A * h / (h * alpha0 - alpha1))
xval.append(a)
for i in range(1, n):
xval.append(a + i * h)
mi = ((h ** 2) * q(xval[i]) - 2) / (1 + h * p(xval[i]) / 2)
ki = (1 - h * p(xval[i]) / 2) / (1 + h * p(xval[i]) / 2)
Fi = f(xval[i]) / (1 + h * p(xval[i]) / 2)
c.append(1 / (mi - ki * c[i - 1]))
d.append(((h ** 2) * Fi - ki * d[i - 1]) * c[i])
xval.append(b)
yval.append((B * h + beta1 * d[n - 1]) / (beta0 * h + beta1 * (c[n - 1] + 1)))
for i in range(n):
yval.append(d[n - 1 - i] - c[n - 1 - i] * yval[i])
yval.reverse()
return xval, yval
xcoords, ycoords = solve(100)
plt.plot(xcoords, ycoords)
plt.show()