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

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

9 réponses

Répondre au sujet
Dalfab 325 Messages postés dimanche 7 février 2016Date d'inscription 19 avril 2018 Dernière intervention - 1 mai 2017 à 12:02
0
Utile
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
agen4710 6 Messages postés lundi 1 mai 2017Date d'inscription 4 mai 2017 Dernière intervention - Modifié par agen4710 le 1/05/2017 à 12:18
0
Utile
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
agen4710 6 Messages postés lundi 1 mai 2017Date d'inscription 4 mai 2017 Dernière intervention - Modifié par agen4710 le 1/05/2017 à 14:05
0
Utile
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
Dalfab 325 Messages postés dimanche 7 février 2016Date d'inscription 19 avril 2018 Dernière intervention - 1 mai 2017 à 18:43
0
Utile
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
agen4710 6 Messages postés lundi 1 mai 2017Date d'inscription 4 mai 2017 Dernière intervention - Modifié par cptpingu le 2/05/2017 à 13:02
0
Utile
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
Dalfab 325 Messages postés dimanche 7 février 2016Date d'inscription 19 avril 2018 Dernière intervention - Modifié par cptpingu le 2/05/2017 à 13:02
0
Utile
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
agen4710 6 Messages postés lundi 1 mai 2017Date d'inscription 4 mai 2017 Dernière intervention - Modifié par agen4710 le 4/05/2017 à 19:10
0
Utile
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
agen4710 6 Messages postés lundi 1 mai 2017Date d'inscription 4 mai 2017 Dernière intervention - 4 mai 2017 à 19:44
0
Utile
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
adilbela 20 Messages postés jeudi 1 juin 2017Date d'inscription 7 juin 2017 Dernière intervention - 1 juin 2017 à 17:51
0
Utile
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.