0

首先,让我向你们展示有问题的方程式。

节能灯方程

在这个等式中,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 都在它们之前值的一定百分比范围内。我以为用这种方法会达到某种平衡

然而,数字只是变得疯狂,最终要么变为零,要么变无穷大。所以我需要重新设计我的流程。你们是从哪里进来的!

假设您获得了除 k 之外的每个变量的值,您将如何找到 D 和 k 的最理想值,这将导致计算出的 CFL 最接近测量值?请记住,最初给出的 D 值只是一个开始工作的起点,并不是最理想的值。

我已经在这个程序上工作了很长时间(至少一个月),我只是陷入了地狱和绝望。我希望你们能帮助我。

以下是一些可以使用的初始值:

S = 19.634954

V = 12.271846

D(初始)= 0.01016482

CFL(测量)= 0.401

t = 4

k = ?

感谢您提出任何想法。

4

2 回答 2

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))

D7 或 E7 中没有任何内容

在第 8 行: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 倍,以提供更高的精度。

这绝不是解决问题的最佳方法,但它是一种方法。

于 2013-05-28T21:07:44.890 回答
1

正如 Dean 所说,您的系统有两个未知数,并且在一般情况下有无限数量的解决方案(不同的 对(D,k))。通过固定D,CFL是 的连续函数k,因此,您应该能够找到一个k给出CFL您测量的值(在一定精度内)。对于这个问题(即,找到k给定CFL的 ),您可以使用Goal Seek工具。方法如下:

1)问题设置:使用变量的名称来命名您输入其值的单元格(转到公式-> 定义的名称-> 定义名称并将每个变量的名称指定给单元格)。然后在这些单元格中输入您的参数值(给定k一个任意值,例如= 1),然后在单元格中输入公式,CFL例如: =(S/V)*SQRT(D/k)*(ERF(SQRT(k*t))+SQRT(k*t/PI())*EXP(-k*t)) 再次注意S,V,D,kt被定义为命名范围。

2)问题解决方案:转到数据->数据工具->假设分析->目标搜索并输入以下参数:设置单元格:CFL 到值: 0.401 通过更改单元格:k

这给了我k=0.151759378,结果CFL = 0.401261265054823

在此处输入图像描述

我希望这有帮助?

编辑:使用 VBA 查找一些解决方案对:

1) 将测量CFL值放在一个单元格中(我选择了H2)。

2) 替换命名范围k,DCFL. 我从第 2 行到第 20 行使用rngK,rngD和, 每一个。rngCFL

rngD3)使用公式填写一个步骤(我取0.01) =INDEX(rngD,ROW()-ROW($C$2))+0.01。的第一个条目rngD在单元格C2中,值为0.01016482。该公式被复制到该区域中的所有其他单元格。

4)填写rngK一些初始值(我拿了=1)。

rngCFL5)用公式填写范围=(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()andINDEX() 函数来引用Range我需要的元素。

6)最后,在一个子中使用此代码:

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值。

于 2013-05-29T01:00:05.220 回答