我们平时用表格,习惯的方向是"从条件推结果"。
比如你知道贷款本金、利率、年数,让它算出月供。或者你知道单价和数量,让它算出总额。这些都是"给条件,求结果"。
而"反着算"是另一个方向:我先说我想要的结果,你帮我求条件。
比如:我希望月供不超过五千,那最多能贷多少?我希望这批货的利润达到二十万,那售价该定多少?我希望这个配方里某个成分不超过百分之五,同时成本还要最低——这些参数该怎么配?
这一类问题,靠"调参数试"也能做,但你得手动试很多次。而表格里有专门的功能来做这件事,它们被放在一起,统称"模拟分析"。
下面把这几档分开说。而分清它们的关键只有一个:你要反推几个变量。
第一档:单变量求解(一个变量)
这是最常用也最简单的一个,名字叫"单变量求解"。
它的设定是这样的:你指定一个目标格子,让它达到某个值;同时指定一个可变格子,让它去调整这个格子的值,直到目标达成。
也就是说:一个目标、一个变量。
但这里有一个硬前提,也是它失败的头号原因。
那个目标格子,必须是一个"算出来的"格子——也就是说,它里面得是公式,而且这个公式要依赖你那个可变的格子。
换句话说,你得先搭好一条链:变量格子 → 中间计算 → 目标格子。目标格子的值是从变量格子一路算出来的。
如果那个目标格子是你手输的一个数字,那它不是"算出来的",它就只是个数。这种情况下你让它去"反推",它无从下手——因为改别的格子,这个数根本不会变。
很多人第一次用失败,就是栽在这里。 他觉得"我明明把目标和变量都指对了",但目标格是个死数字,那就没戏。
所以用之前先自查一句:我改那个变量格,目标格会跟着变吗? 会,才有戏。
再说它的原理,这一点值得知道。
它不是"解"出来的,是"试"出来的。
它的做法是:先猜一个变量的值,算一遍,看离目标差多少;然后根据差距调整,再算一遍;这样反复逼近,直到误差小到可以接受。
这个原理带来两个很实际的后果。
第一个,它的结果通常是近似值,不是精确值。
因为它是在逼近,所以最后停下来的时候,往往是"足够接近"而不是"正好等于"。多数时候这个精度完全够用,但你心里要知道它不是精确解。
第二个,如果这道题没有解,它会告诉你找不到。
比如你要求"售价是负数的时候利润达到一百万",那它试来试去也达不到,最后会报一个找不到解的结果。
遇到这种情况,先别怀疑功能坏了——很可能是你要求的那个目标,在这个模型的规则下压根达不到。
具体怎么用?
一般是在"数据"或者"模拟分析"这一类的位置,找到"单变量求解"。打开之后是一个小对话框,三个空格:目标单元格、目标值、可变单元格。
填进去,点确定,它就开始试。试完会告诉你找到了一个解,并问你要不要保留。你可以先不保留,看看那个变量变成了多少,心里有数了再决定。
至于它在你的版本里到底叫什么、放在哪一栏,各个版本不太一样,所以我不给准确的路径。你去找带"求解"字样的功能就行——这一类功能的名字通常比较直白。
第二档:规划求解(多个变量 + 约束)
如果单变量求解不够用,那就是因为你的问题不止一个变量。
比如:我有三种原料,各自的用量都能调,目标是把成本压到最低,同时要满足几项指标的下限。这种问题,单变量求解做不了——因为它只能调一个格子。
这时候需要的是"规划求解"。
它的设定比单变量求解多两块,一共三样:
一是目标单元格。 你要最大化、最小化、还是让它等于某个值。
二是可变单元格。 也就是允许它调整的那些格子,可以是一整片区域。
三是约束条件。 也就是"哪些线不能越"。比如某个原料不超过多少、某个指标不低于多少、某些格子必须是整数。
这三样加起来,它的任务就是:在满足所有约束的前提下,让目标达到最好。
这个能力和单变量求解不在一个量级上。前者是"调一个数凑一个目标",后者是"在多条限制下找最优解"。
不过有两件事要提醒。
一个是它可能不在默认菜单里。
这类功能在很多软件里是做成了可选的附加组件,要先在加载项或者类似的设置里启用,才会出现在菜单上。所以如果你找不到它,先去看看是不是需要启用。
另一个是它在 WPS 里的可用性,我没有核实到统一的口径。
各版本、各权益下提供的功能不完全一样,所以我不下结论。你去那一栏看一眼有没有"规划求解"之类的字样,那是最准的。
顺带说清:"模拟分析"不是某一个功能
讲完这两档,还有一个容易混的地方值得说清。
"模拟分析"通常不是某一个具体功能的名字,它是这一整类功能的总称。
在它的栏目底下,一般会放着这样几样东西:单变量求解、模拟运算表、方案管理器。
它们的分工大致是这样。
单变量求解:反推一个变量,让目标达到某个值。就是我们上面讲的第一档。
模拟运算表:不反推,而是"一次看很多种情况"。比如利率从百分之三到百分之六、每一步零点五,每种情况下月供是多少——它一次给你一张表。
方案管理器:把几组不同的参数存成几个"方案",然后一键切换对比。比如"保守方案""激进方案"各存一组,随时切着看。
所以这一栏的定位是:帮你回答"如果……会怎样"这一类问题。
而"反着算"(单变量求解)只是其中一种——它是"如果我要这个结果,条件该是什么"。另外两种是"如果条件是这样,结果会怎样"以及"如果换个方案,差别有多大"。
把这一层分清,你就不会在找不到某个功能的时候以为软件没有,而只是它换了个名字或者归到了别的类里。
几个真实的用法
说说这套东西能解决什么实际问题。
第一个是贷款。 我在讲月供财务函数的那篇里说过怎么用公式算月供。而反过来问——"我希望月供不超过五千,最多贷多少"——这就是单变量求解的活。你把月供那一格设成目标,把贷款本金设成可变格,让它去试。
第二个是定价。 你的成本已知、抽成比例已知,想达到某个利润额,售价该定多少。这也是一个目标、一个变量的典型题。
第三个是配比。 几种原料混在一起,各自比例能调,同时要满足若干项指标和成本上限,求最优组合。这就得上规划求解了,因为它有多个变量和多条约束。
这三类问题的共性是:你心里先有一个"想要的结果",而达到它的路径不唯一或者不直观。这种时候,靠手调参数试会很慢,而让它自己试就快得多。
它只负责找数,不负责判断合不合理
讲完用法,还得说一个我认为最重要的认知,它关系到你会不会被自己的表骗到。
这类功能不会检查你的模型对不对。它只是在你的模型里找解。
这句话的意思是:如果你某个公式写错了、或者漏了一个环节,它会认认真真地给你一个"基于错误模型的正确答案"。
而这比算不出来更危险——因为算不出来你会知道出了问题,而算出一个数你却不会怀疑。
举个具体的例子。你做规划求解的时候,约束里漏了一条"某个量不能为负"。那它可能会给你一个数学上完全成立的解,比如"售价是负两百元"。因为它只知道"在给定的几条限制下,这个组合让目标最优",它不知道售价不能是负的——你没告诉它。
所以用这类功能,正确的顺序是这样三步。
第一步,先手动试几个值。
不要一上来就打开求解。先自己改变量格,看目标格会不会跟着变、变的方向对不对。
比如你把利率调高一点,月供是不是变大了?如果方向反了,或者压根不动,那说明你的公式链有问题,先修公式。
这一步花五分钟,但它能验证"链是通的、方向是对的"。 而这两件事不成立的话,后面试出来的结果一定是错的。
第二步,再启动求解。
这时候你至少知道,它是在一个正确的模型里找解。
第三步,拿到结果之后手动验算一遍。
把它给出的那个变量值填回去,看目标格是不是真的达到了你要的数。这一步是最后一道关,而它几乎不需要时间。
把这三步合起来,其实是一句话:"反着算"的功能只负责找数,不负责判断这个数合不合理。合理性永远是你自己的活。
它是个很好用的工具,但它没有常识。而"没有常识"这件事,恰恰是它算得又快又准的原因——它不会像人一样看到"售价负两百"就停下来。
几个常见的坑
第一个坑,是目标格不是公式。它是手输的数字,那就没法反推。这是失败的头号原因。
第二个坑,是以为单变量求解给的是精确解。它靠反复逼近,所以是近似值。
第三个坑,是遇到"找不到解"就以为功能坏了。多半是你设的目标在这个模型下达不到。
第四个坑,是拿单变量求解去解多个变量的问题。它只能调一个格子,多变量得用规划求解。
第五个坑,是找不到规划求解就以为软件没有。它可能需要先启用,也可能在你那个版本里没提供。
最后
如果只用三句话记住这篇,我希望是这三句。
"反着算"就是给出你想要的结果,让它倒推条件。这件事分两档:只有一个变量的,用单变量求解;有多个变量还带限制的,用规划求解。它们和"模拟运算表""方案管理器"一起,归在"模拟分析"这一栏底下。
而它失败的原因九成只有一个:那个目标格不是算出来的。必须是公式,而且得依赖你要调的那个格子。用之前自查一句就够了——我改那个变量格,目标格会跟着变吗?
最后要知道它的脾气:它是"试"出来的,不是"解"出来的。所以结果是个足够接近的近似值,而如果目标压根达不到,它会告诉你找不到。那不是坏了,那是这道题没有解。