forked from Alx-AI/TP_GPS
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathalgos.py
More file actions
89 lines (72 loc) · 2.67 KB
/
algos.py
File metadata and controls
89 lines (72 loc) · 2.67 KB
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
89
# -*- coding: utf-8 -*-
"""Les algorithmes
Created in MATLAB by E. Grandchamp in 2000
Adapted to PYTHON by F. Magimel in 2013
Minor modifications by J. Gergaud and D. Ruiz
Institution : INPT - ENSEEIHT
Auteurs: E. Grandchamp, F. Magimel, J. Gergaud et D. Ruiz
Copyright (C) 2013 — Tous droits réservés.
Ce programme est un logiciel libre ; vous pouvez le redistribuer ou le
modifier suivant les termes de la “GNU General Public License” telle que
publiée par la Free Software Foundation : soit la version 3 de cette
licence, soit (à votre gré) toute version ultérieure.
Ce programme est distribué dans l’espoir qu’il vous sera utile, mais SANS
AUCUNE GARANTIE : sans même la garantie implicite de COMMERCIALISABILITÉ
ni d’ADÉQUATION À UN OBJECTIF PARTICULIER. Consultez la Licence Générale
Publique GNU pour plus de détails.
Vous devriez avoir reçu une copie de la Licence Générale Publique GNU avec
ce programme ; si ce n’est pas le cas, consultez :
<http://www.gnu.org/licenses/>.
"""
from numpy import linalg as la
import numpy as np
## MdcNE
def MdcNE(A, b):
"""
Résolution du problème des moindres carrés linéaire :
Min_{alpha} || b - A*alpha ||^2
par factorisation de Cholesky du système des équations normales.
Parameters
----------
A : np.array ou np.matrix
b : np.array ou np.matrix
Returns
-------
alpha : np.array (dans tous les cas)
solution du problème des moindres carrés linéaire
"""
S = np.matrix(A).T * np.matrix(A)
# Vérification au préalable du conditionnement du système et de la stabilité
# numérique de la résolution qui va suivre
c = la.cond(S)
if c > 1e16:
print('Attention : le conditionnement de la matrice des équations')
print(' normales est très grand ---> %0.5g' % c)
# Factorisation suivi de la résolution
L = la.cholesky(S) # matrice triangulaire inférieure
m = b.size
bvect = np.matrix( b.reshape(m,1) )
y = A.T * bvect
z = la.solve(L, y)
alpha = np.array( la.solve(L.T, z) )
return alpha
## normrnd
def normrnd(mu, sigma, m, n):
"""
Matrice de valeurs pseudo-aléatoires à distribution normale N(mu, sigma^2)
Parameters
----------
mu : int
moyenne
sigma : int
écart-type
m : int
nombre de lignes
n : int
nombre de colonnes
"""
#np.random.seed(0)
return sigma * np.random.randn(m, n) + mu
#Alternative avec le module STAT de SCIPY
#import scipy.stats as stats
#return stats.norm.rvs(mu, sigma, (m, n))