Optimisation sous Scilab
Résolu
leprobdelaprog
-
matlab stress Messages postés 5 Date d'inscription Statut Membre Dernière intervention -
matlab stress Messages postés 5 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Optimisation sous Scilab
- Optimisation pc - Accueil - Utilitaires
- Scilab - Télécharger - Édition & Programmation
- Optimisation découpe panneau gratuit - Télécharger - Outils professionnels
- Optimisation windows 10 - Guide
- Clicker paladium optimisation - Forum Minecraft
11 réponses
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 R².
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)) où 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.
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 R².
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)) où 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.
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é...
"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é...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
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
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
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
Pour définir une grille sur [0,100] x [0,100] par exemple, avec un pas de discrétisation de 0.5, tu fais
Pour définir la fonction f : (x,y) → x²+y²-4xy par exemple, tu fais alors
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 ?
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
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
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.
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.
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.
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.
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...
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