用Octave里的匿名函数计算溶液的量

其实不算「科学研究」,就是中学化学的水平😂,有人问到了,就算了一下。

问题描述:欲将5.0 × 10−2 M的储备溶液稀释成5.0 × 10−4、1.0 × 10−3、1.5 × 10−3、2.0 × 10−3、2.5 × 10−3、3.0 × 10−3、3.5 × 10−3、4.0 × 10−3 M的溶液,现在已经有若干个装有50 mL蒸馏水的烧杯,请问需要分别加入多少毫升储备溶液才能得到相应的浓度的溶液。注意:溶液为稀溶液,溶剂都是水。

思路

因为$c_1 \times V_1 = c_2 \times V_2$,则

$$ V_1 = \frac{c_2}{c_1} \times V_2 = \frac{c_2}{c_1} \times (50 + V_1) $$

上式等价于

$$ V_1 - 50 \times \frac{c_2}{c_1} = \frac{c_2}{c_1} \times V_1 $$

$$ V_1 = \frac{50 \times \frac{c_2}{c_1}}{1 - \frac{c_2}{c_1}} $$

将$\frac{c_2}{c_1}$带入就可以求得相应的$V_1$了。

编程解决

这里我可以用Octave里的匿名函数在一行内写出来(其实啰嗦半天就为了引出这一行代码)。

1
(@(x) (50 .* x)./(1 - x)) ([5:5:40] * 1E-4 / 5E-2)

后来我又化简了一下,发现不用这种方式也可以直接求得,代码是

1
50*(1 ./ (1 - [5:5:40] * 1E-4 ./ 5E-2) - 1)

这个留给聪明的读者去化简罢。