从反应器教材提出的问题出发

GNU Octave的起点在化学工程教学。20世纪80年代末,得克萨斯大学奥斯汀分校的詹姆斯·罗林斯与约翰·埃克特筹划化学反应器设计教材,希望配套软件帮助学生解决实际计算问题。约翰·伊顿后来回顾,最初想到的是Fortran子程序库,随后逐渐转向更灵活的交互环境。

1995年手册解释了这一选择:教师看到学生把大量精力花在排查Fortran程序为什么崩溃,而非理解化工问题。Octave因而把矩阵、方程求解和作图放到较高层次的命令中,让使用者集中于模型和结果。它也被用于该校其他化工课程以及数学系的微分方程、线性代数教学。

参考:[1] [2]

构想到公开版本之间的时间

伊顿在2001年技术报告中把构想概括为约1988年,并记述自己于1992年2月20日开始编写解释器,当时仍在得克萨斯大学完成博士论文。最初一年的编程主要由他承担;到当年夏季,程序已能处理一些简单微分方程,随后研究组成员试用并发现错误。

1993年1月4日,他开放匿名FTP下载,并向Usenet讨论组发布消息;1994年2月17日发布1.0版。构想、内部试用和公开发布是不同阶段。后来惯用的GNU Octave名称,还涉及1997年5月与理查德·斯托曼商定加入GNU计划的过程,不宜把这些行动全部归入1988年。

参考:[1]

高级语言背后的数值程序

早期Octave并不是把所有数值算法重新发明一遍。保存的技术问答说明,LAPACK、LINPACK、ODEPACK和BLAS等Fortran数值程序被组织在C++类库后面:能使用Fortran编译器时直接编译调用,也可借助f2c转换工具。使用者面对简洁表达式,底层仍依靠专门的数值求解程序。

交互体验同样由多种部件合作完成。GNU Readline负责输入编辑和历史命令,gnuplot承担绘图。早期手册还分别记下约翰·坎贝尔对输入输出、库尔特·霍尼克对统计函数等工作的贡献。因此,解释器的主要作者、数值库的开发者和随后提供功能的协作者,应当在历史叙述中区分。

参考:[2] [3]

用一条表达式求解方程组

1995年手册把矩阵创建、矩阵运算和线性方程求解连在一起讲解。沿用其语法,可以构造一个小例子:输入A = [2, 1; 1, 3]与b = [5; 7],再求x = A \ b。方括号中分号隔开不同的行,b是列向量,左除运算请求求解A乘x等于b。

这个例子的解是列向量[1.6; 1.8]:代回两行分别得到5和7。它把纸面上的两个联立方程直接映射为矩阵问题,无须学生先编写消元循环。手册特别说明,左除避免直接计算矩阵的逆;这也提醒读者,简短语言表达式后面仍有数值算法,并不只是符号的机械替换。

参考:[2]

从微分方程到可观察的曲线

在同一本早期手册中,用户先用function定义状态变化率,再提供初始状态与一列输出时刻,调用lsode得到数值积分结果,最后以plot绘制曲线。函数定义把具体模型交给使用者,求解器承担数值推进,图形则帮助检查随时间变化的行为。

这种工作流程可反复改变参数、重新求解和比较结果。它并不自动证明模型符合真实反应器,也不免除对初值、误差和物理假设的判断。交互语言所缩短的是从问题表达走到数值试验的过程;化工知识和计算解释仍需要教师、学生或研究者负责。

参考:[2]

源码、手册与交流渠道一起传播

早期问答将获取途径列得很具体:从已有副本的朋友处复制、匿名FTP下载,或向自由软件基金会购买磁带及光盘。材料明确说明,基金会负责发行但不是Octave的最初开发者。源码包附README、INSTALL、NEWS和ChangeLog,使安装说明、用户可见变化及详细开发记录能够同行。

这些材料描述的是当时以类Unix系统为主的环境,不能拿后来桌面界面倒推早期操作方式。手册和问答还引导使用者通过邮件列表求助、报告错误、提供补丁。以GNU通用公共许可证发布,使复制与修改成为允许的协作方式,但版本、依赖和具体运行条件仍须核对。

参考:[3]

走出原来的课堂,也保留局限

德克·埃德尔比特尔在后来发表于《应用计量经济学杂志》的评论中,使用2.0.14版展示数据处理和模拟:对价格序列取对数再求相邻差分,就能形成收益率序列;统计量、检验和图形可继续在同一环境中计算。他还演示了通过C++扩展数值功能的方法,显示这套工具已超出反应器课程。

这份独立评论也指出,当时专用计量经济学程序与内部扩展文档仍不充分,MATLAB程序移植也可能遇到实现差异。因而早期Octave的意义,在于把成熟数值库、矩阵语言与可分享源码连接成可用的计算环境,而不是一次发布就替代所有商业软件。1999年评论中的扩展能力与局限,属于后续阶段,不能算作1993年已有的全部功能。

参考:[4]