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
|
static Matrice allouerMatrice (int l, int c)
{
Matrice A = (Matrice)malloc (sizeof *A);
A->n = l;
A->m = c;
A->P = (COMPLEX**)malloc (l * sizeof *A->P);
{
int i;
for (i = 0; i < l; i++)
{
A->P[i] = (COMPLEX *)malloc (c * sizeof *A->P[i]);
}
}
return A;
}
void libererMatrice (Matrice A)
{
if (A != NULL)
{
if (A->P != NULL)
{
int i;
for (i = 0; i < A->n; i++)
{
free (A->P[i]);
}
}
free (A->P);
}
free (A);
}
Matrice Mat_Vandermonde (int Mat_length, P_COMPLEX zm)
{
// D = [zm^n conj(zm)^n] , n=[0;NL-1]'
int i;
COMPLEX zm_puiss;
COMPLEX zm_conj_puiss;
Matrice D;
D=allouerMatrice(NL,2);
for (i = 0; i <= (Mat_length - 1); i++)
{
PuissComplex(&zm_puiss,zm,i);
ConjComplex(&zm_conj_puiss,zm);
PuissComplex(&zm_conj_puiss,&zm_conj_puiss,i);
//SetComplex(&C[i][0],zm_puiss.re,zm_puiss.im);
//SetComplex(&C[i][1],zm_conj_puiss.re,zm_conj_puiss.im);
D->P[i][0] = zm_puiss;
D->P[i][1] = zm_conj_puiss;
}
return D;
libererMatrice(D);
}
Matrice Mat_pseudoinvMat(Matrice A){/*renvoie la matrice pseudoinverse de A*/
Matrice t_A,pseudoinv_A, dot_t_AA, inv_dot_t_AA;
t_A = Mat_transpose(A);
dot_t_AA = Mat_dot(t_A,A);
inv_dot_t_AA = Mat_invMat(dot_t_AA);
pseudoinv_A=Mat_dot(inv_dot_t_AA,t_A);
return pseudoinv_A;
libererMatrice(t_A);
libererMatrice(dot_t_AA);
libererMatrice(inv_dot_t_AA);
libererMatrice(pseudoinv_A);
} |
Partager