【发布时间】:2010-11-26 10:10:54
【问题描述】:
有人有这个算法的代码吗?任何基于 C 的编程语言都可以,但我更喜欢 C#。
我可以尝试实现它,但我确定我不是第一个......
编辑:这不是家庭作业,这是一个“给我密码”的问题:D 我只是不想重新发明轮子
【问题讨论】:
-
我不明白这个问题有什么问题。
有人有这个算法的代码吗?任何基于 C 的编程语言都可以,但我更喜欢 C#。
我可以尝试实现它,但我确定我不是第一个......
编辑:这不是家庭作业,这是一个“给我密码”的问题:D 我只是不想重新发明轮子
【问题讨论】:
GoalSeek 最有可能使用Bisection method
数学中的二分法是一种求根法 反复平分一个区间,然后选择一个子区间 根必须存在以进行进一步处理。这是一个非常简单和健壮的 方法,但也比较慢。正因为如此,往往 用于获得一个解决方案的粗略近似值,然后使用 作为更快收敛方法的起点。1该方法 也叫区间减半法,2二分查找 方法,[3]或二分法。[4]
我在这里找到了一个 C# 实现:Bisection-based XIRR implementation in C#
【讨论】:
看看:
https://www.nuget.org/packages/TridentGoalSeek/
您的算法需要实现 IGoalSeekAlgorithm 接口。 那么用法如下:
var myAlgorithm = new MyAlgorithm(90463.45M, 200);
var goalSeeker = new GoalSeek(myAlgorithm);
var seekResult = goalSeeker.SeekResult(96178.21M);
【讨论】:
试试https://www.nuget.org/packages/Budoom.GoalSeek/
示例用法:
var sc = new SomeCalculation(); //implements interface Budoom.IGoalSeek
var goalSeek = new Budoom.GoalSeek(sc);
var goalSeekResult = goalSeek.TrySeek();
或者使用静态方法并将计算函数传递给它,像这样:
var goalSeekResult = Budoom.GoalSeek.TrySeek(Calculate);
【讨论】: