✨ Facile avec Python ☆ Temps écoulé estimé après la mort ✨

Et s'il y avait un cadavre devant vous?

(引用;名探偵コナン「甘く冷たい宅配便」) Quand Conan trouve son corps, il pense au temps écoulé après la mort au tout début, non? Si vous connaissez l'heure estimée du décès, vous pouvez réduire considérablement le nombre de suspects. \ (^ O ^) / Alors cette fois, je vais vous présenter comment en savoir plus sur le temps écoulé après la mort!

exemple

Il y avait le corps d'un homme dans une voiture réfrigérée réglée à une température ambiante de 16 ° C L'homme pesait 86 kg et lorsque Conan a mesuré la température dans le rectum du corps, elle était de 27 ° C. Trouvez le temps écoulé après la mort d'un homme.

Loi du refroidissement de Newton

Considérons d'abord un phénomène simplifié. Considérez le problème que le café chaud dans une tasse est refroidi par la température ambiante (air). A ce moment, il est dit que la "loi de refroidissement de Newton" suivante tient approximativement. L'équation différentielle qui exprime la loi du refroidissement de Newton est

\frac{dT}{dt} = -γ(T - T_s) (1)

Il est représenté par. Ici, chaque personnage est $ T $: température de l'eau chaude $ T_s $: température ambiante $ \ gamma $: constante de refroidissement Représente. Cette équation différentielle peut être résolue analytiquement. Commencez par diviser les deux côtés de l'équation (1) par $ T-T_s $. \frac{1}{T-T_s}dT = -γdt

Si les deux côtés sont intégrés et que la constante d'intégration est C, log (T - T_s) = -γt + C Ce sera. La résolution de cette équation pour T donne l'équation suivante. T = T_s + e^{-γt + C} (2)
Lorsque la condition initiale $ T (0) = T_0 $ est imposée, la constante d'intégration C devient C = log (T_0-T_s)

Ce sera. En remplaçant cela dans l'équation (2), la solution analytique est donnée ci-dessous. T(t) = T_s + (T_0 - T_s) e^{-γt}

(Aussi, transformez ça) \frac{T(t)-T_s}{T_0-T_s} = e^{-γt}

Estimation du temps écoulé après la mort par mesure continue de la température rectale

Ensuite, utilisez la loi du refroidissement de Newton pour déterminer le temps écoulé après la mort. Selon "Estimation du temps écoulé après la mort par mesure continue de la température rectale (Wasedain Advanced Science and Technology)", dans le cas d'un corps, l'équation différentielle se transforme comme suit. \frac{T_r-T_e}{T_o-T_e}=1.25e^{B*t}-0.25e^{5B*t} (T_e\le23.2) \frac{T_r-T_e}{T_o-T_e}=1.11e^{B*t}-0.11e^{10B*t} (T_e\ge23.2) B=-1.2815(bW)^{-0.625}+0.0284 cependant, $ T_r $ est la température rectale ℃ $ T_e $ est la température ambiante ℃ $ T_o $ est la température rectale au moment du décès et est de 37,2 ° C. $ T_e $ est constant à la valeur moyenne du temps de mesure à température ambiante ℃ $ W $ Poids corporel kg $ b = 1 $ est le facteur de correction $ B $ est la constante de refroidissement de Newton $ t $ est le temps écoulé après le décès (h) ça ira. Résolvons cet exemple immédiatement sur cette base!

import sympy

def death_time(Tr,Te,W):
    Tr=Tr
    Te=Te
    W=W
    B = sympy.Symbol('B')
    t = sympy.Symbol('t')
    To = 37.2
    b = 1
    E = sympy.S.Exp1
    equation1 = 1.25*(E**(B*t))-0.25*(E**(5*B*t))-(Tr-Te)/(To-Te)
    equation2 = 1.11*(E**(B*t))-0.11*(E**(10*B*t))-(Tr-Te)/(To-Te)
    equation3 = -1.2815*((b*W)**(-0.625))+0.0284-B
    if Te <= 23.2:
        print(sympy.solve([equation1,equation3]))
    else:
        print(sympy.solve([equation2,equation3]))    
death_time(27,16,86) #Définition de ce problème

Selon la référence $$, $ T_e $ utilise la moyenne de la température ambiante, mais cette fois, la température ambiante de 16 ° C au moment de la découverte a été fixée à $ T_e $. Vous pouvez comprendre le résultat sans le dire, mais scipy ne pouvait pas effectuer directement le calcul en incluant une telle variable de puissance, et même quand je me suis réveillé le matin, j'ai continué à calculer (pleurer). J'ai décidé de le résoudre en me basant sur l'idée de méthode d'essai et d'erreur selon la référence.

(引用KrylovSubspaceAcceleratedNewtonAlgorithm:ApplicationtoDynamicProgressiveCollapseSimulationofFrames)

Étant donné que le processus de recherche du différentiel de la fonction et de résolution de l'équation à chaque fois qu'elle est répétée est important, nous avons décidé de calculer en utilisant la méthode d'échange partiel de Krilov, qui se rapproche du différentiel par la différence, comme indiqué dans la figure ci-dessus.

import math
from scipy.optimize import newton_krylov
import sympy

#(3)Correspond à la formule. poids(kg)Calculez la constante de refroidissement B de Newton à partir de. À(Température rectale au décès)37.2
def predict_B(W):
    W=W
    B = sympy.Symbol('B')
    b = 1
    equation3 = -1.2815*((b*W)**(-0.625))+0.0284-B
    B = sympy.solve([equation3])[B]
    return B  

#(1)(2)Équivaut à une expression. Classification des cas par température ambiante Te
def predict_deathtime(W,Tr,Te,ta):
    Bx = predict_B(W)
    Tr,Te,ta = Tr,Te,ta
    E = sympy.S.Exp1
    To = 37.2
    def F(x):
        if Te <= 23.2:
            return 1.25*(E**(Bx*x))-0.25*(E**(5*Bx*x))-(Tr-Te)/(To-Te)              
        else:
            return 1.11*(E**(Bx*x))-0.11*(E**(10*Bx*x))-(Tr-Te)/(To-Te)
    guess = ta
    sol = newton_krylov(F, guess, method='lgmres')
    print(sol)

#(poids,La température rectale,Température ambiante,Valeur initiale du temps écoulé après le décès)Entrez dans l'ordre de
#Notez que la valeur différentielle ne peut pas être obtenue en définissant la valeur initiale du temps écoulé après la mort sur 0.
predict_deathtime(86,27,16,2)
Résultat de sortie 17.19191007875492

Par conséquent, dans cet exemple, il s'est avéré qu'il est mort il y a environ 17 heures!

Les références

[Commençons par la science computationnelle! Loi de refroidissement de Newton ①](https://dekfractal.com/2018/09/23/%E8%A8%88%E7%AE%97%E7%A7%91%E5%AD%A6%E3%82% 92% E3% 81% AF% E3% 81% 98% E3% 82% 81% E3% 82% 88% E3% 81% 86% EF% BC% 81% E3% 80% 80% E3% 83% 8B% E3% 83% A5% E3% 83% BC% E3% 83% 88% E3% 83% B3% E3% 81% AE% E5% 86% B7% E5% 8D% B4% E6% B3% 95% E5% 89% 87 /) Estimation du temps écoulé après la mort par mesure continue de la température rectale (Waseda University Advanced Science and Technology) ○ (Étude) Mikiyasu Inoue * (Correct) Kiyotaka Sakai (Waseda Univ.) (Correct) Kenichiro Yamamoto (Defense Medical College) (Correct) Jun Kim

Recommended Posts

✨ Facile avec Python ☆ Temps écoulé estimé après la mort ✨
[Analyse de co-occurrence] Analyse de co-occurrence facile avec Python! [Python]
Synchronisation facile des dossiers avec Python
Mesure du temps d'exécution avec Python avec
Compilation facile de Python avec NUITKA-Utilities
Serveur HTTP facile avec Python
Synchronisation de l'heure (Windows) avec Python
Prédiction de séries chronologiques facile avec Prophet
[Python] Traitement parallèle facile avec Joblib
Programmation facile Python + OpenCV avec Canopy
Transmission de courrier facile avec Hâte Python3
Optimisation bayésienne très simple avec Python
Visualisez facilement vos données avec Python seaborn.
Exécution parallèle facile avec le sous-processus python
[Python] Test super facile avec instruction assert
[Python] Vérification simple du type d'argument avec la classe de données
Il suffit d'imprimer le temps écoulé en Python en secondes
[Easy Python] Lecture de fichiers Excel avec openpyxl
Application Web facile avec Python + Flask + Heroku
Scraping Web facile avec Python et Ruby
[Python] Essayez facilement l'apprentissage amélioré (DQN) avec Keras-RL
[Python] Introduction facile à l'apprentissage automatique avec python (SVM)
Sortie CSV de la recherche Google avec [Python]! 【Facile】
[Python3] Une histoire bloquée avec la conversion du fuseau horaire
Utilisez Logger avec Python pour le moment
Comment mesurer le temps d'exécution avec Python Partie 1
Analyse de régression LASSO facile avec Python (pas de théorie)
Comment mesurer le temps d'exécution avec Python, partie 2
Statistiques avec python
Python avec Go
Twilio avec Python
Intégrer avec Python
mesure du temps python
Jouez avec 2016-Python
AES256 avec python
Testé avec Python
python commence par ()
Premier Python
avec syntaxe (Python)
Bingo avec python
Zundokokiyoshi avec python
Micro-ordinateur avec Python
Cast avec python
Arrêter EC2 pendant l'heure spécifiée + démarrer avec Lambda (python)
Exécutez avec CentOS7 + Apache2.4 + Python3.6 pour le moment
Téléchargez facilement et partiellement mp4 avec python et youtube-dl!
Obtenez une sortie standard en temps réel avec le sous-processus Python
Un moyen facile de gratter avec Python en utilisant Google Colab
Comment mesurer le temps de lecture d'un fichier mp3 avec python
Pour éviter de passer du temps à colorier des personnages dessinés avec du python
[Série chronologique avec plotly] Visualisation dynamique avec plotly [python, cours boursier]