Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import math
- import numpy as np
- def progonka(a, b, c, d, n):
- # print(n)
- n = len(b)
- al = [0]*n
- bet = [0]*n
- x = [0]*n
- # al[0] = -c[0] / b[0]
- # bet[0] = d[0] / b[0]
- for i in range(n-1):
- al[i+1] = -c[i]/(a[i]*al[i]+b[i])
- bet[i+1] = (d[i]-a[i]*bet[i])/(a[i]*al[i]+b[i])
- # print("alpha: ", al, "beta: ", bet)
- x[-1] = (d[-1]-a[-1]*bet[-1])/(a[-1]*al[-1]+b[-1])
- # print(x[n-1])
- for i in range(n-1, 0, -1):
- x[i-1] = al[i]*x[i]+bet[i]
- # print(x)
- return (x)
- def f(x):
- return math.exp(x)
- #return math.sin(x)
- def diff(x):
- return math.exp(x)
- #return math.sin(2*x) / 3 + math.cos(2*x) + math.sin(x) / 3
- def main():
- p = 1 # 0
- q = -1 # 4
- n = 10 # -> 9й порядок
- a = diff(0)
- b = diff(1)
- # print("a ", a, "b ", b)
- h = 1/n
- x = [0]*(n+1)
- for i in range(n+1):
- x[i] = round(i*h, 2)
- a_matrix = [1 - h/2 * p]*(n-2)
- b_matrix = [h**2 * q - 2]*(n-1)
- c_matrix = [1 + h/2 * p]*(n-2)
- d_matrix = [0]*(n-1)
- for i in range(n-1):
- d_matrix[i] = h**2 * f(x[i+1])
- d_matrix[0] -= a_matrix[0] * a
- d_matrix[-1] -= c_matrix[0] * b
- # print("a_matrix: ", a_matrix)
- # print("b_matrix: ", b_matrix)
- # print("c_matrix: ", c_matrix)
- # print("d_matrix: ", d_matrix)
- y = progonka(a_matrix, b_matrix, c_matrix, d_matrix, n-1)
- y = np.concatenate(([a], y[:], [b]))
- # y[0] = a
- # y[-1] = b
- # print("y: ", y)
- e = [0]*(n+1)
- for i in range(n+1):
- e[i] = abs(diff(x[i]) - y[i])
- # print("xi", x[i], "yi_", y[i], "yi", diff(x[i]), "e", e[i])
- print("max error1", max(e))
- y0 = [1]*(n+1)
- yi = [0]*(n+1)
- # y0[1] = 1
- yi[1] = h
- for i in range(1, n):
- y0[i+1] = (f(x[i])*h**2 + (2-q*h**2)*y0[i] -
- (1-p*h/2)*y0[i-1])/(1+p*h/2)
- yi[i+1] = ((2-q*h**2)*yi[i] - (1-p*h/2)*yi[i-1])/(1+p*h/2)
- c1 = (b - y0[-1])/yi[-1]
- yy = [0]*(n+1)
- for i in range(n+1):
- yy[i] = y0[i]+c1*yi[i]
- # print(yy)
- e2 = [0]*(n+1)
- for i in range(n+1):
- e2[i] = abs(diff(x[i]) - yy[i])
- print("xi", x[i], "yi_", yy[i], "yi", diff(x[i]), "e", e2[i])
- print("max error2", max(e2))
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement