Advertisement
Guest User

Untitled

a guest
May 20th, 2018
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.14 KB | None | 0 0
  1. import pandas as pd
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4.  
  5. data = pd.read_csv('input.csv')
  6. x = data['x'].tolist()
  7. f = data['f(x)'].tolist()
  8. start = float(data['a'][0])
  9. end = float(data['b'][0])
  10. df0 = 0
  11. dfn = -0.939692621
  12.  
  13.  
  14. def func(x):
  15.     return np.sin(4 * x)
  16.  
  17.  
  18. def h(i):
  19.     return x[i] - x[i - 1]
  20.  
  21.  
  22. def coeffs_vector(A, B):
  23.     alpha = np.empty(shape=(N))
  24.     beta = np.empty(shape=(N))
  25.     cv = np.empty(shape=(N))
  26.  
  27.     y = A[0][0]
  28.     alpha[0] = -A[0][1] / y
  29.     beta[0] = B[0] / y
  30.  
  31.     for i in range(1, N - 1):
  32.         y = A[i][i] + A[i][i - 1] * alpha[i - 1]
  33.         alpha[i] = -A[i][i + 1] / y
  34.         beta[i] = (B[i] - A[i][i - 1] * beta[i - 1]) / y
  35.  
  36.     cv[N - 1] = (B[N - 1] - A[N - 1][N - 2] * beta[N - 2]) / (A[N - 1][N - 1] + A[N - 1][N - 2] * alpha[N - 2])
  37.     for i in range(N - 2, 0, -1):
  38.         cv[i] = alpha[i] * cv[i + 1] + beta[i]
  39.  
  40.  
  41.  
  42.     return cv
  43.  
  44. def m(i, )
  45.  
  46.  
  47. def s(i, arg):
  48.     cv = coeffs_vector(A, B)
  49.     return (cv[i - 1] * func(x[i] - arg)) / (6 * (x[i] - x[i - 1])) + (cv[i] * func(arg - x[i - 1])) / (6 * (x[i] - x[i - 1])) + (f[i - 1] - (cv[i - 1] * (x[i] - x[i - 1]) * (x[i] - x[i - 1])) / 6) * ((x[i] - arg) / (x[i] - x[i - 1])) + (f[i] - (cv[i] * (x[i] - x[i - 1]) * (x[i] - x[i - 1]) / 6)) * ((arg - x[i - 1]) / (x[i] - x[i - 1]))
  50.  
  51.  
  52. def _s(i, arg):
  53.     cv = coeffs_vector(A, B)
  54.     a = M[i-1] * (x[i] - arg)**3 / 6 * h(i)
  55.     b = M[i] * (arg - x[i-1])**3 / 6 * h(i)
  56.     c = (f[i-1] - M[i]*h(i)**2 / 6) * ((x[i] - arg) / h(i))
  57.     d = (f[i] - M[i]*h(i)**2 / 6) * ((arg - x[i-1]) / h(i))
  58.     return a + b + c + d
  59.  
  60. # print('Input data\n~~~~~~~~~~~~~')
  61. # print(data)
  62.  
  63. # ================ Заполнение матриц ===============
  64. N = len(x)
  65. A = np.zeros(shape=(N,N))
  66. B = np.empty(shape=(N))
  67. M = np.empty(shape=(N))
  68.  
  69. A[0][0] = (x[1] - x[0]) / 3
  70. A[0][1] = (x[1] - x[0]) / 6
  71. A[N - 1][N - 2] = (x[N - 1] - x[N - 2]) / 6
  72. A[N - 1][N - 1] = (x[N - 1] - x[N - 2]) / 3
  73. for i in range(1, N - 1):
  74.     for j in range(0, N):
  75.         if j < i - 1 or j > i + 1:
  76.             A[i][j] = 0
  77.         elif j == i - 1:
  78.             A[i][j] = (x[i] - x[i - 1]) / 6
  79.         elif j == i:
  80.             A[i][j] = (x[i] - x[i - 1] + x[i+1] - x[i]) / 3
  81.         elif j == i + 1:
  82.             A[i][j] = (x[i + 1] - x[i]) / 6
  83.  
  84.  
  85. for i in range(N - 1):
  86.     B[i] = (f[i + 1] - f[i]) / (x[i + 1] - x[i]) - (f[i] - f[i - 1]) / (x[i] - x[i - 1])
  87.  
  88. M[0] = ((A[1][1] - A[0][1]) / h(0) - df0 - h(0) * B[0] / 6) * (3 / h(0))
  89. for i in range(N - 2):
  90.     M[i + 1] = B[i]
  91. M[N - 1] = dfn
  92. # print(A)
  93. # print(B)
  94.  
  95. points = np.empty(1000)
  96. spline = np.empty(1000)
  97. for i in range(1000):
  98.     points[i] = i
  99.     for m in range(N-1):
  100.         if ((i <= X[m+1]) && (i >= X[m]))
  101.         {
  102.             spline[i] = _s(m+1, i)
  103.             break;
  104.         }
  105.         else
  106.             if (i > X[n - 1])
  107.             {
  108.                 spline[i] = _s(N-1, i)
  109.                 break;
  110.             }
  111.             else
  112.                 if (i < X[0])
  113.                 {
  114.                     spline[i] = _s(1, i)
  115.                     break;
  116.                 }
  117.  
  118. plt.plot(points, spline)
  119. plt.show()
  120.  
  121. # for i in range(100):
  122. #    print(i, ',', np.sin(4 * i), sep='')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement