Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

Répondre

Veuillez composer votre message et l'envoyer
Nom (obligatoire)

E-mail (obligatoire)

Message (obligatoire)

Programme anti-spam : Afin de lutter contre le spam, nous vous demandons de bien vouloir répondre à la question suivante. Après inscription sur le site, vous n'aurez plus à répondre à ces questions.

Quel est le résultat de l'opération suivante (donner le résultat en chiffres)?
trois plus quatre-vingt trois
Système anti-bot

Faites glisser le curseur de gauche à droite pour activer le bouton de confirmation.

Attention : Vous devez activer Javascript dans votre navigateur pour utiliser le système anti-bot.

Retour

Résumé de la discussion (messages les plus récents en premier)

yoshi
14-05-2013 18:02:33

Salut,


Oui, j'ai mis la dernière 5.4.1...
Je vais maintenant examiner de plus près le module mathématique de Python, numpy...

@+

MathRack
14-05-2013 14:50:52
yoshi a écrit :

Cela dit, une fois lancé le programme, une fois que la main m'est rendue, alors si je tape gsort(sol) dans la console, alors effectivement les solutions s'affichent... Ce qui m'amène à une question, pourquoi ?

D'après la doc scilab sur la commande exec, le paramètre -1 supprime l'affichage de toutes les lignes qui ne se terminent pas par ";" donc c'est normal de devoir mettre un disp() pour forcer l'affichage.

J'ai une vieille version de scilab (5.2.2) donc ça explique les différences : il n'y a pas encore scinotes dans cette version. J'imagine que tu as une version moins obsolète!

yoshi
14-05-2013 14:21:54

RE,


Sinon, un copier/coller du script directement dans scilab fonctionne.

Non. Tu crois que j'ai fait quoi ?

Cela dit, une fois lancé le programme, une fois que la main m'est rendue, alors si je tape gsort(sol) dans la console, alors effectivement les solutions s'affichent...
Ce qui m'amène à une question, pourquoi ?

Je force l"affichage en modifiant la dernière ligne en disp(gsort(sol)), mais au prix d'avertissements ;

-->exec('C:\Program Files\scilab-5.4.1\solveur points fixes_mathrack.sce', -1)
Attention : Redéfinition de la fonction : f                       . Utilisez funcprot(0) pour ne pas afficher ce message.

Attention : Redéfinition de la fonction : g                       . Utilisez funcprot(0) pour ne pas afficher ce message.

Attention : Redéfinition de la fonction : g                       . Utilisez funcprot(0) pour ne pas afficher ce message.


    9.3713988 
    6.3618598 
    2.9725855 
    0.7408410 
    0.         
  - 0.7408410 
  - 2.9725855 
  - 6.3618598 
  - 9.3713988

Quant à remplacer -1 par 0 : je ne suis pas responsable de ce -1, c'est le bouton de lancement de Scinotes le coupable... ^_^

@+

MathRack
14-05-2013 13:54:16

Salut,

En principe la dernière ligne affiche la solution :

-->      gsort(sol)
 ans  =
 
    9.3713988  
    6.3618598  
    2.9725855  
    0.7408410  
    0.        
  - 0.7408410  
  - 2.9725855  
  - 6.3618598  
  - 9.3713988
 

Je pense que si tu remplaces le -1 dans exec('...',-1) par 0 la solution va s'afficher. Sinon, un copier/coller du script directement dans scilab fonctionne.

La fonction fsolve retourne un zéro de la fonction, pas forcément le plus proche. Si on regarde la courbe f(x), on voit que x=5 n'est pas loin d'un point où la dérivée est nulle. Donc si on prolonge la tangente à la courbe en x=5, ça coupe l'axe des abscisses loin de x=5 et proche de x=0. Ça pourrait expliquer qu'on ne trouve pas le zéro le plus proche...

Comme c'est un logiciel open-source, on pourrait essayer de déterrer le code de la fonction fsolve pour voir ce qui se passe en détail mais ça dépasse un peu mes compétences! (et c'est probablement du C ou un monstre qui s'en approche)

Cordialement,
MathRack

yoshi
14-05-2013 11:01:52

Salut,

Puisque tu as l'air de maîtriser Scilab, peux-tu m'expliquer pourquoi

-->deff('y=f(x)','y=2*x^2.*sin(x)-x');x0=fsolve(5,f)

me renvoie  -0.71408410  et non 6,36... la valeur la plus proche ?

Et tant qu'à "reculer", pourquoi -0.71... et non 2.97... ?

@+

[EDIT]
Ton prog ne m'affiche rien sinon ce message :

Initialisation :
  Chargement de l'environnement de travail

-->exec('C:\Program Files\scilab-5.4.1\solveur points fixes_mathrack.sce', -1)
Attention : Redéfinition de la fonction : g                       . Utilisez funcprot(0) pour ne pas afficher ce message.


-->

MathRack
14-05-2013 09:30:57

Bonjour,

J'espère que l'oral c'est bien passé...

Ci-dessous un petit script qui cherche les points fixes sur l'intervalle [-10,10]. Ça ne fonctionne que si les points fixes sont séparés de delta :

xmin=-10; step=0.5; xmax=11; delta=0.2;

x0=xmin;
sol=[];

function[y]=f(x)
  y=2*x.^2.*sin(x)-x
endfunction

function[y]=g(x)
  y=abs(f(x));
endfunction

while x0<xmax

  [x,v,info]=fsolve(x0,g);

  if (info==1) then

    sol=[sol;x];

    function[y]=g(x)
      tmp=zeros(x);
      for j=1:size(sol,1)
      for i=1:size(x,1)
        tmp(i)=tmp(i)-min(0,(x(i)-sol(j)-delta).*(x(i)-sol(j)+delta) );
      end
      end
      y=abs(f(x))+tmp;
    endfunction

  end

  x0=x0+step;

end

gsort(sol)

Ismail
14-05-2013 08:24:57

Merci beaucoup pour ton aide Yoshi! Je passe à l'oral dans 35 minutes! Croise les doigts pour moi!

yoshi
13-05-2013 09:10:56

Salut,

Comportement bizarre de fsolve...
Si j'essaie avec x=5, logiquement, il devrait me retourner 6.36, valeur la plus proche...
Et non, il me renvoie la première valeur négative -0.71408410 !

@+

yoshi
12-05-2013 11:40:28

Bonjour,

D'abord, la fonction f n'est pas périodique non plus, erreur de ma part.

Bon, je t'avais bien dit que j'allais m'obstiner...


scilab.org/product/dic-mat-sci/M2SCI_doc.htm">function[y]=f(x);
    y=2*x.^2.*sin(x)-x;
scilab.org/product/dic-mat-sci/M2SCI_doc.htm">endfunction

M=[0,0.7,3.5,6.5,9.5]
scilab.org/product/dic-mat-sci/M2SCI_doc.htm">for i=1:5
    x=M(i)
    disp(fsolve(x,f))
scilab.org/product/dic-mat-sci/M2SCI_doc.htm">end

Sortie :

Initialisation :
  Chargement de l'environnement de travail

-->exec('C:\Program Files\scilab-5.4.1\points_fixes.sce', -1)

    0. 

    0.7408410 

    2.9725855 

    6.3618598 

    9.3713988

J'avais d'abord inclus fsolve dans la fonction, mais après demande d'exécution, mon écran se remplissait de chiffres à toute allure et dans la s suivante ... Pfuiittt... plus de scilab !
J'ai mis 2 h à comprendre : chuis pas bien doué, hein...
La raison était pourtant "évidente" :
fsolve fait appel à la fonction f, qui elle fait appel à fsolve qui fait appel à f qui elle...
Récursivité sans condition de sortie --> boucle infinie.
Mais la récursivité charge la "pile" et normalement, on devrait tomber sur un message d'erreur genre "stack overflow"...
Mais là, le programme disparaissait complètement...

A partir du moment, où j'ai eu compris ce qui se passait, tout est allé très vite.

@+

Ismail
11-05-2013 22:05:15

Merci beaucoup pour ton aide qui m'a vraiment été précieuse en tout cas!

Bonne soirée et à bientôt!

yoshi
11-05-2013 20:59:26

Re,

La fonction est impaire pardon...

Il te donne 0,7 alors que c'est 0 et 2,97

Absolument pas (mais on peut partir d'un réel !)
La preuve  :

-->deff('y=f(x)','y=2*x^2.*sin(x)-x');x0=fsolve(0.5,f)
x0  =

    0.7408410

De plus, voilà un gros plan de mon grapheur :
130511095540213432.png

Je te rappelle que là je cherche les solutions de f(x)=x donc de [tex]f(x)-x=0[/tex]
Les points fixes sont aux alentours de -9.4, -6.4,  -3, -0.7, 0 (valeur exacte), 0.7, 3, 6.4, 9.4

Convaincu ?

@+

Bon, j'arrête ce ce soir : je sature !

@+

Ismail
11-05-2013 20:33:54

Il te donne 0,7 alors que c'est 0 et 2,97 alors que le résultat devrait être 2,77 c'est pas une énorme différence mais tu penses pas qu'il est possible d'utiliser des réels au lieu des entiers?

yoshi
11-05-2013 20:29:35

RE,

En console, exemple :

-->deff('y=f(x)','y=2*x^2.*sin(x)-x');x0=fsolve(1,f)

x0  =

    0.7408410

-->deff('y=f(x)','y=2*x^2.*sin(x)-x');x0=fsolve(3,f)
x0  =

    2.9725855

je regarde pour boucler.

@+

Ismail
11-05-2013 20:24:18

Merci encore pour ton aide!

yoshi
11-05-2013 20:20:58

Salut,

Bon je vais contourner la difficulté...
J'ai l'habitude de faire le tour de la montagne si je ne peux pas l'escalader !
Donc, tu cherches à avoir les x tels que f(x)=x, alors je vais donc rechercher les x tels que f(x)-x=0.
Il suffit de faire la même chose avec y=2*x^2.sin(x)-x...
Je vais chercher à boucler sur les valeurs pour éviter d'avoir à retaper le tout 5 fois (sur [tex][-\pi\;;\;+\pi][/tex]...
En fait f(x)-x est paire et périodique ... On peut donc donc se limiter.

@+

Pied de page des forums