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
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 12
    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 confirmé

    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 : 44
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    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
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 12
    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

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    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 202
    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.

  5. #5
    Expert confirmé

    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 : 44
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    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