Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Répondre
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
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 :
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 :
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...
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 :
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.
@+