Scilab Home page | Wiki | Bug tracker | Forge | Mailing list archives | ATOMS | File exchange
Please login or create an account
Change language to: English - Português - 日本語 - Русский

Please note that the recommended version of Scilab is 6.0.0. This page might be outdated.
See the recommended documentation of this function

Aide de Scilab >> Xcos > Solveurs > Recherche de racines

Recherche de racines

Cette fonctionnalité trouve des racines de fonctions continues pour les blocks Zero-crossing.

Description

Certains problèmes requièrent la détection de passage de zéro de fonctions continues (par exemple, les systèmes de régulation). Tous les solveurs assurent cette foncionnalité, et est réalisée en suivant le même procédé.

Chaque Zero-crossing Block définit une de ces fonctions, notées g(t).

En général, cette fonctionnalité ne trouve que les racines à multiplicité impaire, correspondant à un changement de signe de g(t). Si une de ces fonctions a une racine à multiplicité impaire (pas de changement de signe), elle ne sera probablement pas détectée. Si une telle racine est désirée, l'utilisateur doit reformuler la fonction pour qu'elle change de signe à l'endroit de la racine.

Le schéma utilisé est de vérifier les traversées de zéro de g(t) sur chaque pas de temps, puis (changement de signe détecté) de zoomer sur cette traversée (ou racine) grâce à une méthode des sécantes modifiée.

Après des vérifications et ajustements corrects, les racines sont recherchées dans [tlo, thi] . On entre dans une boucle pour localiser la racine suivant une tolérance acceptable, donnée par l'arrondi de la machine, le temps actuel et le pas de temps.

On détermine alors quelle fonction racine a le plus de chances de voir sa racine arriver en première en comparant les valeurs de la méthode des sécantes, et on donne une nouvelle valeur tmid et on restreint l'intervalle de recherche à [tlo, tmid] ou [tmid, thi] , suivant dans lequel le changement de signe se produit.

Puisque la tolérance dépend du pas de temps, plus ce dernier est faible, plus la précision sera grande.

Exemples et Analyse du temps de calcul

Exemple simple d'une fonction Sinus traversant zéro plusieurs fois :

// Import du diagramme et réglage du temps final
loadScicos();
loadXcosLibs();
importXcosDiagram("SCI/modules/xcos/demos/Threshold_ZeroCrossing.zcos");

// Lancement du chronomètre, de la simulation et affichage du temps
tic();
try xcos_simulate(scs_m, 4); catch disp(lasterror()); end
t = toc();
disp(t, "Temps pour LSodar :");

Les barres bleues représentent les traversées "positif vers négatif", et les rouges "négatif vers positif".

Dans les scripts suivants, on test le surplus de calcul de la détection de racines avec LSodar :

D'abord, un Sinus traversant zéro toutes les π périodes : Ouverture du script

Temps avec recherche de racine :
 15.021

Temps sans recherche de racine :
 10.573
            

Ensuite, une simple ligne droite traversant zéro une seule fois, au milieu de l'intervalle : Ouverture du script

Temps avec recherche de racine :
 0.114

Temps sans recherche de racine :
 0.09
            

Suivant le nombre de racines, l'aspect de la fonction à l'approche de ces racines, les tolérances, ..., le surplus de temps de calcul va de 25% à 45%.

Report an issue
<< DDaskr Solveurs Comparaisons >>

Scilab Enterprises
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Thu Oct 02 13:54:43 CEST 2014