F1 にある De の値を変えることで、残差の二乗和の値を最小化しようとしています。CFL Calculated の値を CFL Measured の値にできるだけ近づけたいと考えています。これらの残差の二乗の合計が小さいほど、適合度が高くなります! stackoverflow にアドバイスを求めた後、ゴール シークを使用して残差の二乗和を最小化し、De の値を変化させてできるだけゼロに近づけることにしました。最も理想的な値を見つけたいのです。
私はこのプログラムを完全に実行するようにしました、またはそう思った... を使用してすべての残差を合計する代わりに=SUM(D2:D14)
、誤って を使用したことがわかりました=SUM(D2,D14)
。そのため、最初と最後の数字だけを合計していました。
すべての残差の二乗を合計しようとしているので、これらのクレイジーなエラーと De の非常識な値が得られます。
De の値が 0 より大きく、1 より小さい必要があることはわかっています。これらの境界を使用して、このゴールシークを特定の範囲内に集中させるにはどうすればよいですか? この場合の De の答えは、約 .012 です。#NUM!
すべての残りのセルでエラーが発生し続けます。これはオーバーフローの問題によるものですか?
ゴール シークを使用して 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