Newer
Older
{
"cells": [
{
"cell_type": "markdown",
"id": "broken-executive",
"metadata": {},
"source": [
"# Exercice : méthode de la transformée inverse\n",
"\n",
"But : générer des points selon une distribution de forme $f(x) = \\cos x$ dans l'intervalle $\\left[0.1, 1.5\\right]$\n",
"\n",
"Premièrement, on ajoute une **constante de normalisation** $\\alpha$ de façon à ce que l'intégrale entre les bornes de notre distribution soit bien égale à $1$ (la probabilité de tirer un nombre entre les deux bornes. On a $f(x) = \\alpha \\cos x$\n",
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
"\n",
"On calcule $F(x) = \\int_a^x f(x') dx'$\n",
"\n",
"$$\n",
"\\int_a^x f(x') dx' = \\big[ \\alpha \\sin x \\big]_a^x = \\alpha ( \\sin x - \\sin a )\n",
"$$\n",
"\n",
"Notez que je n'utilise pas la constante $\\beta$ comme aux le cours, qui constitue une étape inutile. On fixe la valeur de $\\alpha$ pour avoir $F(b) = 1$:\n",
"\n",
"$$\n",
"F(b) = \\alpha ( \\sin b - \\sin a ) = 1 \\Rightarrow \\alpha = \\frac{1}{\\sin b - \\sin a}\n",
"$$\n",
"\n",
"La fonction $F(x)$ est donc après normalisation:\n",
"\n",
"$$\n",
"F(x) = \\frac{\\sin x - \\sin a}{\\sin b - \\sin a}\n",
"$$\n",
"\n",
"Et la fonction inverse:\n",
"\n",
"$$\n",
"T(u) = \\arcsin((\\sin b - \\sin a) u + \\sin(a))\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "french-candle",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"inf: 0.1 sup: 1.5000000000000018\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import math\n",
"import random\n",
"import matplotlib.pyplot as plt\n",
"def fm1(y, inf, sup):\n",
" return math.asin((math.sin(sup) - math.sin(inf)) * y + math.sin(inf))\n",
"\n",
"inf, sup = 0.1, 1.5\n",
"print(\"inf:\", fm1(0, inf, sup), \"sup:\", fm1(1, inf, sup)) # should be inf, sup\n",
"uni = [random.random() for i in range(1000000)]\n",
"new = [fm1(x, inf, sup) for x in uni]\n",
"plt.hist(new, 14, rwidth=0.8, zorder=2)\n",
"plt.grid()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "suspected-namibia",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.10"
},
"varInspector": {
"cols": {
"lenName": 16,
"lenType": 16,
"lenVar": 40
},
"kernels_config": {
"python": {
"delete_cmd_postfix": "",
"delete_cmd_prefix": "del ",
"library": "var_list.py",
"varRefreshCmd": "print(var_dic_list())"
},
"r": {
"delete_cmd_postfix": ") ",
"delete_cmd_prefix": "rm(",
"library": "var_list.r",
"varRefreshCmd": "cat(var_dic_list()) "
}
},
"types_to_exclude": [
"module",
"function",
"builtin_function_or_method",
"instance",
"_Feature"
],
"window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 5
}