Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import math
- import numpy as np
- def fun(x):
- return math.exp(x)
- def find_x(a, b, c, d):
- n = len(b)
- alphas = [0] * n
- betas = [0] * n
- for i in range(n-1):
- alphas[i+1] = -c[i]/(a[i]*alphas[i]+b[i])
- betas[i+1] = (d[i]-a[i]*betas[i])/(a[i]*alphas[i]+b[i])
- x = [0] * n
- x[-1] = (d[-1] - a[-1] * betas[-1])/(a[-1] * alphas[-1] + b[-1])
- for i in range(n-1, 0, -1):
- x[i - 1] = x[i]*alphas[i]+betas[i]
- return (x)
- if __name__ == "__main__":
- p = 1
- q = -1
- n = 10
- a = fun(0)
- b = fun(1)
- 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 * fun(x[i+1])
- d_matrix[0] -= a_matrix[0] * a
- d_matrix[-1] -= c_matrix[0] * b
- y = find_x(a_matrix, b_matrix, c_matrix, d_matrix)
- y = np.concatenate(([a], y[:], [b]))
- e = [0] * (n + 1)
- for i in range(n + 1):
- e[i] = abs(fun(x[i]) - y[i])
- print('xi: ', x[i], '|', 'counted_y[i]: ', y[i], '|', 'yi: ', fun(x[i]), '|', 'error: ', e[i])
- print('max_error', max(e))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement