-
Notifications
You must be signed in to change notification settings - Fork 0
/
SP_FP.py
88 lines (60 loc) · 1.9 KB
/
SP_FP.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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#Import modules
import numpy as np
import numpy.polynomial.legendre as leg
import sympy as sp
import matplotlib.pyplot as plt
#Module : mathematical fonctions
import math as ma
#Definitions of solutions points :
def defSolPoints(n):
res=np.zeros(n);
for i in range(n):
res[i]=-ma.cos(((2.0*(i+1)-1)/(2*n))*ma.pi);
return res;
#Definitions of flux points :
def defFluxPoints(n):
res=np.zeros(n);
res[0]=-1.0;
res[-1]=1.0;
coeff=np.zeros(n-1);
coeff[-1]=1.0;
roots=leg.legroots(coeff);
for i in range(1,n-1):
res[i]=roots[i-1];
return res;
# Definition du terme generique de la matrice [L_k(f_j)](1<=k<=p+1;1<=j<=p+2)
def lagrange(Xs,k,x):
p = np.size(Xs)-1;
Li = 1
for i in range(p+1):
if (i!=k):
Li = Li*(x-Xs[i])/(Xs[k]-Xs[i])
return Li;
# Definition du terme generique de la matrice [T_k(s_j)](1<=j<=p+1)
def lagrangeTiPrime(Xf,k,x):
p = np.size(Xf)-2;
Tiprime=0;
for i in range(p+2):
if (i!=k):
Tiprime = Tiprime + (1/(Xf[k]-Xf[i]))*lagrange(Xf,k,x)/( (x-Xf[i])/(Xf[k]-Xf[i]) );
return Tiprime;
# Creation de la matrice d'extrapolation
def extrapolation(Xs,Xf):
p = np.size(Xs)-1;
E = np.zeros([p+4,3*(p+1)]);
for i in range(p+1):
E[0,i] = lagrange(Xs,i,Xf[p+1]);
for i in range(p+2):
for j in range(p+1):
E[i+1,p+1+j] = lagrange(Xs,j,Xf[i]);
for i in range(p+1):
E[p+3,2*(p+1)+i] = lagrange(Xs,i,Xf[0]);
return E;
# Creation de la matrice de derivation
def derivation(Xs,Xf):
p = np.size(Xs)-1;
D = np.zeros([p+1,p+2]);
for i in range(p+1):
for j in range(p+2):
D[i,j] = lagrangeTiPrime(Xf,j,Xs[i]);
return D;