Évaluez un sac de pièces de monnaie
Un sac contenant des pièces de monnaie américaines neuves a été volé dans une banque. Sans ouvrir le sac, que peut-on dire de la valeur monétaire de son contenu ? Le poids du sac est une caractéristique physique évidente et facile à mesurer. Dans l'hypothèse d'un sac de pièces d'une livre, combinez le savoir-faire de la base de connaissances de Wolfram en matière de monnaies et sa capacité intégrée à résoudre des équations linéaires pour étudier la valeur attendue du butin.
Pour commencer, renvoyez une liste de pièces de monnaie américaines en circulation au moyen d'une classe d'entités implicitement définie.
EntityClass["CurrencyDenomination", {EntityProperty[
"CurrencyDenomination", "IssuingCountry"] ->
Entity["Country", "UnitedStates"],
EntityProperty["CurrencyDenomination", "Format"] -> "coin"}]
Agrandissez la classe d'entité implicitement définie en cliquant sur le [+], trouvez les membres de cette classe et classez-les par valeur.
coinsUS = EntityList[
EntityClass[
"CurrencyDenomination", {
EntityProperty[
"CurrencyDenomination", "IssuingCountry"] -> Entity[
"Country", "UnitedStates"],
EntityProperty["CurrencyDenomination", "Format"] -> "coin"}]] //
SortBy[#[EntityProperty["CurrencyDenomination", "Value"]] &]
Réalisez un collage d'images de pièces de monnaie.
ImageCollage[
EntityValue[coinsUS,
EntityProperty["CurrencyDenomination", "Image"]],
Background -> White]
Résumez les propriétés des pièces de monnaie dans un tableau.
TextGrid[{ImageResize[#2, 60], #1,
Row[Riffle[#3, Style[" | ", Gray]]]} & @@@
EntityValue[
coinsUS, {EntityProperty["CurrencyDenomination", "Entity"],
EntityProperty["CurrencyDenomination", "Image"],
EntityProperty["CurrencyDenomination", "PeopleOnCurrency"]}],
Alignment -> {Left, Center}, Dividers -> All] // TraditionalForm
Obtenez les dénominations des pièces (en centimes) et les masses (en grammes) et convertissez les masses en nombres rationnels.
{values, masses} =
Transpose[EntityValue[coinsUS, {"Value", "Weight"}]]
coinsandweights = Transpose[{
QuantityMagnitude[UnitConvert[values, "USCents"]],
Rationalize[QuantityMagnitude[N[UnitConvert[masses, "Grams"]]]]
}]
lcm = LCM @@ Denominator[Rationalize[coinsandweights][[All, 2]]];
rationalcoinweights = lcm #2 & @@@ Rationalize[coinsandweights]
Trouvez toutes les distributions de pièces compatibles avec une mesure de poids d'une livre avec une mesure d'erreur de ± 0,1% (en supposant que le sac lui-même contribue de manière négligeable).
meanWeight =
QuantityMagnitude[UnitConvert[Quantity[1, "Pounds"], "Grams"]];
error = Normal[Quantity[0.1, "Percent"]];
{minScaledWeight,
maxScaledWeight} = {Floor[lcm meanWeight (1 - error/2)],
Ceiling[lcm meanWeight (1 + error/2)]}
Utilisez FrobeniusSolve pour déterminer toutes les collections de pièces possibles donnant le poids total requis.
Flatten[allSolutions, 1] // Length
Trouvez les valeurs minimale, médiane, moyenne et maximale de la valeur monétaire totale des pièces du sac (en supposant que toutes les combinaisons ont la même probabilité).
Faites un histogramme de la répartition de la valeur monétaire totale.
Histogram[dollarValues, Automatic, "PDF",
AxesLabel -> {Quantity[None, "USDollars"], "fraction"}]
La répartition du poids de tous les sacs est assez uniforme.
Histogram[weightvalues, 50, "PDF",
AxesLabel -> {Quantity[None, "USDollars"], "fraction"}]
Tracez la répartition du nombre de pièces.
Histogram[Total /@ Flatten[allSolutions, 1], {5}]
Voici la répartition bivariée de la valeur monétaire en fonction du nombre de pièces dans le sac.
Histogram3D[{coins.#/100., Total[#]} & /@ Flatten[allSolutions, 1],
AxesLabel -> {Quantity[None, "USDollars"], "coins"}]