46 lines
1.7 KiB
C#
46 lines
1.7 KiB
C#
using System;
|
|
using TridentGoalSeek;
|
|
|
|
namespace EvoCalculator.Core.Calculation.Columns
|
|
{
|
|
public class CashflowNSIBColumn : BaseColumnWithGoalSeek
|
|
{
|
|
private readonly NSIBBruttoGrColumn _NSIBBruttoGrColumn;
|
|
private readonly NSIBExpensesColumn _NSIBExpensesColumn;
|
|
|
|
public CashflowNSIBColumn(int count, DateTempColumn dateTempColumn,
|
|
NSIBBruttoGrColumn nsibBruttoGrColumn, NSIBExpensesColumn nsibExpensesColumn) : base(count, dateTempColumn)
|
|
{
|
|
_NSIBBruttoGrColumn = nsibBruttoGrColumn;
|
|
_NSIBExpensesColumn = nsibExpensesColumn;
|
|
}
|
|
|
|
public override decimal Calculate(decimal inputVariable)
|
|
{
|
|
FillValues(inputVariable);
|
|
return Convert.ToDecimal(IRR);
|
|
}
|
|
|
|
protected override void FillValues(decimal x)
|
|
{
|
|
Values[1] = _NSIBBruttoGrColumn.Values[1] - x;
|
|
for (var i = 2; i < Values.Length; i++)
|
|
Values[i] = _NSIBBruttoGrColumn.Values[i] -
|
|
x * _NSIBExpensesColumn.Values[i] / _NSIBExpensesColumn.Values[1];
|
|
}
|
|
|
|
public override void ComputeValues(decimal requiredValue)
|
|
{
|
|
var goalSeek = new GoalSeek(this);
|
|
goalSeek.SeekResult(requiredValue,
|
|
new GoalSeekOptions(
|
|
startingStabPoint: Convert.ToDecimal(_NSIBBruttoGrColumn.Values[0] / 2)
|
|
, tineExplorePercentage: 10
|
|
// , maximumAttempts: 10000
|
|
// , initialTineSpacing: 1
|
|
// , focusPercentage: 100
|
|
// , trimFinalInputValue: true
|
|
));
|
|
}
|
|
}
|
|
} |