(引用;名探偵コナン「甘く冷たい宅配便」) 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!
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.
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
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 $.
Si les deux côtés sont intégrés et que la constante d'intégration est C,
Lorsque la condition initiale $ T (0) = T_0 $ est imposée, la constante d'intégration C devient
Ce sera. En remplaçant cela dans l'équation (2), la solution analytique est donnée ci-dessous.
(Aussi, transformez ça)
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.
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!
[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