Вот наиболее простой (на мой взгляд) способ реализовать это в октаве.
%%% The Portfolio problem:
pkg load statistics; % required for the `binopdf` and `binostats` functions
% Problem variables
NumberOfLoans = 1000;
PricePerLoan = 10000;
ProbOfDefault = 0.1;
% Binomial probability of 50 in 1000 loans defaulting for a binomial parameter of 0.1
p = binopdf( 50, NumberOfLoans, ProbOfDefault );
fprintf( 'Probability of 50 loans defaulting is %.3g\n', p );
% Expected loss
[ ExpNumDefaults, VarDefaults ] = binostat( NumberOfLoans, ProbOfDefault );
ExpLoss = PricePerLoan * ExpNumDefaults;
VarLoss = (PricePerLoan .^ 2) * VarDefaults;
fprintf( 'Expected loss of portfolio: %d\n', ExpLoss );
fprintf( 'Variance of portfolio: %d\n', VarLoss );
Вывод:
Probability of 50 loans defaulting is 3.21e-09
Expected loss of portfolio: 1000000
Variance of portfolio: 9000000000
Используется пакет statistics
, который вы можете установить из октавного терминала следующим образом (опция -forge
загружает ее непосредственно с веб-сайта Octave Forge ):
pkg install statistics -forge
Причина, по которой я бы предпочел использовать пакет статистики чем выполнять эти вычисления «вручную», так это то, что промежуточные этапы, требующие факториалов, приведут к очень большим числам, что, вероятно, нарушит ваши вычисления, в то время как пакет статистики реализует эти функции оптимизированным способом, который решает эти проблемы.
Если вы новичок в октаве, то, вероятно, в приведенном выше фрагменте кода происходит много нового. Я бы посоветовал вам прочитать основы октавы из официальной документации , а также найти функции, используемые здесь, непосредственно с терминала октавы, используя функцию help
.