teaching:exos:sequences_brins_adn

Séquences de brins d'ADN

L'ADN (acide désoxyribonucléique) est constitué d'une suite de nucléotides qui existent en quatre types différents (notés A, C, G et T), du nom des bases adénine (A), cytosine (C), guanine (G) et thymine (T). Les brins s'associent en double hélice par une reproduction assurant une correspondance par paires, A et T d'une part, G et C d'autre part.

  • Si on considère un ensemble de n bases, combien de brins différents est-il possible d'obtenir ?
    • Avec 1 A, 1 C, 1 G et 1 T
    • Avec 1 A, 1 C, 2 G et 2 T
    • Avec 2 A, 2 C, 2 G et 2 T
    • Avec 3 A, 3 C, 3 G et 3 T
    • Avec i A, i C, i G et i T (i étant grand)
  • Si on considère une synthèse artificielle d'un brin composé de n bases issue d'un grand réservoir comprenant un nombre équivalent de chacune des bases, quel est le nombre de brins possibles comprenant 4 bases, 8 bases, 12 bases, 4*i bases ?
ADN-combinatoire-01.py
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
Petit programme destiné à calculer des nombres de séquences ADN possibles
combien de brins différents est-il possible d'obtenir :
    Avec 1 A, 1 C, 1 G et 1 T
    Avec 2 A, 2 C, 2 G et 2 T
    Avec 3 A, 3 C, 3 G et 3 T
    Avec i A, i C, i G et i T (i étant grand)
Variante : Si on considère une synthèse artificielle d'un brin composé
de n bases issue d'un grand réservoir comprenant un nombre équivalent de
chacune des bases, quel est le nombre de brins possibles comprenant
4 bases, 8 bases, 12 bases, 4*i bases ?
Comparaisons de 2 variantes pour des petits nombres et en utilisant
la formule de Striling pour des grands nombres
"""
from math import *
def logfactstir(j):
    # approximation de Stirling pour le logarithme de la factorielle
 
	return j*log(j) - j + log(2.*pi*j)/2.
 
 
n=101
# petits nombres
for i in range(1,n):
    print(i,factorial(4*i)/factorial(i)**4, 4**(4*i))
 
# petits nombres, en log
for i in range(1,n):
    print(i,log(factorial(4*i)/factorial(i)**4), log(4**(4*i)))
 
# grands nombres
# calcul suivant la formule de Stirling (http://fr.wikipedia.org/wiki/Formule_de_Stirling)
# formule de Stirling : ln(j!) ~= j ln(j) - j + 1/2 ln(2πj)
# approximation fréquente en thermodynb : ln(j!) ~= j ln(j) - j
print(pi)
for i in range(100,100*n,100):
    print(i,logfactstir(4*i)-4.*logfactstir(i), 4*i*log(4))
 
# très grands nombres
print(pi)
for i in range(10000,10000*n,10000):
    print(i,logfactstir(4*i)-4.*logfactstir(i), 4*i*log(4))
Ce site web utilise des cookies. En utilisant le site Web, vous acceptez le stockage de cookies sur votre ordinateur. Vous reconnaissez également que vous avez lu et compris notre politique de confidentialité. Si vous n'êtes pas d'accord, quittez le site.En savoir plus
  • teaching/exos/sequences_brins_adn.txt
  • Dernière modification : 2018/10/22 10:12
  • de villersd