Projet

Général

Profil

« Précédent | Suivant » 

Révision 469

Ajouté par Lea DUVIVIER il y a presque 3 ans

Fin du TP filtre de Kalman , courbes correctes et commentaires

Voir les différences:

branch/duvivier_lea/sp4a3/sp4a3_kalman.c
#include "sp4a3_kalman_extra.h"
void Add_Mat_Mat(int na,int ma,double A[na][ma],int nb,int mb,double B[nb][mb], double R[na][ma]){
void Add_Mat_Mat(int na,int ma,double A[na][ma],int nb,int mb,double B[nb][mb], double R[na][ma]){ /*Fonction qui permet de faire l'addition de deux matrices*/
int i,j;
for(i=0;i<na;i++)
{
......
}
}
void Inverse_Mat_22(int n,int m,double A[n][m],double B[n][m]){
void Inverse_Mat_22(int n,int m,double A[n][m],double B[n][m]){ /*Fonction qui permet d'inverser une matrice 2x2*/
float det;
det=(1/(A[0][0]*A[1][1]-A[1][0]*A[0][1]));
B[0][0]=A[1][1]*det;
......
}
void Transpose_Mat(int n,int m,double A[n][m],double R[m][n]){
void Transpose_Mat(int n,int m,double A[n][m],double R[m][n]){ /*Fonction qui permet de faire la transposee d'une matrice*/
int i,j;
for (i=0;i<n;i++)
for (j=0;j<m;j++)
R[j][i]=A[i][j];
}
void Sub_Mat_Mat(int na,int ma,double A[na][ma],int nb,int mb,double B[nb][mb], double R[na][ma]){
void Sub_Mat_Mat(int na,int ma,double A[na][ma],int nb,int mb,double B[nb][mb], double R[na][ma]){ /*Fonction qui permet de faire la soustraction de deux matrices*/
int i,j;
nb=na;
mb=ma;
......
}
}
void Mul_Mat_Mat(int na,int ma,double A[na][ma], int nb,int mb,double B[nb][mb], double R[na][mb]){
void Mul_Mat_Mat(int na,int ma,double A[na][ma], int nb,int mb,double B[nb][mb], double R[na][mb]){ /*Fonction qui permet de faire la multiplication de deux matrices*/
int i,j,k,a,b;
for(a=0;a<na;a++)
{
......
double FT[4][4];
Transpose_Mat(4,4,F,FT);
double X1[4][1];
double P1[4][4]; /*Déclaration des différents tampons*/
double P1[4][4]; /*Déclaration des différents tampons qui servent dans le decoupage des operations*/
double tampon1[4][4];
double tampon2[4][4];
double tampon3[4][2];
......
Mul_Mat_Mat(4,2,tampon3,2,2,tampon7,K);
Mul_Mat_Mat(2,4,H,4,1,X1,tampon8);
obser[0][0]=xobs;
obser[1][0]=yobs; /*On met ici obser car les valeurs changent en fonction des iterations*/
obser[1][0]=yobs; /*On met ici obser car les valeurs changent en fonction des iterations et on se sert ensuite de la matrice obser donc besoin d'avoir les valeurs à jour*/
Sub_Mat_Mat(2,1,obser,2,1,tampon8,delta);
Mul_Mat_Mat(4,2,K,2,1,delta,tampon9);
Add_Mat_Mat(4,1,X1,4,1,tampon9,X2);
......
Mul_Mat_Mat(4,4,tampon10,4,4,P1,tampon11);
Sub_Mat_Mat(4,4,P1,4,4,tampon11,P2);
// X = F*X
Plot_Mat(X," X(k+1|k) = ");
Plot_Mat(X," X(k+1|k) = "); /*Affichage des courbes*/
//P = F*P*F'+Q;
Plot_Mat(P,"P(k+1|k) = F.P(k|k).FT + Q = ");

Formats disponibles : Unified diff