Code R pour une fonction

tylnx
Modifié (November 2023) dans Logiciels pour les mathématiques
Bonjour à tous
J'ai réalisé la partie théorique d'un travail. Je désire maintenant faire le calcul numérique sous le logiciel R. Je suis débutant dans ce langage de programmation. J'ai besoin de votre aide.
On pose $a=0.66/5.25$.
 Soit $g$ la fonction définie sur $\mathbb{N} $ par : 
$$g(j)= \begin{cases}0, & \text{ si } \; \; \;  j \leq 10 \\ \frac{a}{300}(2 j-21), & \text{ si } \; \; \; 11 \leq j \leq 25 \\  \frac{a}{1800}(231-2j), & \text{ si } \; \; \; 26 \leq j \leq 115 \\ 0, & \text{ si }\; \; \; j \geq 116\end{cases} $$
On définit maintenant la fonction $F$  par $$F\Big(\dfrac{k}{10}\Big)= \begin{cases}0, & \text { si }\; \; \;  1 \leq k \leq 114 \\   \exp(-0.66), & \text { si} \; \; \; 115 \leq k \leq 125    \\ \exp\Big(- \displaystyle \sum_{j=11}^{115}\Big[1-F\big(\dfrac{k-j}{10}\big)\Big]g(j)\Big), & \text { si }  \; \; \; 126 \leq k \leq 800 \end{cases}$$
NB: $k$ ne prend que des valeurs entières.
Écrire un code R donnant les fonctions $g$ et $F$ ; puis tracer la  courbe de la fonction $F$  pour les valeurs de $k$ entre $1$ et $800$.
Merci d'avance pour votre aide.

Réponses

  • Alexique
    Modifié (November 2023)
    Pour les différents cas à traiter, utiliser "if/then/else". Pour la somme, utiliser une boucle "for". La fonction exponentielle est déjà implémentée. Il n'y a plus qu'à t'y mettre.

    Si je t'aide plus, je te donne le code. Que tu sois débutant n'est pas vraiment une excuse si tu as déjà fait un peu de programmation au lycée au moins. Ca n'a rien de très différent de Python et tu as toutes les ressources en ligne  (exemple de codes sous R, d'utilisation des boucles), sans parler de chatgpt qui te fait des jolis programmes que tu peux recopier sans vergogne. Il faudra juste lui expliquer ce que tu veux faire. Mais si tu lui demandes "je veux coder sous R une fonction affine par morceaux", tu auras déjà la trame de ton code et tu n'auras plus qu'à l'adapter pour ton problème.

    Bref, si tu as été capable de faire ce post en LaTeX sans problème, je ne vois pas pourquoi tu n'arriverais pas à faire ce code. 
    Tu devrais obtenir le graphe ci-dessous (si c'est bien ce à quoi tu t'attendais, une fonction de répartition typiquement ?)


  • Merci Alexique pour ton commentaire. Je suis d'accord entièrement avec toi, sauf que c'est vraiment urgent voilà pourquoi j'ai sollicité votre aide. Ta figure correspond bien à ce que je veux. Avoir ton code serait un véritable avantage. Merci  d'avance.
  • fredaulycee2
    Modifié (November 2023)

    Un exemple de syntaxe fonction R, après comme le dit Alexique, il n'y a rien de difficile ;-) Note qu'il n'y a pas de return.
    f <- function(x) {
      x^2
      y <- x
     y
    }
    f(2)
  • fredaulycee2
    Modifié (November 2023)
    Quelle idée de copier coller du code :'(
  • Alexique
    Modifié (November 2023)
    a=0.66/5.25
    
    g=function(j){
     if(11<=j && j<= 25){
        y=(a/300)*(2*j-21)
      }
      else if(16<=j && j<= 115){
        y=(a/1800)*(231-2*j)
      }
      else{
        y=0
      }
      return(y)
    }
    
    #Je stocke les valeurs de F dans un vecteur y
    y=c()
    for (k in 1:114){
      y=c(y,0)  
    }
    for (k in 115:125){
      y=c(y,exp(-0.66))
    }
    for (k in 126:800){
      s=0
      for(j in 11:115){ #calcul de la somme
        s=s+(1-y[k-j])*g(j)  #elle fait appel aux précèdentes valeurs calculées de F
      }
      y=c(y,exp(-s))
      
    }
    
    x=seq(from = 0.1, to = 80, by=0.1)
    plot(x,y, type='l')
    Bon, je te fais confiance pour apprendre à faire tout ça par toi-même un jour.
  • Merci beaucoup  Alexique. Je te promets de chercher à comprendre; surtout que je compte faire beaucoup de choses avec R.
  • tylnx
    Modifié (November 2023)
    Bonjour à tous

    Je reviens sur le code qu'a proposé  Alexique. Il m'a l'air tout à fait juste. Cependant je rencontre un problème. $F$ est une fonction de répartition; donc censée être croissante pour toute valeur du paramètre $a$ choisie. Mais lorsque je change la paramètre $a$ par $a=0.8/5.25$,  je trouve une courbe qui décroît à un certain moment, ce qui n'est pas normal. Je me dis alors qu'il y a une partie du code qui n'est pas bon.
    S'il vous plaît, pouvez-vous regarder de près avec moi le code de Alexique, afin de repérer une éventuelle erreur ?
    Merci d'avance.
  • tylnx
    Modifié (November 2023)
    Désolé ! J'avais commis une grosse bêtise. En effet,  j'avais oublié de changer aussi le paramètre dans l'exponentielle. Le code est bon. C'est parfait !
Connectez-vous ou Inscrivez-vous pour répondre.