我试图通过改变 F1 中的 De 值来最小化残差平方和的值。我希望 CFL Calculated 的值尽可能接近 CFL Measured 的值。这些残差的平方和越小,拟合越好!在向 stackoverflow 征求一些建议后,我决定使用 Goal Seek 来最小化残差平方和,通过改变 De 的值来尽可能接近零,我想找到最理想的值。
=SUM(D2:D14)
我让这个程序完美运行,或者我想......我发现我不小心使用,而不是使用 对每个残差求和=SUM(D2,D14)
。所以我只是总结了第一个和最后一个数字。
现在我试图对每个残差求和,我得到了这些疯狂的错误,以及一个疯狂的 De 值。
我知道 De 的值必须大于零且小于一。我如何使用这些界限将这个目标寻求集中在一定范围内?在这种情况下,De 的答案约为 0.012,如果有帮助的话。我不断收到#NUM!
所有剩余单元格中的错误。这是因为溢出问题吗?
如果你已经得出结论,使用 Goal Seek 通过找到最理想的 De 值来最小化这些总和是行不通的,你会怎么做?还有其他我可以使用的求解器吗?
这是代码:
Option Explicit
Dim Counter As Long
Dim DeSimpleFinal As Double
Dim simpletime As Variant
Dim Tracker As Double
Dim StepAmount As Double
Dim Volume As Double
Dim SurfArea As Double
Dim pi As Double
Dim FinalTime As Variant
Dim i As Variant
Sub SimpleDeCalculationNEW()
'This is so you can have the data and the table I'm working with!
Counter = 13
Volume = 12.271846
SurfArea = 19.634954
pi = 4 * Atn(1)
Range("A1") = "Time(days)"
Range("B1") = "CFL(measured)"
Range("A2").Value = 0.083
Range("A3").Value = 0.292
Range("A4").Value = 1
Range("A5").Value = 2
Range("A6").Value = 3
Range("A7").Value = 4
Range("A8").Value = 5
Range("A9").Value = 6
Range("A10").Value = 7
Range("A11").Value = 8
Range("A12").Value = 9
Range("A13").Value = 10
Range("A14").Value = 11
Range("B2").Value = 0.0612
Range("B3").Value = 0.119
Range("B4").Value = 0.223
Range("B5").Value = 0.306
Range("B6").Value = 0.361
Range("B7").Value = 0.401
Range("B8").Value = 0.435
Range("B9").Value = 0.459
Range("B10").Value = 0.484
Range("B11").Value = 0.505
Range("B12").Value = 0.523
Range("B13").Value = 0.539
Range("B14").Value = 0.554
Range("H2").Value = Volume
Range("H1").Value = SurfArea
Range("C1") = "CFL Calculated"
Range("D1") = "Residual Squared"
Range("E1") = "De value"
Range("F1").Value = 0.1
'Inserting Equations
Range("C2") = "=((2 * $H$1) / $H$2) * SQRT(($F$1 * A2) / PI())"
Range("C2").Select
Selection.AutoFill Destination:=Range("C2:C" & Counter + 1), Type:=xlFillDefault
Range("D2") = "=((ABS(B2-C2))^2)"
Range("D2").Select
Selection.AutoFill Destination:=Range("D2:D" & Counter + 1), Type:=xlFillDefault
'Summing up the residuals squared
Range("D" & Counter + 2) = "=Sum(D2: D" & Counter + 1 & ")"
'Goal Seek
Range("D" & Counter + 2).GoalSeek Goal:=0, ChangingCell:=Range("F1")
Columns("A:Z").EntireColumn.EntireColumn.AutoFit
DeSimpleFinal = Range("F1")
MsgBox ("The Final Value for DeSimple is: " & DeSimpleFinal)
End Sub