Optimisation sous Scilab

Résolu
leprobdelaprog -  
matlab stress Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
je dois résoudre un programme sous contrainte et scilab me semble le plus adapté.Cependant, je n'arrive pas à m en servir...j'ai passé plusieurs jours dessus et je n'avance pas

je veux résoudre:

ac^2+2ac(2-b)+(1-a)^2<0 (1)
-2ba(1-a)+6ca-ac^2-2ca^2+(1-a)^2 (2)

sachant que a est compris entre 0 et 1
b et c sont positif et b>c

En fait je voudrais savoir s'il est possible d avoir des a,b,c qui vérifient ces contraintes.
Je cherche une solution du type : (1) (2) vérifiés pour a>3b+5c... (je cherche le regionnement de ma solution)

je ne vous demande pas spécialement de le résoudre, mais si vous pouviez me donner des pistes ca m aiderai beaucoup...

merci
A voir également:

11 réponses

Sacabouffe Messages postés 9427 Date d'inscription   Statut Membre Dernière intervention   1 835
 
Ah OK, désolé !
Dans ce cas, tu prends juste les deux premières équations de ce que j'ai écrit.
b = c + t avec t > 0
Tu fais ton changement de variables dans les inéquations (1) et (2) et tu cherches une solution dans le premier cadran de .
c > 0
t > 0

Du coup, tu te fixes une borne supérieure assez grande, 1000 par exemple, tu définis une grille sur [0,1000] x [0,1000] et la fonction qui à (c,t) associe (f(c,t),g(c,t))f et g sont les deux membres de gauche de tes inéquations.
Ensuite, avec un find, tu trouves pour quels points de la grille tes inéquations sont vérifiées.
Après, tu peux tracer cet ensemble de points pour en avoir une représentation graphique.
Mais pour trouver un régionnement comme tu le souhaites, ce serait plutôt un logiciel de calcul formel qui te faudrait. Là t'auras sûrement un régionnement, mais pas de formule, juste visuellement, c'est juste une résolution numérique.
1
Sacabouffe Messages postés 9427 Date d'inscription   Statut Membre Dernière intervention   1 835
 
Salut
L'équation (2) est incomplète
À plus
0
leprobdelaprog
 
oups effectivement;

-2ba(1-a)+6ca-ac^2-2ca^2+(1-a)^2>0
0
probdeprog
 
Quand j'ai ecrit
"Je cherche une solution du type : (1) (2) vérifiés pour a>3b+5c... (je cherche le regionnement de ma solution)"

le a>3b+5c était un exemple de solution complétement aléatoire, c'était juste pour dire le type de solution que je cherchais... (en gros pour dire que je ne voulais pas le résoudre par simulation)

Pour avoir une solution de type a = 3b + 5c + u comme tu disais plus haut, il faudrait que j égalise une des equations à 0, et que j extraie a?
Enfin je sais pas si ta réponse précedente a considéré que mon a>3b+5c...était une des contraintes

merci en tout cas de t etre un peu tracassé...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
probdeprog
 
ok merci beaucoup,
en fait mon 1er problème c est surtout de voir si la solution existe, enfin apres si elle existe j aurai d'autre truc à vérifier (c'est pourquoi je souhaitais avoir des bornes)...
mais savoir qu'il y a une solution c est deja un bon point.
bon j'ai pas tout compris ce que tu m a dit mais je vais essayer de le faire cet apres midi
merci beaucoup en tout cas!!!
je te tiens au courant si ca marche
0
probdeprog
 
Bon en fait je suis vraiment debutante sur scilab, j arrive meme pas à definir mes fonctions:
il me semble que cest quelque chose ds ce genre...non?
a=0:1000
deff("y=f(c,t),"y=2c^2+2ac(2-c-t)+(1-a)^2)
si ca te prend pas trop de temps est ce que tu pourrais me montrer...
jai pas envie d abuser non plus, tu m a bien aidé...
merci
0
Sacabouffe Messages postés 9427 Date d'inscription   Statut Membre Dernière intervention   1 835
 
Je parlais de fonctions discrètes en fait, pas de fonctions formelles.
Par exemple, pour f : x → x², sur l'intervalle [0,1] avec un pas de discrétisation de 0.1 ça donnerait
x=(0:0.1:1);
f=x.^2;
Tu fais pareil.
Pour définir une grille sur [0,100] x [0,100] par exemple, avec un pas de discrétisation de 0.5, tu fais
[x y]=meshgrid(0:0.5:100);
Après, la définition de la fonction est simple en Scilab, pour les opérations terme à terme sur les matrices (*,/,^), tu rajoutes un . devant les opérateurs.
Pour définir la fonction f : (x,y) → x²+y²-4xy par exemple, tu fais alors
f = x.^2 + y.^2 - 4*x.*y;
Ça t'aide ?
0
probdeprog
 
Bon je m en sort vraiement pas, pour definir les variables jai fait ca mais apres j arrive pas a definir les fonctions, j ai beau regarder dans les manuel sur scilab sur interent j y comprends rien

Startup execution:
loading initial environment

-->a=(0:0.1:1)
a =
column 1 to 10
! 0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 !
column 11
! 1. !
-->b=(0:0.5:300)
b =
column 1 to 10
! 0. 0.5 1. 1.5 2. 2.5 3. 3.5 4. 4.5 !
column 11 to 20
! 5. 5.5 6. 6.5 7. 7.5 8. 8.5 9. 9.5 !
column 21 to 29
! 10. 10.5 11. 11.5 12. 12.5 13. 13.5 14. !
column 30 to 38
! 14.5 15. 15.5 16. 16.5 17. 17.5 18. 18.5 !
column 39 to 47
! 19. 19.5 20. 20.5 21. 21.5 22. 22.5 23. !

column 48 to 56

apres je definie c de la meme facon que b et j essaie de definir la fonction mais j y arrive pas...

[More (y or n ) ?]
-->
>f=a.*c.^2+2*a.*c.*(2-c.-t)^2
!--error 9999
inconsistent element-wise operation
0
Sacabouffe Messages postés 9427 Date d'inscription   Statut Membre Dernière intervention   1 835
 
OK OK, pas de souci ;-)
Comme ça, à chaud, je commencerais par simplifier le truc avec un changement de variables, parce toutes ces inégalités, ça va être la misère à traiter, on voit pas trop comment c'est emmêlé.
On part de c > 0, celle-là on la garde.
b = c + t avec t > 0
a = 3b + 5c + u avec u > 0, c'est-à-dire a = 8c + 3t + u
Tu remplaces dans les inéquations (1) et (2) et là le triplet (c, t, u) appartient à un tétraèdre
c > 0
t > 0
u > 0
8c + 3t + u < 1

C'est plus clair je trouve.
Dis-moi ce que t'en penses.
Si ça avance toujours pas, j'y réfléchirai un peu plus.
-1
Sacabouffe Messages postés 9427 Date d'inscription   Statut Membre Dernière intervention   1 835
 
OK, tiens moi au courant.
Pour le find sous Scilab, tu tapes help find pour savoir comment t'en servir. Ca pourra t'être utile une autre fois.
Si tu y arrives pas dis-moi, il y en a pour 5 minutes à faire le truc.
-1
Sacabouffe Messages postés 9427 Date d'inscription   Statut Membre Dernière intervention   1 835
 
Dans le message 5, j'avais bien sûr oublié de parler de la variable a. Du coup, c'est une grille 3D qu'il faut prendre.

Par contre, si tu peux utiliser Octave au lieu de Scilab, ça sera peut-être pas plus mal à mon avis. Scilab patauge un peu dans la semoule quand les grilles sont trop grandes. Mais bon, je connais pas trop Scilab, il y a peut-être un truc à faire pour que ça aille mieux...
[a bp c]=meshgrid((0:0.04:1),(0:4:100),(0:0.4:10));
ineq1=a.*c.^2+2*a.*c.*(2-bp-c)+(1-a).^2;
ineq2=2*a.*(bp+c).*(1-a)+a.*c.^2-6*a.*c+2*c.*a.^2-(1-a).^2;
index=find((ineq1<0 & ineq2<0));
a=a(index);b=bp(index)+c(index);c=c(index);
param3d(a,b,c);
h=get("hdl");
ca=get("current_axes");
set(h,'line_mode','off');
set(h,'mark_mode','on');
set(h,'mark_style',10);
set(h,'mark_size_unit','point');
set(h,'mark_size',6);
set(h,'mark_foreground',2);
set(h,'mark_background',-2);
set(ca,'cube_scaling','on');
Bonne soirée
-1
matlab stress Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
tu peux utiliser fmincon sur matlab où il y a un exemple trés simple que tu pourrais le suivre.
0