尝试从有点复杂的公式创建动态数组,但不断随机收到#N/A错误。
由于某种原因,方程的 y 值不喜欢它。
实际上,第一个实例中的
#N/A
表示在左侧的粒径表中找不到 0.57,尽管已明确列出。
要模仿的数据:
表1:
粒径δ(μm) | 机载(δ) (kg/s) | γ(δ) |
---|---|---|
0.00 | 0 | 0.000555556 |
0.19 | 2.33195E-15 | 0.000556338 |
0.38 | 5.3411E-15 | 0.000558686 |
0.57 | 7.49672E-15 | 0.000562599 |
0.76 | 8.93319E-15 | 0.000568078 |
0.95 | 9.85973E-15 | 0.000575121 |
1.14 | 1.04323E-14 | 0.00058373 |
1.33 | 1.07581E-14 | 0.000593905 |
1.52 | 1.09105E-14 | 0.000605644 |
1.71 | 1.09403E-14 | 0.000618949 |
1.90 | 1.0883E-14 | 0.000633819 |
2.09 | 1.07639E-14 | 0.000650254 |
输入参数:
喷雾持续时间(分钟) |
---|
11.1 |
有问题的公式:
=MAKEARRAY(10,11,LAMBDA(x,y,IF(x*7.8 <= InputParameters[[Spray Duration (minutes)]:[Spray Duration (minutes)]] * 60,
XLOOKUP(y*0.19, Table1[[Particle Diameter δ (μm)]:[Particle Diameter δ (μm)]], Table1[[Rairborne(δ) (kg/s)]:[Rairborne(δ) (kg/s)]]) *
(1 - EXP(-XLOOKUP(y*0.19, Table1[[Particle Diameter δ (μm)]:[Particle Diameter δ (μm)]], Table1[[γ(δ)]:[γ(δ)]]) * x*7.8)) /
XLOOKUP(y*0.19, Table1[[Particle Diameter δ (μm)]:[Particle Diameter δ (μm)]], Table1[[γ(δ)]:[γ(δ)]]),
XLOOKUP(y*0.19, Table1[[Particle Diameter δ (μm)]:[Particle Diameter δ (μm)]], Table1[[Rairborne(δ) (kg/s)]:[Rairborne(δ) (kg/s)]]) /
XLOOKUP(y*0.19, Table1[[Particle Diameter δ (μm)]:[Particle Diameter δ (μm)]], Table1[[γ(δ)]:[γ(δ)]]) *
(1 - EXP(-XLOOKUP(y*0.19, Table1[[Particle Diameter δ (μm)]:[Particle Diameter δ (μm)]], Table1[[γ(δ)]:[γ(δ)]]) * (InputParameters[[Spray Duration (minutes)]:[Spray Duration (minutes)]] * 60))) *
EXP(-XLOOKUP(y*0.19, Table1[[Particle Diameter δ (μm)]:[Particle Diameter δ (μm)]], Table1[[γ(δ)]:[γ(δ)]]) * (x*7.8 - (InputParameters[[Spray Duration (minutes)]:[Spray Duration (minutes)]] * 60)))
)))
正确数据(使用长公式并拖动时)(颗粒大小在顶部,时间在 LHS 下方):
| TIME (s) | 0 | 0.19 | 0.38 | 0.57 | 0.76 | 0.95 |
|----------|---------|---------|---------|---------|---------|---------|
| 0 | 0.00E+00| 0.00E+00| 0.00E+00| 0.00E+00| 0.00E+00| 0.00E+00|
| 7.80 | 0.00E+00| 1.81E-14| 4.16E-14| 5.83E-14| 6.95E-14| 7.67E-14|
| 15.60 | 0.00E+00| 3.62E-14| 8.30E-14| 1.16E-13| 1.39E-13| 1.53E-13|
| 23.40 | 0.00E+00| 5.42E-14| 1.24E-13| 1.74E-13| 2.08E-13| 2.29E-13|
| 31.20 | 0.00E+00| 7.21E-14| 1.65E-13| 2.32E-13| 2.76E-13| 3.05E-13|
| 39.00 | 0.00E+00| 9.00E-14| 2.06E-13| 2.89E-13| 3.45E-13| 3.80E-13|
| 46.80 | 0.00E+00| 1.08E-13| 2.47E-13| 3.46E-13| 4.13E-13| 4.55E-13|
| 54.60 | 0.00E+00| 1.25E-13| 2.87E-13| 4.03E-13| 4.80E-13| 5.30E-13|
| 62.40 | 0.00E+00| 1.43E-13| 3.28E-13| 4.60E-13| 5.48E-13| 6.04E-13|
| 70.20 | 0.00E+00| 1.61E-13| 3.68E-13| 5.16E-13| 6.15E-13| 6.78E-13|
| 78.00 | 0.00E+00| 1.78E-13| 4.08E-13| 5.72E-13| 6.82E-13| 7.52E-13|
| 85.80 | 0.00E+00| 1.95E-13| 4.47E-13| 6.28E-13| 7.48E-13| 8.25E-13|
出于某种原因,它似乎认为这是代码,并且不会让我提交,除非格式化为代码,尽管使用了 markdown
图像中的工作簿链接:
https://1drv.ms/x/s!AsrLaUgt0KCLxXOWIrFQWEaQoxky?e=vnORUu
更新1添加&"":
更新2 添加 TRUE 并设置 y*0.19 到数组
对于这样的公式,通常最好删除冗余,以便您可以更轻松地了解发生了什么。
这似乎有效:
=MAKEARRAY(
10,
11,
LAMBDA(x, y,
LET(
columnLookup, ROUND(y * 0.19, 2),
particleDiameter, ROUND(Table1[Particle Diameter δ (μm)], 2),
sprayDuration, TAKE(InputParameters[Spray Duration (minutes)], 1, 1),
gammaOfDelta, XLOOKUP(columnLookup, particleDiameter, Table1[γ(δ)]),
rairBorne, XLOOKUP(columnLookup, particleDiameter, Table1[Rairborne(δ) (kg/s)]),
IF(
x * 7.8 <= sprayDuration * 60,
rairBorne * (1 - EXP(-gammaOfDelta * x * 7.8)) / gammaOfDelta,
rairBorne / gammaOfDelta * (1 - EXP(-gammaOfDelta * (sprayDuration * 60))) *
EXP(-gammaOfDelta * (x * 7.8 - (sprayDuration * 60)))
)
)
)
顺便说一句,MAKEARRAY 是一个缓慢的函数。如果可以的话,最好使用 SEQUENCE,所以在我的版本中,我使用 SEQUENCE 作为行和列标题:
=SEQUENCE(11,,7.8,7.8)
=SEQUENCE(,11,0.19,0.19)
这与浮点计算有关:https://spreadsheetweb.com/floating-point-calculation-issues-excel/
解决方法可以是使用引用单元格的索引,而不是计算这些值:
=MAKEARRAY(10,11,LAMBDA(x,y,IF(x*7.8<=Table2[Spray Duration (minutes)] * 60,XLOOKUP(INDEX(J4:T4,,y), Table1[[Particle Diameter δ (μm)]:[Particle Diameter δ (μm)]], Table1[[Rairborne(δ) (kg/s)]:[Rairborne(δ) (kg/s)]]) * (1 - EXP(-XLOOKUP(INDEX(J4:T4,,y), Table1[[Particle Diameter δ (μm)]:[Particle Diameter δ (μm)]], Table1[[γ(δ)]:[γ(δ)]]) * x*7.8)) / XLOOKUP(INDEX(J4:T4,,y), Table1[[Particle Diameter δ (μm)]:[Particle Diameter δ (μm)]], Table1[[γ(δ)]:[γ(δ)]]),XLOOKUP(INDEX(J4:T4,,y), Table1[[Particle Diameter δ (μm)]:[Particle Diameter δ (μm)]], Table1[[Rairborne(δ) (kg/s)]:[Rairborne(δ) (kg/s)]]) / XLOOKUP(INDEX(J4:T4,,y), Table1[[Particle Diameter δ (μm)]:[Particle Diameter δ (μm)]], Table1[[γ(δ)]:[γ(δ)]]) * (1 - EXP(-XLOOKUP(INDEX(J4:T4,,y), Table1[[Particle Diameter δ (μm)]:[Particle Diameter δ (μm)]], Table1[[γ(δ)]:[γ(δ)]]) * (Table2[Spray Duration (minutes)]* 60))) * EXP(-XLOOKUP(INDEX(J4:T4,,y), Table1[[Particle Diameter δ (μm)]:[Particle Diameter δ (μm)]], Table1[[γ(δ)]:[γ(δ)]]) * (x*7.8 - (Table2[Spray Duration (minutes)] * 60))))))
(我使用Table2,因为在应用程序版本中我无法更改表的名称)。