Definition fonction monte carlo help...

Résolu
agen4710
Messages postés
6
Date d'inscription
lundi 1 mai 2017
Statut
Membre
Dernière intervention
4 mai 2017
- 1 mai 2017 à 11:39
adilbela
Messages postés
20
Date d'inscription
jeudi 1 juin 2017
Statut
Membre
Dernière intervention
7 juin 2017
- 1 juin 2017 à 17:51
bonjour ! tout d'abord je tiens a préciser que je suis débutant ca se remarquera ^^. J'ai un projet à faire en C mais je commence par faire l'algorithme ( le projet : intégrer ( méthode monte carlo ) une fonction polynome de degré inferieur ou egal a 20, les coeff du poolynomes sont donnée par l'utilisateur, l'objectif est de donné une valeur apporché de l'intégrale de cette fonction sur l'intervalle [-1;1] ).
seulement voila j'ai un problème au début de mon algo j'arrive pas a faire ressortir une expression y=f(x) pour pouvoir utiliser la fonction en fonction de x ensuite dans l'algo
ce que j'ai fais :

Ecrire (" entrer le degré du poly" !)
Lire (clavier! D)
Ecrire (" entrer le coeff de degré ", D !)
Lire (Clavier ! P)
Pour ind de 1 a D par pas de 1
Ecrire ( " entrer le coeff de degré ", D-ind !)
Lire (Clavier! a)
P=a + x * P
Finpour


ici ( si ca marchait j'aurai eu P=f(x) sauf que j'ai tester l'algo et sa marche pas... )
si queulqu'un pourrait m'aider!
merci

9 réponses

Dalfab
Messages postés
652
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
15 mai 2022
8
1 mai 2017 à 12:02
Bonjour,
Il faut lire et conserver les coefficients du polynôme. Puis on pourra calculer f(x) pour un x quelconque en utilisant les coefficients
Ecrire (" entrer le degré du poly" !) 
Lire (clavier! degre)
Pour ind de 0 a degre par pas de 1
    Ecrire ( " entrer le coeff de degré ", degre-ind !) 
    Lire (Clavier! coeff[ind] )
Finpour
Le polynôme fonction peut s'écrire :
double fonction( double x , double const coeff[] , unsigned degre ) {
   double y = 0;
   for  ( unsigned i = 0 ;  i <= degre ;  i++ ) {
      y = y * x  +  coeff[i];
   }
   return y;
}
0
agen4710
Messages postés
6
Date d'inscription
lundi 1 mai 2017
Statut
Membre
Dernière intervention
4 mai 2017

Modifié le 1 mai 2017 à 12:18
Bonjour merci bcp pour la réponse mais je ne comprends pas la ligne 1 de la deuxième partie, et que signifie " unsigned " ?
et dans la première partie, ce n'est pas plutot pour ind de 1 a degre par pas de 1?
merci d'avance :)
0
agen4710
Messages postés
6
Date d'inscription
lundi 1 mai 2017
Statut
Membre
Dernière intervention
4 mai 2017

Modifié le 1 mai 2017 à 14:05
ah non désolé ! je viens de comprendre pourquoi c'est pour ind de 0 a degre ! mais du coup, pour calculer l'image de 1 par exemple il faut faire :

x=1
ecrire (" l'image de 1 est ", y!) ?
car je viens de faire ca sur codeblocks mais les résultats sont faux
0
Dalfab
Messages postés
652
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
15 mai 2022
8
1 mai 2017 à 18:43
unsigned est un type, il correspond à un nombre entier qui n'est jamais négatif.
Donne ton code pour nous puissions voir ce qui est faux. N'oublie pas d'utiliser les balises avec le bouton [<>].
0

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

Posez votre question
agen4710
Messages postés
6
Date d'inscription
lundi 1 mai 2017
Statut
Membre
Dernière intervention
4 mai 2017

Modifié le 2 mai 2017 à 13:02
int D;
  float Tab[50000];
  int ind;
  float P;
  int xmax;
  int xmin;
  float ymax;
  float ymin;
  float i;
  int ii;
  float yxi;
  float x;

  printf("entrer le degre du poly attention le degre est inferieur ou egal a 20 : ");
  scanf("%d", &D);
  for (ind=0; ind<=D; ind=ind+1)
  {
      printf(" entrer le coeff de degre %d : ", D-ind);
      scanf("%f", &Tab[ind]);

  }

  P=0;
  for (ii=0; ii<=D; ii=ii+1)
  {
      P=P*x+Tab[ii];
  }
  x=1;
  printf("pour x =1 on a y= %f", P);

xmax=1;
  xmin=-1;
  ymax=0;
  ymin=0;
  for (i=-1; i<=1; i=i+0.01)
  {
      x=i;
      yxi=P;
      if (yxi<ymin)
      {
          ymin=yxi;
      }
      if (yxi>ymax)
      {
          ymax=yxi;
      }
  }
  printf("le ymax est %f le min %f ", ymax, ymin);


j'ai pas compris pour les balises désolé...

le problème ici c'est qu'il ne m'affiche pas les bons résultats de ymax et ymin
merci
0
Dalfab
Messages postés
652
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
15 mai 2022
8
Modifié le 2 mai 2017 à 13:02
Il y a 5 boutons au dessus de la fenêtre de saisie, il faut cliquer sur le bon!
A ton avis, si j'écris
x = 50;
P=0;
for (ii=0; ii<=D; ii=ii+1)
{
P=P*x+Tab[ii];
}
x=1;
printf("pour x =1 on a y= %f", P);
Est-ce que j'obtient la valeur du polynome pour x=50 ou pour x=1?
Le C est un langage procédural. Quand on écrit x=1; cela veut dire "à partir d'ici x vaut 1", ce n'est pas une égalité mathématique.
C'est pour cela que je t'ai proposé de mettre le polynôme sous la forme d'une fonction que l'on appellera quand nécessaire.
0
agen4710
Messages postés
6
Date d'inscription
lundi 1 mai 2017
Statut
Membre
Dernière intervention
4 mai 2017

Modifié le 4 mai 2017 à 19:10
Bonjour Dalfab désolé pour le retard avec les cours je peux pas répondre assez vite..
mais tu m'as dis " mettre le polynome sous la forme d'une fonction que l'on appellera quand nécessaire " c'est pas ce que j'ai fais ?
car même en enlevant les lignes 28 et 29 mon programme de donne toujours pas de bonne valeurs par exemple quand je définis le polynome f(x)=x+1 je suis cénsé obtenir ymax= 2 et ymin=0
et le programme me donne : ymax=1 et ymin=0


merci pour les réponses
0
agen4710
Messages postés
6
Date d'inscription
lundi 1 mai 2017
Statut
Membre
Dernière intervention
4 mai 2017

4 mai 2017 à 19:44
J'ai fais quelque test j'ai l'impression que le problème est a ce niveau :
for (ind=0; ind<=D; ind=ind+1)

{
P=P*x+Tab[ind];
}



car des que je sors de cette boucle le polynome est fixé a 1 sans avoir touché a x !
0
adilbela
Messages postés
20
Date d'inscription
jeudi 1 juin 2017
Statut
Membre
Dernière intervention
7 juin 2017

1 juin 2017 à 17:51
bonjour je reviens vers vous car je n'y arrive toujours pas... voici mon code ( malheuresement les résultats que j'obtiens sont faux )
 printf("Hello world!\n");
      int D;
  float Tab[50000];
  int ind;
  float P;
  int xmax;
  int xmin;
  float ymax;
  float ymin;
  float i;
  int ii;
  float yxi;
  float x;

  printf("entrer le degre du poly attention le degre est inferieur ou egal a 20 : ");
  scanf("%d", &D);
  for (ind=0; ind<=D; ind=ind+1)
  {
      printf(" entrer le coeff de degre %d : ", D-ind);
      scanf("%f", &Tab[ind]);

  }

  P=0;






  xmax=1;
  xmin=-1;
  ymax=-10000;
  ymin=10000;
  for (i=-1; i<=1; i=i+0.001)
  {

  x=i;
  for (ind=0; ind<=D; ind=ind+1)
  {
      P=P*x+Tab[ind];
  }
      yxi=P;
      if (yxi<=ymin)
      {
          ymin=yxi;
      }
      if (yxi>=ymax)
      {
          ymax=yxi;
      }
  }
  printf("le ymax est %f le min %f ", ymax, ymin);
  scanf("%f", ymax);
  printf(" le min est %f ", ymin);
  scanf("%f", ymin);
0