Definition fonction monte carlo help... [Résolu]

Messages postés
6
Date d'inscription
lundi 1 mai 2017
Dernière intervention
4 mai 2017
- - Dernière réponse : adilbela
Messages postés
20
Date d'inscription
jeudi 1 juin 2017
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
Afficher la suite 

Votre réponse

9 réponses

Messages postés
366
Date d'inscription
dimanche 7 février 2016
Dernière intervention
21 novembre 2018
0
Merci
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;
}
Commenter la réponse de Dalfab
Messages postés
6
Date d'inscription
lundi 1 mai 2017
Dernière intervention
4 mai 2017
0
Merci
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 :)
Commenter la réponse de agen4710
Messages postés
6
Date d'inscription
lundi 1 mai 2017
Dernière intervention
4 mai 2017
0
Merci
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
Commenter la réponse de agen4710
Messages postés
366
Date d'inscription
dimanche 7 février 2016
Dernière intervention
21 novembre 2018
0
Merci
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 [<>].
Commenter la réponse de Dalfab
Messages postés
6
Date d'inscription
lundi 1 mai 2017
Dernière intervention
4 mai 2017
0
Merci
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
Commenter la réponse de agen4710
Messages postés
366
Date d'inscription
dimanche 7 février 2016
Dernière intervention
21 novembre 2018
0
Merci
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.
Commenter la réponse de Dalfab
Messages postés
6
Date d'inscription
lundi 1 mai 2017
Dernière intervention
4 mai 2017
0
Merci
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
Commenter la réponse de agen4710
Messages postés
6
Date d'inscription
lundi 1 mai 2017
Dernière intervention
4 mai 2017
0
Merci
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 !
Commenter la réponse de agen4710
Messages postés
20
Date d'inscription
jeudi 1 juin 2017
Dernière intervention
7 juin 2017
0
Merci
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);
Commenter la réponse de adilbela

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.