第 20.4 节 教育

计算机科学

编程?

语言与翻译

代数学

简单的计算器 bc

安装命令:# pkg install gnubc

后缀表示法

注:本节内容参考了维基百科

从幼儿园接触数学开始,我们用的计算表达方式就是中缀表示法。如,要计算 3 和 4 的和,写作 3 + 4,操作符(本例是加号)处于操作数(即 3 和 4)的中间。

而在后缀表示法里,操作符置于操作数的后面。如上式改若用后缀表示法,则写作 3 4 +。如果有多个操作符,操作符则置于第二个操作数的后面,所以常规中缀表示法的 3 - 4 + 5 在后缀表示法里写作 3 4 - 5 +

初看起来,后缀表示法十分反人类,然而这种方法更容易被计算机理解,可以利用堆栈结构减少计算机内存访问。

有一例中缀表达式 5 + ((1 + 2) * 4) - 3,改为后缀表示法为 5 1 2 + 4 * + 3 -。 下表给出了从左至右求值的过程,堆栈栏给出了中间值,用于跟踪算法。

输入操作堆栈注释

5

入栈

5

1

入栈

5, 1

2

入栈

5, 1, 2

+

加法运算

5, 3

1, 2 出栈,让结果 3 入栈

4

入栈

5, 3, 4

*

乘法运算

5, 12

3, 4 出栈,让结果 12 入栈

+

加法运算

17

5, 12 出栈,让结果 17 入栈

3

入栈

17, 3

-

减法运算

14

17, 3 出栈,让结果 14 入栈

计算完成时,栈内只有一个操作数,这就是表达式的结果 14

桌面计算器 dc

dc 是采用后缀表示法的开源计算器,传统上,采用中缀表示法的 bc 计算器程序是在 dc 之上实现的。

对于上例,我们试着用 dc 操作一番。终端输入 dc -e '5 1 2 + 4 * + 3 - p',可得到 14。问题解决。

几何学

几何绘图软件 geogebra

安装命令:# pkg install geogebra

线性规划

GLPK 安装:# pkg install glpk

线性规划里,我们经常会用到 单纯形法。 在计算机层面,有很多软件可以解放我们的大脑,甚至你可以在 OFFICE 表格软件的“规划求解”里,得到很好的解答。 这里我们简单介绍一下命令行免费线性规划软件包 GLPK 的使用方法。希望大家可以触类旁通,举一反三。

我们先来看一个例子,取自 Hamdy A. Tara 所著的 “Operations Research : An Introduction”一书,例题 2.4-1:

有一家银行计划放贷,预计最高投放 1200 万。下表显示了相关的数据。

贷款类型利率坏账率

个人

0.14

0.1

汽车

0.13

0.07

家用

0.12

0.03

农业

0.125

0.05

商业

0.1

0.02

坏账意味着不产生利润,本金也无法收回。为了同其它商业机构竞争,农业贷款和商业贷款之和不少于全部贷款的 40% ;为了振兴房地产业,个人贷款、家用贷款和个人贷款三项总计中,其中的个人贷款占比不少于 50% ;银行坏账率最高允许为全部贷款的 4%。

求解银行能获得最高利润的分配方式。

我们来逐步分析。先设个人、汽车、家用、农业及商业分别的贷款量为 x1、x2、x3、x4 以及 x5。

利润 = 0.14 · 0.9 x1 + 0.13 · 0.93 x2 + 0.12 · 0.97 x3 + 0.125 · 0.95 x4 + 0.1 · 0.98 x5

本金损失 = 0.1 x1 + 0.07 x2 + 0.03 x3 + 0.05 x4 + 0.02 x5

得目标函数 max z = 利润 - 本金损失;

接下来,读者可根据题意找出约束条件。

由以上的目标函数和约束条件,我们可以给出以下数学模型:

max z = 0.026 x1 + 0.0509 x2 + 0.0864 x3 + 0.06875 x4 + 0.78 x5

s.t. x1 + x2 + x3 + x4 + x5 <= 1200,
    x4 + x5 <= 0.4 (x1 + x2 + x3 + x4 + x5),
    x3 >= 0.5 (x1 + x2 + x3),
    0.1 x1 + 0.07 x2 + 0.03 x3 + 0.05 x4 + 0.02 x5 <= 0.04 (x1 + x2 + x3 + x4 + x5),
    xi >= 0 (i = 1, 2, 3, 4, 5)

新建一个文本文件,命名为 example,输入:

var x1 >= 0;
var x2 >= 0;
var x3 >= 0;
var x4 >= 0;
var x5 >= 0;

maximize z: 0.026*x1 + 0.0509*x2 + 0.0864*x3 + 0.06875*x4 + 0.78*x5;
s.t. C1: x1 + x2 + x3 + x4 + x5 <= 1200;
s.t. C2: x4 + x5 <= 0.4*(x1 + x2 + x3 + x4 + x5);
s.t. C3: x3 >= 0.5*(x1 + x2 + x3);
s.t. C4: 0.1*x1 + 0.07*x2 + 0.03*x3 + 0.05*x4 + 0.02*x5 <= 0.04*(x1 + x2 + x3 + x4 + x5);
end;

保存后,终端输入 $ glpsol -m example -o example.out,打开 example.out 文件可查看解答值为:x3 = 720,x5 = 480,其余各项值为 0。

问题解决。

物理和化学

  • 元素周期表 GPeriodic: # pkg install gperiodic

天文地理

  • 星图软件 Stellarium: # pkg install stellarium

  • Gnome 地图:# pkg install gnome-maps

艺术

音乐

  • MIDI 编曲软件 LMMS# pkg install lmms

  • 制谱软件 MuseScore# pkg install musescore

三维图像

  • 三维图形图像软件 Blender# pkg install blender

绘画

  • Krita: # pkg install krita

  • MyPaint: # pkg install mypaint

最后更新于