| 您现在的位置: Office学院 - Excel - 用Excel解决经典“鸡兔问题”的五种方法 |
用Excel解决经典“鸡兔问题”的五种方法 |
|
添加记录: 类别: Excel 发布日期: 2006.12.15
|
|
“鸡兔问题”是一道古典数学问题, 源自我国古代四、五世纪的数学著作《孙子算经》。 算经卷下第三十一题为:“今有雉、兔同笼, 上有三十五头, 下有九十四足。 问雉、兔各几何?”原著的解法为:“上署头, 下置足。 半其足, 以头除足, 以足除头, 即得。 ”具体解法即:分别列出总头数(35)和总足数(94), 总足数除以二, 再减去总头数(94÷2-35), 得到兔数为12, 总头数减去兔数35-12得到鸡数为23。
鸡兔问题本身并不难, 使用2元1次方程组的消元算法, 可以很快得到答案。 我们可以尝试着利用Excel提供的各种计算工具来进行计算, 不仅别有趣味, 而且还会加深对Excel功能的综合掌握, 对于讲授Excel的教师而言, 则是典型的一题多解的素材。
一、 利用IF函数试探求解
如图1, 创建一个二维表, 假设鸡数B2为要求解的单元格, 将鸡兔的总头数和脚数分别写入D2和D3单元格, 利用已知条件在其他单元格中写入公式:因兔头数=总头数-鸡头数, 故在C2单元格中写入=D2-B2;鸡脚数=鸡头数*2, 故B3单元格写入=B2*2;兔脚数=兔头数*4, 故C3单元格写入=C2*4。
接下来我们在任意其他单元格输入一个判断公式(本例中使用F1单元格), 公式内容为=IF(D3=B3+C3,"正解!",IF(D3>B3+C3,"高了","低了"))。 公式的本质是判断鸡脚数+兔脚数与总脚数之间的关系, 如果判断表达式D3=B3+C3结果为True, 就意味着我们已经得到了正确答案。
最后在B2中输入35以内的任意整数进行试探求解。 如果输入的数值高于正解, 判断单元格F1会提示“高了”, 若数值小于正解则提示“低了”, 用户根据提示再继续输入其他一个数字, 直到输入了正确答案23, F1单元格会显示“正解!”。
这种方法比较直观, 但是非常笨拙, 需要人工干预。 即使用户聪明地使用二分法试探, 也需要多次输入才能解决问题, 对于更庞大的问题, 这种解法几乎是不可行的。
图1 利用IF函数试验求解
二、使用模拟运算表, 让Excel自动给出答案
第一种方法存在的问题就是非常繁琐, 需要用户干预。 为了避免用户干预, 可以考虑将鸡兔问题转化为双变量模拟运算表, 将鸡数和兔数设置为两个变量。 具体做法是:
1. 先在A1:D2单元格中输入参考数据如下(图 2):
图2 参考数据
2. 创建一个二维模拟运算表的框架, 因为鸡的数目不会超过脚数/2, 即鸡最多为47只, 同理兔子数目不会超过94/4, 即兔最多为24只。 我们用第4行表示兔的数目, 用第C列表示鸡的数目。 在D4:AA4中填充1,2,3…24等数值, 在C5:C47中填充1,2,3…47, 参见图 4;
3. 在模拟运算表的左上方C4单元格中输入模拟运算表的公式:=IF(2*A2+4*B2=$C$2,IF(A2+B2=$D$2,"正解","X"),"X"), 公式中的$C$2和$D$2单元格为已知的总脚数和总头数, A2和B2将作为模拟运算表的两个变量;
4. 选中模拟运算表区域, 即C4:AA47区域, 然后选择“数据”菜单中的“模拟运算表”菜单项, 打开模拟运算表对话框(如图 3)。 在对话框中, 输入引用行的单元格为$A$2(即鸡数), 输入引用列的单元格为$B$2(即兔数), 单击“确定”按钮;
图 3 输入引用行和引用列的单元格
5. 在模拟运算表中会显示出计算结果, 在所有的运算表区域中, 只有Z16单元格中显示了“正确”两字, 其余单元格均为“X”, 表示Z16单元格为问题的正解, 查表可知, Z16单元格的兔数为12, 鸡数为23(如图 4)。
图 4 模拟运算表运算结果
这种使用模拟运算表的方法比较“另类”。 利用这种思路, 不仅可以求解多元一次方程组, 还可以求解多解问题。
三、使用规划求解, 将苦活抛给Excel
利用Excel的规划求解功能, 我们可以利用计算机高速计算的特性求解鸡兔问题。 如果用户的“工具”菜单中没有“规划求解”菜单项, 可以选择“工具”à“加载宏”, 在“加载宏”对话框中选中“规划求解”并按下“确定”(如图 5), 此后在“工具”菜单就可以看到“规划求解”功能了。
图 5 规划求解加载宏
新建一个工作表, 单元格B1为总脚数, 输入公式=2*B3+4*B4;B2为总头数, 输入公式=2*B3+4*B4, B3和B4单元格用于显示计算鸡数和兔数的结果, 暂时留空。 为求直观友好, 可分别在A1、A2、A3、A4单元格中输入文字提示:“总脚数”、“总头数”、“鸡数”和“兔数”。 如图 6所示。
图 6 规划求解表
然后选择“工具”菜单下的“规划求解”, 在“规划求解参数”对话框中, 设置目标单元格$B$1等于固定值94(即总脚数等于94), 将可变单元格设置为$B$3:$B$4, 即欲求解的鸡数B3和兔数B4。 在“约束”栏中, 添加三个约束条件:$B$2=35(即总头数等于35), $B$3和$B$4为整数, 如图 7所示。
图 7规划求解对话框
规划求解参数设置完毕后, 按下“求解”按钮, Excel很快地给出了正确答案:鸡数B3单元格为35, 兔数B4单元格为11.99999975。 求解结果中兔数为小数形式, 是规划求解过程中的计算误差。 因为本问题是二元一次方程组求解, 属于线性问题, 用户可以在规划求解参数对话框中按下“选项”按钮, 选中“采用线性模型”即可在计算结果中正确显示整数。
使用规划求解, 可以利用计算机高速计算的特点对复杂问题建模求解, 同样的思路也适合于解决多解的方程问题。
四、 利用矩阵函数, 线性代数思路解决问题
鸡兔问题是二元一次方程组, 可以利用线性代数方法进行求解。 根据题意列出二元一次方程组为:
其中x为鸡数, y为兔数。 根据方程组由线性代数方法可以列出如下两组矩阵A和矩阵B:
设所求矩阵为x, 则方程组转化为AX=B, 即
。
根据如上的数学分析, 我们可以利用Excel中矩阵函数的独特功能, 使用矩阵逆函数MINVERSE对矩阵A求逆, 然后利用矩阵乘函数MMULT对矩阵A的逆矩阵和B矩阵进行乘法运算, 得到的结果矩阵就是方程组的解。
具体做法如下(参见图 8):
1. 在A1:B2区域中输入矩阵A的数值, 在D1:D2区域中输入矩阵B的数值;
2. 求取A的逆矩阵。 选中B4:C5单元格, 输入数组公式=MINVERSE(A1:B2), 确认时必须按下Ctrl+Shift+Enter组合键;
3. 求取A的逆矩阵和B矩阵的乘积。 选中B7:B8单元格, 输入数组公式=MMULT(B4:C5,D1:D2), 确认时必须按下Ctrl+Shift+Enter组合键;
4. B7、B8单元格的计算结果为23和12, 即鸡数为23, 兔数为12。
图 8 矩阵函数求解
使用矩阵函数的方法, 在本质上是解决数学中的n元一次方程组的问题, 具有比较广泛的通用性。
|
|
|
上一篇:10则PowerPoint幻灯片放映技巧 下一篇:自动定时备份Office文档-文件应用 |
| Tags: Excel 按钮 a4 单元格 素材 公式 函数 菜单 |
相关信息
用宏给Excel文档自动添加密码Excel中只选中包含文本的单元格Excel中实现多条件求和的方法EXCEL表格帮忙绘制同心圆Excel数据分析相关系数与协方差实现Excel动态链接外部数据库用Excel制作自动记录的考勤表Excel中轻松实现多条件下的数据统计VBA代码实现Excel中数据快速录入四招打造Excel函数高手Excel中用条件格式为单元格自动加边框在Excel中正确输入分数有妙招Excel常见问题的解决办法Excel小诀窍让你快速上手Excel中如何避免错误信息Excel单元格内按时间规律显示名言警句用好Excel 2003中的“监视窗口”工具八招设置Excel2007 用得更顺手相同条件单元格数据的合并专家经验谈:Excel工作表的设计策略EXCEL2000中的计算错误信息Excel文档编辑中填空型下划线的使用方法Excel中的“宏”的应用隐藏指定Excel行 不让它们被打印出来微软Office Excel几则输入技巧推荐妙用Excel把有规律的txt文本数据分列在同一Excel单元格中混用文本与数值数据往Excel中导入文本数据的三种方法编辑管理Excel工作簿到外部数据的连接实时更新Excel文档外部数据源的数据
|
|
|