How can one realistically model the distribution of the network's unspent transaction outputs? I am working on a simulation to explore the usefulness of a patch for the CoinSelection behaviour of BitcoinCore. To that end, I am looking for statistics on the distribution of unspent outputs respective to their value in satoshi. 

So far, I haven't found much on the topic beside an outdated number of unspent transaction outputs, as likely search terms collide with a lot of unrelated topics.

Are there any papers or other sources that discuss:


How can one realistically model the distribution of the value (in satoshi) of all UTXO (unspent transaction outputs)? 
What type of curve best approximates the distribution?
What are mean, standard deviation, and variance of the network's UTXOs' values?
Bonus: How did the distribution of UTXO' values change over time?


Clarification: I am interested in modelling the number of satoshi held in UTXO.
I haven't read any papers trying to analyze the amount of unspent outputs. More often, people are interested in the distribution of address' balances. This could be interesting because it reflects how evenly distributed bitcoin is. 

I did find this article: http://www.coindesk.com/what-block-chain-analysis-tells-bitcoin/, which seems like it might be of interest to you and is related to the distribution of UTXOs. 

If you call gettxoutsetinfo with the Bitcoin Core RPC calls, it tells some basic info about the UTXO set. I just did this and got:

{
    "height" : 338396,
    "bestblock" : "000000000000000009f32437cb28d54ff600ec020778c8ce84ecf93b99d5218c",
    "transactions" : 4525842,
    "txouts" : 16217914,
    "bytes_serialized" : 566046691,
    "hash_serialized" : "1ad2172e4d37ce21291c116580f5b527e4c302b9c2ce4e88a91c0c00f748fb8d",
    "total_amount" : 13709764.78496462
}


So it seems that the average amount of an UTXO is:


  13709764.78496462 / 16217914 = 0.84534699




To analyze the amount of outputs (note, this is not only UTXOs), I wrote up this quick script:

&lt;?php

require_once 'jsonRPCClient.php';

$bitcoin = new jsonRPCClient('http://{username}:{password}@127.0.0.1:8332/');

$info = $bitcoin-&gt;getinfo();

$height = $info['blocks'];
$numTrials = 1000;
$includeCoinbase = false;


$cutoffs = array();

for ($i = 0; $i &lt; 10; $i++) { $cutoffs[] = $i; }
for ($i = 1; $i &lt; 10; $i++) { $cutoffs[] = 10*$i; }
for ($i = 1; $i &lt; 10; $i++) { $cutoffs[] = 100*$i; }
for ($i = 1; $i &lt; 10; $i++) { $cutoffs[] = 1000*$i; }

function GetRange($value) 
{
    global $cutoffs;
    for ($i = 0; $i &lt; count($cutoffs)-1; $i++)
    {
        if ($cutoffs[$i] &lt;= $value &amp;&amp; $value &lt; $cutoffs[$i+1])
            return $cutoffs[$i] . " - " . $cutoffs[$i+1];
    }
    return $cutoffs[count($cutoffs)-1] . " - ...";
}

$sum = 0;
$distribution = array();

for ($i = 0; $i &lt; $numTrials; $i++) 
{

    $blockhash = $bitcoin-&gt;getblockhash(rand(1, $height));
    $block = $bitcoin-&gt;getblock($blockhash);

    $randTxIndex = rand(0, count($block['tx'])-1);

    if ($randTxIndex == 0 &amp;&amp; !$includeCoinbase) {
        $i--;
        continue;
    }

    $randTxHash = $block['tx'][$randTxIndex];

    $randTx = $bitcoin-&gt;getrawtransaction($randTxHash, 1);

    $numOutputs = count($randTx['vout']);
    $randOutput = $randTx['vout'][rand(0, $numOutputs-1)];

    $value = $randOutput['value'];

    $sum += $value;
    $distribution[GetRange($value)] += 1;
}

echo (json_encode($distribution, JSON_PRETTY_PRINT) . "\n");
echo "average: " . ($sum / $numTrials) . "\n";


And the results are (after being cleaned up a little):

average: 89.55518291596

START   END     COUNT
0       1       636
1       2       73
2       3       18
3       4       20
4       5       14
5       6       11
6       7       8
7       8       8
8       9       11
9       10      12
10      20      36
20      30      26
30      40      15
40      50      16
50      60      29
60      70      5
70      80      5
80      90      4
90      100     3
100     200     29
200     300     4
300     400     4
400     500     1
500     600     1
600     700     1
700     800     1
800     900     3
900     1000    0
1000    2000    2
2000    3000    1
3000    4000    0
4000    5000    0
5000    6000    1
6000    7000    0
7000    8000    0
8000    9000    0
9000    ...     2


Which, when plotted, gives:



And since the 0-1 outputs make the rest go out of scale, this is a plot without the smallest outputs: