Programmation du calcul de la solution numérique de l équation de WINTER.



Documents pareils
Cours Informatique Master STEP

MATLAB : COMMANDES DE BASE. Note : lorsqu applicable, l équivalent en langage C est indiqué entre les délimiteurs /* */.

Calcul Formel et Numérique, Partie I

Introduction à MATLAB R

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

Plan du cours Cours théoriques. 29 septembre 2014

Dérivation : Résumé de cours et méthodes

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Chap III : Les tableaux

Initiation à l algorithmique

MÉTHODES NUMERIQUES. Cours. Licence de Physique Année Universitaire : Licence Chimie, parcours Physique. Semestre S3

Probabilités sur un univers fini

Séance 0 : Linux + Octave : le compromis idéal

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

Exercice du cours Gestion Financière à Court Terme : «Analyse d un reverse convertible»

1. Structure d'un programme FORTRAN 95

Projet Matlab/Octave : segmentation d'un ballon de couleur dans une image couleur et insertion d'un logo

Application 1- VBA : Test de comportements d'investissements

Baccalauréat S Antilles-Guyane 11 septembre 2014 Corrigé

Calcul matriciel. Définition 1 Une matrice de format (m,n) est un tableau rectangulaire de mn éléments, rangés en m lignes et n colonnes.

Exo7. Limites de fonctions. 1 Théorie. 2 Calculs

SINE QUA NON. Découverte et Prise en main du logiciel Utilisation de bases

STAGE IREM 0- Premiers pas en Python

URECA Initiation Matlab 2 Laurent Ott. Initiation Matlab 2

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Corrigé des TD 1 à 5

Baccalauréat ES/L Amérique du Sud 21 novembre 2013

Système ASC unitaire triphasé. PowerScale kva Maximisez votre disponibilité avec PowerScale

Logiciel de Base. I. Représentation des nombres

Première partie. Préliminaires : noyaux itérés. MPSI B 6 juin 2015

Calcul Formel et Numérique, Partie I

Initiation à la programmation en Python

Java Licence Professionnelle CISII,

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile


La boucle for La boucle while L utilisation du if else. while (condition) { instruction(s) }

CHOIX OPTIMAL DU CONSOMMATEUR. A - Propriétés et détermination du choix optimal

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

Varset Direct. Batteries fixes de condensateurs basse tension Coffrets et armoires. Notice d utilisation. Armoire A2

Structures algébriques

Cours 7 : Utilisation de modules sous python

NOTATIONS PRÉLIMINAIRES

Relais statiques SOLITRON MIDI, Commutation analogique, Multi Fonctions RJ1P

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

Suites numériques 4. 1 Autres recettes pour calculer les limites

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Variations du modèle de base

SOFI Gestion+ Version 5.4. Echanges de données informatiques Spicers Sofi gestion+ Groupements. SOFI Informatique. Actualisé le

Limites finies en un point

Ouverture d'un point de vente L étude de la zone de chalandise.

Comparaison de fonctions Développements limités. Chapitre 10

Gnuplot. Chapitre Lancer Gnuplot. 3.2 Options des graphes

De même, le périmètre P d un cercle de rayon 1 vaut P = 2π (par définition de π). Mais, on peut démontrer (difficilement!) que

Comment se servir de cet ouvrage? Chaque chapitre présente une étape de la méthodologie

SOMMAIRE OPÉRATIONS COURANTES OPÉRATIONS D INVENTAIRE

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Probabilités sur un univers fini

Excel Avancé. Plan. Outils de résolution. Interactivité dans les feuilles. Outils de simulation. La valeur cible Le solveur

1- Gaz-mm British standrad to mm. DIAMÈTRE EXTÉRIEUR FILETÉ mm. DIAMÈTRE INTÉRIEUR TARAUDÉ mm

Chapitre 11. Séries de Fourier. Nous supposons connues les formules donnant les coefficients de Fourier d une fonction 2 - périodique :

Comité conseil en matière de prévention et sécurité des personnes et des biens Octobre 2013

CRM. Registre d équilibrage et de mesure du débit, classe d étanchéité 0 ou 4.

L ANALYSE EN COMPOSANTES PRINCIPALES (A.C.P.) Pierre-Louis GONZALEZ

COURS ALGORITHMIE. Mathématiques. Le monde merveilleux des algorithmes!! Croyez-moi, vous allez les adorer. Julien Bordas T.S 3

V- Manipulations de nombres en binaire

Python - introduction à la programmation et calcul scientifique

Chapitre 3 : INFERENCE

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Introduction à MATLAB

Organigramme / Algorigramme Dossier élève 1 SI

L art de surveiller la température

SERVEUR DE SAUVEGARDE POUR BCDI3. par. G.Haberer, A.Peuch, P.Saadé

CESAB P200 1,4-2,5 t. Transpalettes accompagnant. Spécifications techniques. another way

Manuel d utilisation Enregistreur autonome de poche. Version 1.1 TRO-TR-BADL100C-03-F

DÉRIVÉES. I Nombre dérivé - Tangente. Exercice 01 (voir réponses et correction) ( voir animation )

1 Introduction C+ + Algorithm e. languag. Algorigramm. machine binaire. 1-1 Chaîne de développement. Séance n 4

Problème 1 : applications du plan affine

Studio. HERITIER Emmanuelle PERSYN Elodie. SCHMUTZ Amandine SCHWEITZER Guillaume

Précision d un résultat et calculs d incertitudes

Une introduction aux codes correcteurs quantiques

alg - Classes, instances, objets [oo] Exercices résolus

Tutoriel : Utilisation du serveur de calcul à distance de PSE

C++ - Classes, instances, objets [oo] Exercices résolus

H E L I O S - S O M O P H O N E V

APS 2. Système de poudrage Automatique

Initiation à la programmation OEF pour Wims (exercices).

Algorithmes de recherche

Programme Compte bancaire (code)

Calcul de la valeur d un bâtiment

TP 1 Introduction à Matlab Février 2009

I Stabilité, Commandabilité et Observabilité Introduction Un exemple emprunté à la robotique Le plan Problème...

Exercice : la frontière des portefeuilles optimaux sans actif certain

Baccalauréat L spécialité, Métropole et Réunion, 19 juin 2009 Corrigé.

Autorité cantonale de la transparence et de la protection des données ATPrD Kantonale Behörde für Öffentlichkeit und Datenschutz ÖDSB

Baccalauréat ES Polynésie (spécialité) 10 septembre 2014 Corrigé

Licence Sciences et Technologies Examen janvier 2010

Programmation C++ (débutant)/instructions for, while et do...while

Chapitre 2 Les ondes progressives périodiques

Transcription:

Programmation du calcul de la solution numérique de l équation de WINTER. Bernard GAGEY [ bernard.gagey@gmail.com ] Annexe 5 Ce programme étant quasi linéaire ne nécessite pas de présentation sous forme d organigramme : on se contentera d une explication linéaire commentée. Vu la facilité offerte pour la manipulation des vecteurs et des matrices, l illustration programmée est écrite en OCTAVE équivalent MATLAB, dont seront décrites au fil du programme quelques particularités pour les lecteurs ignorants ce langage. Ce programme fait appel à un élément de bibliothèque numérique : «inversion de matrice» qui doit être de bonne précision (par exemple: l inversion de matrice d EXCEL s avère insuffisante) ; un test est proposé pour vérifier cette précision. Appel et déclaration Profitant de la possibilité dans OCTAVE d avoir un nombre variable de résultats et de paramètres, une seule procédure permet, selon son utilisation, de : o Faire le calcul en donnant plus ou moins d informations morphologiques sur l individu o Obtenir o Soit uniquement la courbe g la plus probable o Soit aussi les courbes g correspondants aux limites possibles de variations du paramètre k 2 de l équation de Winter L appel se fait sous la forme : [g,coeff,g_min,coeff_min,g_max,coeff_max]=winter(posi,freqech,epai,taille,h_masse,coeff_morpho); Correspondant à la déclaration : function [g,coeff,g_min,coeff_min,g_max,coeff_max]=winter(posi,freqech,epai,taille,h_masse,coeff_morpho); Winter est le nom de la fonction suivi de ses paramètres posi : le vecteurs des positions relevées du centre de pression, exprimées en général- en mm freqech : la fréquence d échantillonnage qui DOIT être un entier epai : épaisseur, exprimé en mètre, entre le plan de la plateforme et le plan des capteurs taille : (facultatif) La taille de l individu exprimé en mètre

H_masse : (facultatif) la hauteur relative de son centre de masse (hauteur relative=hauteur réelle/hauteur individu) coeff_morpho : le coefficient morphologique. Les résultats fournis sont : Remarques : g : vecteur des positions calculées du centre de gravité coeff: (facultative) le coefficient k 2 de l équation de WINTER g_min, coeff_min, g_max, coeff_max: (facultatifs) les positions calculées du centre de gravité et les coefficients k 2 de l équation de WINTER pour les valeurs minimales et maximales du coefficient k 2, en fonction des paramètres d entrée. Les vecteurs sont ici des vecteurs (n, 1 ou 2), c'est-à-dire des vecteurs «n lignes, 1 ou 2 colonnes» 1. Les vecteurs de sorties sont dans la même échelle que le vecteur posi d entrée. 2. Ce programme est identique pour : o Soit des vecteurs posi correspondants aux coordonnées x du centre de pression, renvoyant les coordonnées x du centre de masse o Idem pour les coordonnées y o Soit des vecteurs posi correspondants aux coordonnées x+i*y du centre de pression, renvoyant les coordonnées x+i*y du centre de masse (travail en nombre complexe) o Soit des vecteurs posi (N,2) correspondants aux coordonnées x et y du centre de pression, renvoyant les coordonnées x et y du centre de masse. 3. epai : ce correctif correspond au fait que les capteurs se trouvent en général sous la plateforme ; il correspond en général au minimum à l épaisseur de la plaque constituant la plateforme. Si on met la valeur 0, il sera considéré comme égal à 5mm ± 5mm. Si cette valeur est vraiment nulle, mettre une valeur très faible, 0.00001 par exemple. Déclaration de constantes tcoup=3;% Nombre de secondes retirées au début et à la fin après calcul nx=5;% Choix de matrice restreinte en nombre de secondes gravite=9.8066;% Valeur de l'accélération de la pesanteur h_standard=1.71;% Hauteur standard morpho_stand=0.05084746714575;% Coefficient morphologique standard H_gravite_stand=0.5591;% Rapport hauteur centre de gravité / hauteur totale err_morp_stand=.15;% Marge d'erreur sur le coeff morpho standard

err_morp_param=0.01;% Marge d'erreur sur le coefficient morpho s'il est passé en paramètres err_hgravite_stand=.05;% Marge d'erreur sur la hauteur du centre de gravité standard err_hgravite_param=.01;% Marge d'erreur sur la hauteur du centre de gravité paramètre err_hstandard=.12;% Marge d'erreur sur la hauteur standard err_h=0.006;% Marge d'erreur sur la hauteur en paramètre ep_standard=0.005;% Épaisseur standard err_epstand=0.005;% Marge d'erreur sur l'épaisseur standard err_ep_para=.001;% Marge d'erreur de 1mm sur l'épaisseur poassé en paramètre malleole=0.045;% Hauteur relative de la malléole Toutes ces constantes ont ici des valeurs plus ou moins discutables : tcoup : La méthode de calcul est imprécise aux bornes de l intervalle, on retirera donc à la fin du programme tcoup secondes nx : pour être plus rapide, le programme ne fait pas le calcul sur tout l intervalle mais sur des intervalles 2*nx, décalé de nx. Si nx est supérieur à tcoup, le point central est pratiquement exact, et donc pour l intervalle suivant, les premiers nx points sont pratiquement exacts. Pour cela, il est raisonnable de choisir nx supérieur à tcoup. gravite valeur en m/s 2 de la force de gravité. Peut varier selon le lieu géographique Pour les valeurs morphologiques qui suivent (hauteur, hauteur du centre de masse, coefficient morphologique), il existe 3 constantes La valeur dite standard si ce coefficient n est pas passé en paramètre L estimation de l erreur potentielle si on prend ce coefficient standard L estimation de l erreur potentielle si le coefficient est passé en paramètre. De même l épaisseur standard de la plateforme est donnée si ce paramètre n est pas donné, avec une erreur résiduelle s il est donné malléole : hauteur relative de l axe du pendule simple, situé au niveau de la malléole Calcul du coefficient k 2 La première partie consiste à récupérer les coefficients, selon qu ils ont été, ou non, passés en paramètres, et chacun avec une indication d erreur potentielle. (Remarque sur OCTAVE : la fonction nargin, pour n_arguments_in, donne le nombre d arguments d entrée ; de même pour nargout avec le nombre de résultats attendus) % Cas de epai obligatoire, mais égal à 0 si non mesuré if epai==0 ; ep=ep_standard;er_ep=err_epstand; ;

ep=epai;er_ep=err_ep_para; if nargin<6 ;% Pas de coefficient morpho_stand morph=morpho_stand;err_morph=err_morp_stand; morph=coeff_morpho;err_morph=err_morp_param; if nargin<5;% Pas de hauteur du centre de gravité hgrav=h_gravite_stand;errhgrav=err_hgravite_stand; hgrav=hauteur_g;errhgrav=err_hgravite_param; if nargin<4;% Pas de hauteur haut=h_standard;err_haut=err_hstandard; haut=taille;err_haut=err_h; La deuxième partie consiste à appliquer la formule de calcul : k! = T a HG + 0.051 HG 0.05 + epai a Et ceci trois fois, avec les valeurs nominales, et en faisant varier celles-ci pour avoir les valeurs minimales et maximales en fonction des marges d erreur. coeff=(ep+haut*(hgrav+(morph/(hgrav- malleole))))/gravite; coeff_min= (ep-er_ep+haut*(1-err_haut)*(hgrav*(1-err_hgrav) + (morph*(1-err_morph) /(hgrav*(1+err_hgrav)- malleole))))/gravite; coeff_max= (ep+er_ep+haut*(1+err_haut)*(hgrav*(1+err_hgrav)+ (morph*(1+err_morph) /(hgrav*(1-err_hgrav)- malleole))))/gravite; Calcul de la matrice de base Comme dit plus haut, à propos de la constante nx, on fait le calcul dans un intervalle 2*nx où on exprime la matrice M telle que P=M*G, dont on calculera l inverse permettant d obtenir G=(M -1 )*P. La matrice M est une matrice dont seuls ne sont pas nuls les éléments De la diagonale, tous égaux à 1+2*(1/k2.5 )*(frequence 2 ) De la sous-diagonale et de la sus-diagonale tous égaux à: 1/k2.5 )*(frequence 2 ) (Remarques sur OCTAVE : eye(n,n) est la matrice unité de dimension n,n, inv(matrice) donne l inverse de la matrice) Nbm=length(posi); %nombre de points de mesures = longueur du vecteur paramètre Posi Nbma=nx*2*freqech; % dimmension de la matrice %ne pas découper si l'intervalle de mesure est proche de l'intervalle de découpe if Nbm<Nbma+2*freqech; Nbma=Nbm;

% calcul des coefficients de la matrice co1=-(freqech^2)*coeff; co2=-2*co1+1; %creation de la matrice avec sa bonne diagonale ma=co2*eye(nbma,nbma); %remplissage des sous et sur-diagonale for k=2:1:nbma-1; ma(k,k-1)=co1;ma(k,k+1)=co1; endfor ma(1,2)=co1;ma(nbma,nbma-1)=co1; na=inv(ma); (Note : il est judicieux, à ce niveau de faire un test sur A=maximum(valeur absolue(ma*na-i)) où I est la matrice identité ; Théoriquement on devrait avoir A=0; Une bonne précision devrait donner A inférieur à 10-10 : Pour OCTAVE, on trouve A de l ordre de 10-14 ) La solution qu on trouve par G=(M -1 )*P est celle dont le point précédent et suivant de l intervalle serait 0. Pour trouver la solution dont le point précédent serait a, il faut rajouter un vecteur a*correc que l on calcule au préalable : (Note OCTAVE : zeros(n,p) rend une matrice (n,p) avec tous les éléments nuls) correc=zeros(nbma,1); kacc=(1/coeffaccel)^.5; for jj=1:1:nbma; correc(jj)=e^(-kacc*jj/freqech); endfor; Dernière préparation: centrer la courbe P sur sa moyenne : (Remarques Octave : mean(matrice) renvoie la moyenne des coefficients de la matrice additionner un nombre à une matrice additionne ce nombre à tous les éléments de la matrice) meanposi=mean(posi); posi=posi-meanposi; Calcul de la courbe G Le calcul de G se fait donc par une succession de calculs partiels Sur un intervalle de longueur nbma, En décalant cet intervalle de nx*freqch ( en général égal à nbma/2) En considérant que le point G juste avant l intervalle vient du calcul précédent, et en faisant la correction en conséquence

Bien sûr cette boucle pose des problèmes aux limites Au départ le point précédent à la valeur 0 (c'est-à-dire la moyenne de P) A la fin, le dernier intervalle est recalé sur la fin de l intervalle de mesure de P %initialisation g=zeros(nbm,1); prec=0;deb1=1; %boucle générale while deb1+nbma-1<=nbm g(deb1:deb1+nbma-1)=na*posi(deb1:deb1+nbma-1)+prec*correc; prec=g(deb1+nx*freqech-1); deb1=deb1+nx*freqech; endwhile %traitement dernier intervalle if Nbm==Nbma ;prec=0;;prec=g(nbm-nbma); g(nbm-nbma+1:nbm)=na*posi(nbm-nbma+1:nbm)+prec*correc; Et on termine en revenant sur le centrage fait sur la moyenne de P, et en retirant aux extrémités les tcoup secondes : g=meanposi+g(tcoup*freqech+1:nbm- tcoup*freqech); En fait on doit, en fonction des sorties demandées, calculer la courbe G aussi pour coeff_min et coeff_max ; C est pourquoi les parts 4 et 5 sont mis en sous programme. function[g,coeff,g_min,coeff_min,g_max,coeff_max]=winter(posi,freqech,epai,taille,hauteur_g, coeff_morpho); %Programme de recherche de la courbe G Optimisé en vitesse!!! % parametres d'entrée: % posi la courbe P en vecteur (n,1 ou 2) % freqch la frequence d'echantillonage (de la courbe totale) =nombre d'échantillons par seconde % taille taille de l'individu (facultatif) % hauteur_g Hauteur relative du centre de masse (facultatif) % coeff_morpho Le coefficient morphologique (facultatif) %Valeurs retournées % g la courbe g en vecteur (n,1 ou 2) % coeff le coefficient de l'équation de Winter correspondant % g_min,coeff_min,g_max,coeff_max les mêmes résultat pour les coefficients minimal et maximal de Winter en fonction des paramêtres d'entrée % constantes tcoup=3;%nombre de secondes retirées au début et à la fin après calcul nx=5;% choix de matrice restreinte en nombre de secondes gravite=9.8066;% valeur de l'accélération de la pesanteur h_standard=1.71;%hauteur standard morpho_stand=0.05084746714575;% coefficient morphologique standard H_gravite_stand=0.5591;% rapport hauteur centre de gravité / hauteur totale err_morp_stand=.15;%marge d'erreur sur le coeff morpho standard err_morp_param=0.01;%marge d'erreur sur le coefficient morpho s'il est passé en paramêtrese err_hgravite_stand=.05;% Marge d'erreur sur la hauteur deu centre de gravité standard

err_hgravite_param=.01;% Marge d'erreur sur la hauteur deu centre de gravité paramètre err_hstandard=.12;%marge d'erreur sur la hauteur standard err_h=0.006;% marge d'erreur sur la hauteur en paramètre ep_standard=0.005;%epaisseur standard err_epstand=0.005;% marge d'erreur sur l'épaisseur standard err_ep_para=.001;%marge d'erreur de 1mm sur l'épaisseur poassé en paramètre malleole=0.045;% Hauteur relative de la malléole % Calcul du coefficient k2 % cas de ep obligatoire, mais égal à 0 si non mesuré if epai==0 ; ep=ep_standard;er_ep=err_epstand; ; ep=epai;er_ep=err_ep_para; if nargin<6 ;% pas de coefficient morpho_stand morph=morpho_stand;err_morph=err_morp_stand; morph=coeff_morpho;err_morph=err_morp_param; if nargin<5;%pas de hauteur du centre de gravité hgrav=h_gravite_stand;err_hgrav=err_hgravite_stand; hgrav=hauteur_g;err_hgrav=err_hgravite_param; if nargin<4;%pas de hauteur haut=h_standard;err_haut=err_hstandard; haut=taille;err_haut=err_h; coeff=(ep+haut*(hgrav+(morph/(hgrav- malleole))))/gravite; coeff_min= (ep-er_ep+haut*(1-err_haut)*(hgrav*(1-err_hgrav)+(morph*(1-err_morph)/(hgrav*(1+err_hgrav)- malleole))))/gravite; coeff_max= (ep+er_ep+haut*(1+err_haut)*(hgrav*(1+err_hgrav)+(morph*(1+err_morph)/(hgrav*(1- err_hgrav)- malleole))))/gravite; [g]=sous_winkler(posi,freqech,coeff,nx,tcoup); if nargout>4 ; [g_max]=sous_winkler(posi,freqech,coeff_max,nx,tcoup); if nargout>2 ; [g_min]=sous_winkler(posi,freqech,coeff_min,nx,tcoup); endfunction function [g]=sous_winkler(posi,freqech,coeff,nx,tcoup) % Calcul préliminaires Nbm=length(posi);%nombre de points de mesures = longueur du vecteur paramètre Posi Nbma=nx*2*freqech;% dimmension de la matrice if Nbm<Nbma+2*freqech; %ne pas découper si l'intervalle de mesure est proche de l'intervalle de découpe Nbma=Nbm;

%calcul des coefficients de la matrice co1=-(freqech^2)*coeff; co2=-2*co1+1; %creation de la matrice avec sa bonne diagonale ma=co2*eye(nbma,nbma); %remplissage des sus et sur-diagonale for k=2:1:nbma-1; ma(k,k-1)=co1;ma(k,k+1)=co1; endfor ma(1,2)=co1;ma(nbma,nbma-1)=co1; na=inv(ma); %jjj=max(max(abs(na*ma-eye(nbma))))% test de la précision de calcul correc=zeros(nbma,1); kacc=(1/coeff)^.5; for jj=1:1:nbma; correc(jj)=e^(-kacc*jj/freqech); endfor; %centrer pour que le point (0,0) ne soit pas absurde meanposi=mean(posi); posi=posi-meanposi; % fin des calculs preliminaires %initialisation g=zeros(nbm,1); prec=0;deb1=1; %boucle générale while deb1+nbma-1<=nbm g(deb1:deb1+nbma-1)=na*posi(deb1:deb1+nbma-1)+prec*correc; prec=g(deb1+nx*freqech-1); deb1=deb1+nx*freqech; endwhile %traitement dernier intervalle if Nbm==Nbma ;prec=0;;prec=g(nbm-nbma); g(nbm-nbma+1:nbm)=na*posi(nbm-nbma+1:nbm)+prec*correc; g=meanposi+g(tcoup*freqech+1:nbm-tcoup*freqech); endfunction