首先,让我告诉大家相关的等式。
在该等式中,S,V和t是已知常数。 CFL也是众所周知的。我们有D的初始值,我们不知道k是什么。
我需要做的是找到D和k的理想值,这将使计算的CFL和测量的CFL的残差平方最小化。使用残差平方只是我检查它们是否是最佳值的一种方法,但是如果还有另一种方法可以使用其他方法,那就没问题。
残差平方只是计算和测量的CFL之间差值的绝对值,然后是平方。残差平方越低,我们的拟合越好。所以我需要将k和D都放入等式中得到的最小残差平方。这将导致计算出的CFL,然后我可以将其与测量的CFL进行比较,从而允许我计算残差平方。
我的第一个想法是如何做到这一点,因为我不确定如何使用Excel方程式,是为了修正D的值(因为我们有一个初始起始值来工作),然后通过不同的值来改变k,将它们放入等式中以找到计算的CFL,并将其与测量结果进行比较以找到残差平方,直到我找到一个残差平方最小的结果。然后我将k固定在理想值,然后改变D直到我找到那里最小的残差。然后我再次修复D,然后回到变化的k。我的想法是,我可以像往常一样来回反复,直到D和k都在他们先前值的某个百分比之内。我认为它会与这种方法达到某种平衡
然而,这些数字只是变得疯狂,最终要么变为零,要么变为无穷大。所以我需要重新修改我的过程。这是你们进来的地方!
你会如何为D和k找到最理想的值,这会导致计算出的CFL最接近测量值,假设你给出的每个变量的值都高于k?请记住,最初给出的D值只是起作用的起点,而不是最理想的值。
我一直在研究这个项目很长一段时间(至少一个月),我只是陷入了地狱和绝望的境地。我希望你们能帮助我。
以下是一些可以使用的初始值:
S = 19.634954
V = 12.271846
D(初始)= 0.01016482
CFL(测量)= 0.401
t = 4
k =?
感谢您提出任何想法。
答案 0 :(得分:1)
在1公式系统中无法解决两个未知变量。但是,如果我按照给定的D那么你有1个未知/ 1公式系统。
我只是简单地使用1列作为k的猜测(对于我的列B
。我使用了另一列来表示计算出的CFL
,其中包含猜测的k(对于我的列C
我有另一个列有1或-1(对于我的列D
)。最后我有一个列,表示我想增加猜测的绝对值。
我使用给定的变量值命名单元格,以便更容易使用它们。
我开始猜测k=1
。
这是我的第一行中的公式,即7。
B7 = .1
C7 =(s/v)*(d/B7)^0.5*(ERF(((B7*t)^0.5))+((B7*t)/PI())^0.5*EXP(-1*B7*t))
:
B8 = B7+E8+D8
C8 = =(s/v)*(d/B8)^0.5*(ERF(((B8*t)^0.5))+((B8*t)/PI())^0.5*EXP(-1*B8*t))
D8 = 1
E8 = .01
在第9行中,B和C列只是向下复制,但D和E如下所示
D9 = =IF(C9>cfl,1,-1)
E9 = =IF(D9=D8,E8,E8/10)
一旦你获得了这些,你可以复制你想要的许多行。
这样做的每次CFL开关的残余标志时,增量符号也会翻转。此外,增量的绝对值也将缩小10倍,以提供更高的精度。
这绝不是解决问题的最佳方法,但这是一种方式。
答案 1 :(得分:1)
正如Dean所说,你的系统有两个未知数,一般情况下有无数个解(不同的(D,k)
对)。通过修正D
,CFL
是k
的连续函数,因此,您应该能够找到一个k
,其中包含您测量的CFL
(在某种程度上准确)。对于此问题(即,找到k
给定CFL
),您可以使用目标搜索工具。方法如下:
1)问题设置:
使用变量名称来命名输入其值的单元格(转到公式 - >定义名称 - >定义名称,并将每个变量的名称提供给单元格)。然后在这些单元格中输入参数的值(给k
一个任意值,例如= 1
),并在单元格CFL
中输入公式,如:
=(S/V)*SQRT(D/k)*(ERF(SQRT(k*t))+SQRT(k*t/PI())*EXP(-k*t))
再次注意,S,V,D,k
和t
被定义为命名范围。
2)问题解决方案:
转到数据 - >数据工具 - >假设分析 - >目标寻求并输入以下参数:
设置单元格:CFL
价值:0.401
通过更改单元格:k
这给了我k=0.151759378
,结果为CFL = 0.401261265054823
。
我希望这有帮助吗?
编辑:使用VBA查找一些解决方案对:
1)将测量的CFL
值放在单元格中(我选择H2
)。
2)替换命名范围k
,D
和CFL
。我使用了rngK
,rngD
和rngCFL
,每个都从第2行开始直到第20行。
3)使用公式rngD
向下填充=INDEX(rngD,ROW()-ROW($C$2))+0.01
一步(我用0.01)。 rngD
的第一个条目位于单元格C2
中,其值为0.01016482
。公式将被复制到范围内的所有其他单元格。
4)使用一些初始值(rngK
)填写=1
。
5)使用公式rngCFL
填写=(S/V)*SQRT(INDEX(rngD,ROW()-ROW($G$1))/INDEX(rngK,ROW()-ROW($G$1)))*(ERF(SQRT(INDEX(rngK,ROW()-ROW($G$1))*t))+SQRT(INDEX(rngK,ROW()-ROW($G$1))*t/PI())*EXP(-INDEX(rngK,ROW()-ROW($G$1))*t))
范围。我使用ROW()
和INDEX()
函数来引用我需要的Range
元素。
6)最后,在sub:
中使用此代码Dim iCnt As Long
For iCnt = 1 To Range("rngk").Count
Range("rngCFL")(iCnt).GoalSeek goal:=Range("H2"), changingCell:=Range("rngK")(iCnt)
Next iCnt
上面会生成19对(D,k)
,它们会给出测量的CFL
值。