vba中的第二类斯特林数

vba中的第二类斯特林数,vba,excel,numbers,Vba,Excel,Numbers,我在VBA中创建了一个代码来计算第二类斯特林数的组合数量。但在下面的示例中,只有一半的值是正确的 如果n等于4,则结果应为1,7,6,1。( 我得到1,7,6.5,4.16 Sub stirlingerzahlen() Dim n As Integer Dim sum As Double Dim subsum As Double Dim k As Long Dim j As Long n = 4 For k = 1 To n Step 1 For j = 0 To k Step 1

我在VBA中创建了一个代码来计算第二类斯特林数的组合数量。但在下面的示例中,只有一半的值是正确的


如果n等于4,则结果应为1,7,6,1。(

我得到1,7,6.5,4.16

Sub stirlingerzahlen()
Dim n As Integer
Dim sum As Double
Dim subsum As Double
Dim k As Long
Dim j As Long
n = 4

For k = 1 To n Step 1
    For j = 0 To k Step 1
       subsum = 1 / Application.WorksheetFunction.Fact(k) * (-1) ^ (k - j) * Application.WorksheetFunction.Fact(k) / Application.WorksheetFunction.Fact(j) * j ^ n
        sum = sum + subsum
    Next
    Sheets("Tabelle2").Cells(k, 1) = sum
    sum = 0
Next
End Sub

有人能找到错误吗?

这个公式还有另一个版本,似乎更容易实现:

(第13页)

下面是更新后的代码:

Sub stirlingerzahlen()
Dim n As Integer
Dim sum As Double
Dim subsum As Double
Dim k As Long
Dim j As Long
n = 4

For k = 1 To n Step 1
    For j = 0 To k
        subsum = (((-1) ^ (k - j)) * ((j ^ n) / (Application.WorksheetFunction.Fact(j) * Application.WorksheetFunction.Fact(k - j))))
        sum = sum + subsum
    Next
    Sheets("Tabelle2").Cells(k, 1) = sum
    sum = 0
Next

End Sub

你的二项式系数计算不正确。另外,请小心,你可以用整数算法来计算。谢谢你的回答。我不是真的喜欢数学或编码。我想解决一个物流问题。一种方法如何继续或如何修改我的代码将是伟大的。非常感谢。它工作得很好。你知道如何开始我的代码吗f我想计算所有组合并在excel中显示它们。例如:{ a、 b,c}{d }; { a、 b,d}{c }; {a,b}{c,d}?看看下面的答案:迈克尔·奥尔洛夫的论文描述了如何为此编写算法。还有一个指向java类“SpecialPartitionGenerator”的链接这正是您所需要的。只要试着理解它,然后您就可以轻松地将其转换为VBA。如果您遇到任何问题,只需打开一个新问题。PS:如果您将我的答案标记为“已接受”,因为它对您有效;-)这两个答案对我有很大帮助。我会问一个新的问题,如何把C++转换成VBA,因为我不喜欢这种语言。小心!上面给出的公式如果用整数(Lead)分区来实现它会得到不正确的结果。请看一个使用整数数学的公式。一个等价的公式是。(将这些公式中的k!除数保持在总和之外很重要。)