Advertisement
Guest User

Untitled

a guest
May 21st, 2019
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.75 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Tue May 21 12:21:11 2019
  4.  
  5. @author: HAL900
  6. """
  7.  
  8. import numpy as np
  9. import matplotlib.pyplot as plt
  10.  
  11. def baryGew(x):
  12.     n = len(x)
  13.     lambdas = np.ones_like(x)
  14.     for i in range(n):
  15.         for k in range(n):
  16.             if k == i:
  17.                 continue
  18.             lambdas[i] *=  1 / (x[i]-x[k])
  19.     return lambdas
  20.  
  21. def bary(x, f, lam, X):
  22.     n = len(x)
  23.     Y = np.zeros_like(X)
  24.  
  25.     for j in range(len(X)):
  26.         sum1 = 0
  27.         sum2 = 0
  28.         zero = False
  29.         for i in range(n):
  30.             if X[j] == x[i]:
  31.                 Y[j] = f[i]
  32.                 zero = True
  33.             else:
  34.                 sum1 += lam[i]*f[i] / (X[j]-x[i])
  35.                 sum2 += lam[i] / (X[j]-x[i])
  36.        
  37.         if not zero:
  38.             Y[j] = sum1 / sum2
  39.    
  40.     return Y
  41.  
  42. def f(x):
  43.     return 1 / (1 + 25*np.power(x,2))
  44.  
  45. def test():
  46.     xn = np.linspace(-1,1,401)
  47.    
  48.     xi_10 = [2*i / 10 - 1 for i in range(11)]
  49.     xi_100 = [2*i / 100 - 1 for i in range(101)]
  50.     xi2_10 = [np.cos( (2*i+1)*np.pi / (2*10+2) ) for i in range(11)]
  51.     xi2_100 = [np.cos( (2*i+1)*np.pi / (2*100+2) ) for i in range(101)]
  52.    
  53.     b10 = bary(xi_10, f(xi_10), baryGew(xi_10), xn)
  54.     b100 = bary(xi_100, f(xi_100), baryGew(xi_100), xn)
  55.     plt.figure(1)
  56.     plt.plot(xn, f(xn), label="f")
  57.     plt.plot(xn, b10, label="p,10")
  58.     plt.plot(xn, b100, label="p,100")
  59.     plt.ylim(-1,1)
  60.     plt.legend()
  61.    
  62.     b10 = bary(xi2_10, f(xi2_10), baryGew(xi2_10), xn)
  63.     b100 = bary(xi2_100, f(xi2_100), baryGew(xi2_100), xn)
  64.     plt.figure(2)
  65.     plt.plot(xn, f(xn), label="f")
  66.     plt.plot(xn, b10, label="p,10")
  67.     plt.plot(xn, b100, label="p,100")
  68.     plt.ylim(-1,1)
  69.     plt.legend()
  70.    
  71.    
  72. test()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement