IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Problème d'un système d'équations en C et exécuté sur R


Sujet :

C

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 12
    Points : 8
    Points
    8
    Par défaut Problème d'un système d'équations en C et exécuté sur R
    Bonjour à tous!
    Voilà je débute depuis hier sur C. Je dois réaliser un système à trois équations sur C puis le lancer sur R.

    Alors j'ai écrit mon script (joint ci-dessous) et je l'ai compilé sans problème en .so (via la commande R CMD SHLIB) afin de l'ouvrir sur R.
    Puis, une fois sur R, j'ai envoyé la commande dyn.load("nomfichier.so").
    Seulement, voilà : lorsque je fais une résolution du système d'équation à l'aide du package deSolve sous R, j'ai toujours l'erreur suivante :

    « illegal input detected before taking any integration steps ».
    De ce fait, j'ai essayé de trouver de la documentation là-dessus (comme celle de K Soetaert, T Petzoldt, RW Setzer, 2010) mais je ne trouve d'aide nulle part. Je pense que le problème vient de mon script en C mais comme je débute je ne sais pas où, ni par quoi, ni commencer et comment

    J'ai quand même essayé de refaire le script en C avec un système d'équations encore plus simple et là, par contre, je n'arrive pas à compiler (dû à des erreurs de syntaxe) mais lorsque je regarde le script, je ne vois rien. Puis pourquoi trouver des fautes sur un script un peu plus simple et pas sur l'autre ?

    Je vous joins donc le script en C et également la partie sur R (au cas où)
    En espérant que quelqu'un puisse m'aider, car là je désespère.
    Merci.

    /*Sur C*/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    #include <R.h>
    #include <Rinternals.h>
    #include <Rdefines.h>
    #include <R_ext/Rdynload.h>
    #include <Rmath.h>
    #include <stdio.h>
    #include <math.h>
     
     
    static double parms[3]
     
    #define beta1 parms[0]
    #define beta2 parms[1]
    #define delta parms[2]
     
    /* initializer */
    void initmod(void (* odeparms)(int *, double *))
    {
    int N=3; /*  N=3 car 3 paramètres */
    odeparms(&N, parms);
    }
     
     
    #define S y[0]
    #define I y[1]
    #define R y[2]
     
    #define dS ydot[0]
    #define dI ydot[1]
    #define dR ydot[2]
     
     
    void derivs (int *neq, double *t, double *y, double *ydot, double *yout, int *ip)
    {
     
    if (ip[0] <1) error("nout should be at least 1");
     
    double beta;
    beta = beta1 * exp(-beta2);
     
        dS=-(beta*S*I);
        dI=(beta*S*I)-(delta*I);
        dR=(delta*I);
     
     
    yout[0]=S+I+R;
     
    }
    ## Sur R##
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    dyn.load("SI_2.so")
    is.loaded("derivs")#vérifie si la fonction est bien chargée
     
    #Données
    ##########
    #vecteur temps:
    time.out <- seq(400,1000,by =0.1)
    #variables initiales:
    init<-c(S=0.99,I=1-0.99, R=0)
    #paramètres par défaut:
    values<-c(beta1=0.02, beta2=0.08, delta=0.001)
     
     
    ts.si <- data.frame(lsoda(
      y = init,               # Initial conditions for population
      times = time.out,             # Timepoints for evaluation
      func = "derivs",                   # Function SI coder en C
      parms = values,                       # Vector of parameters by default
      dllname="SI_2",
      initfunc="initmod",
      nout=1,
      outnames="N",
      atol = 0
    ))

  2. #2
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    C'est plutôt une question R qu'une question C. Je pense que tu devrais pouvoir trouver un exemple R qui prend une librairie C et modifier la librairie C pour faire ce que tu veux.

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Bin je ne suis pas sûre si le problème est sur R ou sur C justement, mais je pense que ça vient plutôt de C c'est pourquoi je poste ma question ici.
    Oui j'ai trouver 2-3 exemples mais rien sur le problème que je rencontre du coup je n'arrive pas à avancer.

  4. #4
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Ton message d'erreur est directement produit par R lui-même, après internet.
    Je ne peux pas t'en dire plus, ne pratiquant pas ce langage.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  5. #5
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par hbemar Voir le message
    Bin je ne suis pas sûre si le problème est sur R ou sur C justement, mais je pense que ça vient plutôt de C c'est pourquoi je poste ma question ici.
    Oui j'ai trouver 2-3 exemples mais rien sur le problème que je rencontre du coup je n'arrive pas à avancer.
    L'idée que je propose à la base est de dire ceci:

    Tu as A (ton programme) qui ne fonctionne pas
    Tu as B (un exemple de R qui prend du C) qui fonctionne

    Tu bosses doucement dans B pour te rapprocher de A en vérifiant étape par étape que ca marche.

Discussions similaires

  1. Problème de restauration système
    Par Le Pharaon dans le forum Autres Logiciels
    Réponses: 14
    Dernier message: 05/02/2019, 00h03
  2. [Débutant] Problème de résolution système d'équation
    Par Damien123 dans le forum MATLAB
    Réponses: 7
    Dernier message: 31/10/2009, 18h10
  3. Probléme résolution de systèmes d'équations en c
    Par nissalabella dans le forum Débuter
    Réponses: 4
    Dernier message: 11/03/2009, 11h45
  4. Résolution d'un système d'équations
    Par JeaJeanne dans le forum MATLAB
    Réponses: 1
    Dernier message: 04/12/2006, 10h08
  5. [EXCEL] Formule pour un système d'équation
    Par Gerard6969 dans le forum Macros et VBA Excel
    Réponses: 46
    Dernier message: 10/10/2006, 10h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo