La jungle de solutions
Définition d'un bon outils
Récupérer des mesures dans un fichier texte, chercher un algoithme qui calcule les coefficients d'un polynôme d'ordre deux qui colle avec les mesures "au mieux" (régression polynomiale) et afficher une comparaison des mesures avec ce polynôme pour ensuite envoyer le résultat sur la sortie audio demanderait beaucoup d'efforts dans un langage inadapté à ce genre de tache comme le langage ADA !
Mais cela demande juste quelques lignes dans d'autres langages (prenont ici le Matlab/Octave):
Récupérons les datas qui sont contenues dans un fichier texte mesures.txt :
Regardons ce que dit la doc de Matlab/octave sur les polynomes (une courte recherche sur internet donne beaucoup de solutions pour matlab et octave ! On trouve la fonction polyfit):
utilisons cette fonction polyfit avec des polynomes d'ordres différents et affichons
L'inginieur-e à besoin de prototyper des solutions : résoudre, caluler, visualiser, appliquer des algorithmes puissants, expérimenter, tester,... ces besoins ont fait évoluer les premiers langages compilés impératifs vers d'autres langages. On pourrait/peut très bien utiliser les langages impératif typés comme ADA, C, fortran à cet effet. Mais les limitations se feront vite sentir :
lisibilité, concision, documentation les langages typés demandent beaucoup de déclarations nécessaires pour réaliser un code sans ambiguité, sans erreurs, et optimal en terme de taille et rapidité d'exécution. Mais toutes ces informations surchargent la lecture du code et ralentisse l'écriture, la compréhension par les autres. De plus il est intéressant de documenter son code et sur sa partie "architecture" mais aussi sur sa partie scientifique qui peut demander des equations etc.
souplesse, réutilisabilité lorsqu'une solution a été calculée, l'ingénieur doit souvent étendre ces résultats à d'autres cas. Il est alors intéressant de ne pas tout réécrire dans chaque cas, par exemple imaginez un programme qui trie des entiers, cela est embêtant si l'on doit tout réécrire juste parcequ'on veut maintenant trier des réels, ou des quaternions, ou des images etc. Un bon langage s'adaptera au changement de types des variables et permettra de regrouper facilement des librairies multiples de manière à pouvoir réutiliser.
richesse de la communauté scientifique de même des outils mathématiques numériques doivent être utilisés : décomposition d'un signal, optimisation d'un critère pour minimiser un coût, algorithmes de tris etc. Il est intéressant de disposer de beaucoup de logiciels prêt à l'utilisation développé par une communauté scientifique utilisant ce langage.
mise au point rapide le fait de vouloir aller vite plutôt que sûrement lors d'un prototypage fait que les erreurs sont fréquentes, d'ailleurs cela est un mauvais réflexe qui se paye souvent cher. Néanmoins le prototypage demande beaucoup d'expérimentations et de modifications ittératives "jusqu'à ce que ça marche". Pour cela les langages doivent fournir un environnement de test "débugeur", des générateurs de tests etc, et un passage à l'exécution rapide.
interfaçage et visualisation les résultats numériques doivent être importés (enregistrement, mesures directe sur carte audio ou oscilloscope etc.) pour être traité et les résultats doivent être visualisés ou renvoyé vers le système (sortie audio, commande d'un GBF etc.). Il faut donc un ensemble de fonctions graphique et d'interfaces qui soit riche.
propriété intellectuelle et passage à la solution industrielle une fois le prototype validé, on parle de preuve de concept. Il faut alors passer à la réalisation voire l'industrialisation du système. A ce moment il faut réfléchir à l'achat de licenses du logiciel et des librairies ou aux conditions d'utilisation des licenses gratuites et/ou libres. De plus le logiciel devra aussi s'exécuter sur autre chose qu'un PC de labo et donc à générer du code adapté, optimisé, à générer les test et vérifications voire certifications à donner pour ce code...
Le calcul symbolique
Quelques bons outils
Les candidats du moment sont :
Logiciel | License | Install Native | Utilisation en ligne | Utilisation en Notebook Jupyter | Calcul Symbolique |
---|---|---|---|---|---|
Matlab | Super payant | IDE Windows/linux/Mac | Non | Non | Oui avec symbolic toolbox (500€) |
Octave | gratuit, libre | IDE Windows/linux/Mac | install de octave_kernel https://octave-online.net | https://github.com/Calysto/octave_kernel#installation | avec symbolic package (Simpy) |
Python | gratuit, libre | IDE Windows/linux/Mac | https://repl.it/languages/python3 par exemple | natif avec ypython kernel | oui (Simpy) |