Calcul sur les variétés avec ALIAS
1 Introduction
Même si ALIAS est principalement orienté vers la résolution des
systèmes de dimension 0 (c'est-à-dire admettant un nombre fini de
solutions) il est toutefois possible d'obtenir des informations sur
les systèmes de dimension supérieur à 0. On peut en effet
calculer une approximation de la variété solution d'un système
sous la forme d'une liste de boîte qui va la décrire. Ici
solution doit s'entendre par toute boîte pour laquelle
-
les inégalités sont strictement satisfaite
- pour les équations on vérifie que soit l'évaluation par
intervalle de l'équation contient bien 0 et que sa largeur est
inférieure à un seuil donné (`ALIAS/fepsilon` dans l'interface
maple) ou que l'évaluation contient bien 0 alors que la largeur des
intervalles de la boîte est inférieure à un seuil
(`ALIAS/epsilon` dans l'interface maple)
Pour obtenir cette approximation de la variété il suffit de placer
le flag `ALIAS/ND` à 1 et de donner dans `ALIAS/ND_file` le nom du
fichier dans lequel sera écrit les boîtes qui constitueront
l'approximation. ALIAS va alors examiner les boîtes et écrira
dans le fichier les boîtes pour lesquelles le système a une
solution. Si pour une boîte la méthode ne permet pas de
déterminer s'il existe une solution, alors elle sera bissectée. La
bissection s'arrêtera toutefois lorsque l'ensemble des intervalles de
la boîte auront une largeur inférieure à un seuil
(`ALIAS/epsilon` dans l'interface maple). On peut donc négliger des
boîtes pour laquelle il existe peut être des solutions du
système. Ceci explique pourquoi on obtient seulement une
approximation de la variété. On peut cependant avoir une
information sur la qualité de l'approximation car on dispose du
volume total des boîtes solution dans `ALIAS/VolumeIn` et du
volume total des boîtes
négligées dans `ALIAS/VolumeNeglected`.
2 Exemple
2.1 Un premier programme
On dispose de 5 équations polynomiales eqi dans les inconnues d3, d4,
r2 et on désire déterminer une approximation de la variété
définie par eqi £ 0 pour i dans [1,5].
Le programme permettant de calculer cette variété s'écrit:
#les equations
eq1:=d3^2-d4^2+r2^2:
eq2:=d4^2*((r2^2+d3^2+1)^2-4*d3^2)*(-d4^2+(r2^2+d3^2))-d3^2*r2^2:
eq3:=-d4*r2^2-d4+d3:
eq4:=(d3-1)^2*(d3^2-d4^2)+d3^2*r2^2:
eq5:=(d3+1)^2*(d3^2-d4^2)+d3^2*r2^2:
#les bornes sur d3,d4,r2
D3:=[0.1,2]:
D4:=[0.1,2]:
R2:=[0.1,2]:
with(ALIAS):
`ALIAS/debug`:=1:
`ALIAS/single_bisection`:=2:
`ALIAS/storage_mode`:=10:
`ALIAS/ND`:=1:
`ALIAS/epsilon`:=0.04:
`ALIAS/ND_file`:="Out":
NUM:=HessianSolve([eq1<=0,eq2<=0,eq3<=0,eq4<=0,eq5<=0],[d3,d4,r2],[D3,D4,R2]);
`ALIAS/VolumeIn`;
`ALIAS/VolumeNeglected`;
On a choisit ici le mode de bissection utilisant la "smear function"
(`ALIAS/single_bisection`:=2:), un mode inverse de stockage des
boîtes crées par la bissection (`ALIAS/storage_mode`:=10:) et de négliger les boîtes dont la
largeur est inférieure à 0.04. Le résultat, c'est-à-dire
l'ensemble des valeurs de d3, d4, r2 telles que les polynômes sont
négatifs, sera écrit dans le fichier "Out"
En utilisant ce programme on obtient un fichier Out contenant
5009 boîtes pour un volume total de .917 avec un volume total de
boîtes négligées de .0878: la qualité de l'approximation
est donc raisonnable avec un ratio de 9.57%.
2.2 Filtrage
On peut améliorer la qualité de l'approximation soit en diminuant
la précision (mais au prix de la création d'un nombre important de
boîtes solution), soit par un effort de filtrage qui va tenter,
pour une boîte donnée, de réduire sa taille en excluant des
composantes qui ne satisferont pas les contraintes.
On peut penser utiliser ici le filtrage 3B. On effectue une version
forte de ce filtrage en rajoutant dans la liste des paramètres ALIAS
les lignes:
`ALIAS/3B`:=2:
`ALIAS/Full3B`:=1:
`ALIAS/Full3B_Change`:=0.0001:
`ALIAS/Max3B`:=100:
`ALIAS/Delta3B`:=0.0001:
Sans modifier la précision on obtient alors 7152 boîtes solution
pour un volume total de 0.922 et un volume négligé de 0.058 pour
un ratio de 6.37 %.
Un autre mode de filtrage possible est d'utiliser la consistance
2B. Un tel filtre sur des inégalités peut être directement
obtenu par:
HullIConsistency([eq1<=0,eq3<=0,eq4<=0,eq5<=0],[d3,d4,r2],"SIMP",0.0001);
qui crée la procédure C++ SIMP.C contenant la procédure de
filtrage de nom SIMP. Il suffit alors de rajouter le nom de
cette procédure comme dernier argument de HessianSolve pour
mettre en oeuvre ce filtrage.
Sans modifier la précision on obtient alors 6692 boîtes solution
pour un volume total de 0.920 et un volume négligé de 0.078 pour
un ratio de 8.487 %.
On peut bien sûr mettre en oeuvre à la fois le filtrage 2B et 3B
en combinant les deux méthodes.
Sans modifier la précision on obtient alors 7221 boîtes solution
pour un volume total de 0. 9226 et un volume négligé de 0.0585 pour
un ratio de 6.34855%.
This document was translated from LATEX by
HEVEA.