NAG 工具箱架构

本文的第一部分针对所有对 NAG 工具箱感兴趣的用户介绍本产品的架构。第二部分将针对熟悉 NAG 函数的用户,说明本产品与 NAG Fortran 算法库的 差异

工具箱的架构

NAG 工具箱具有跟 NAG 算法库相同的架构。算法库分成多个章节,每个章节依据不同的数学与统计分类。每章有由三个英文字母与标题组成,例如:
  • D01 – Quadrature
特殊的情况为第 H 章与 S 章只有一个字母名称。(章节与名称乃依据 ACM modified SHARE 分类索引订定 (参考 ACM (1960–1976)。)

工具箱中所有的函数名称皆为五个英文字母,且以章节名称为开头,例如:

  • d01aj
请注意第二与第三的字符为 数字,而非英文字;例如:0 表示数字的零,而非英文字的 O。

工具箱的文件与 NAG 算法库相同有一致的章节架构,所以每个章节的函数会有一个对应文件,且由以下的架构组成:

  • 章节内容,例如:Chapter D01。
  • 章节介绍,例如:D01 Chapter Introduction。
  • 函数文件,每章中的函数皆有各自的文件。
所有的函数说明皆由 MATLAB 的帮助系统提供,然而有些内容包含了大量的数学公式,但是 MATLAB 并无法清楚显示。 您可以透过每一章节的开头处的链接,直接浏览 PDF 的版本,或者直接浏览 NAG 网站

与 Fortran 算法库的差异

本部分主要针对已经熟悉 NAG Fortran 算法库或其他产品的 NAG 用户,提出 NAG 工具箱与其他 NAG 函数的差异处探讨,例如输出入参数的选择与函数的差异等。

可选参数

可选参数会可归纳于以下分类:
  1. 可应用于各种问题的默认值。
  2. 此参数只适用于函数解决某些情况下的特殊问题。
  3. 参数通常会于执行其间由其他参数决定。

在工具箱的中被忽略的参数

以下的参数已经在工具箱中被完全的省略,因为这些参数可以在执行时被确认出:
  1. 矩阵的维度。
  2. 工作区的大小 - 完全取决于问题资料量的大小。
  3. 完全根据其他输入资料决定的参数。

使用者工作区 (User Woorkspace)

许多函数有提供 用户工作区 的参数,并传递给用户提供的函数或子程序。 这可确保数据是以线程安全的方式传递给子程序。 一般说来,会有二到三个这样的参数,如整数及实数的数组,偶而会有字符数组。 在 NAG 的 MATLAB 工具箱中,这些参数都由单一的 MATLAB 对象所取代,以提供更多的弹性。 例如:用户有一个包含三个部分数据的数组,变量为 user:
x = [0.5; 1; 1.5];
y =
[0.14,0.18,0.22,0.25,0.29,0.32,0.35,0.39,0.37,0.58,0.73,0.96,1.34,2.10,4.39];
t = [[1.0, 15.0, 1.0],
     [2.0, 14.0, 2.0],
     [3.0, 13.0, 3.0],
     [4.0, 12.0, 4.0],
     [5.0, 11.0, 5.0],
     [6.0, 10.0, 6.0],
     [7.0, 9.0, 7.0],
     [8.0, 8.0, 8.0],
     [9.0, 7.0, 7.0],
     [10.0, 6.0, 6.0],
     [11.0, 5.0, 5.0],
     [12.0, 4.0, 4.0],
     [13.0, 3.0, 3.0],
     [14.0, 2.0, 2.0],
     [15.0, 1.0, 1.0]];
user = {y, t, 3};

[xOut, fsumsq] = e04fy(int32(15), 'e04fy_lsfun1', x, 'iuser', user);
可在 e04fy_lsfun1.m 的 M 档案中被使用:
function [fvecc, user] = lsfun1(m, n, xc, user)
  fvecc=zeros(m,1);

  % y is in user{1} and t is in user{2}
  for i = 1:m
    fvecc(i) = xc(1) + user{2}(i,1)/(xc(2)*user{2}(i,2)+xc(3)*user{2}(i,3))-...
                user{1}(i);
  end

输入输出参数

在 Fortran 的算法库中,输入参数在函数执行完后会被覆盖成输出的值,这是相当普遍的概念,在函数的文件中,这样的参数会被标记为 输入/输出。 但是这样的概念,在 MATLAB 中似乎较不自然,所以我们选择将他们拆开为各自独立的输入与输出参数。

工具箱中不提供的函数

工具箱中包含了所有的 NAG Fortran 算法库函数的接口,除了 F06 章 (有关线性代数相关的函数) 以及以下的函数:
e04djf Supply optional parameter values for e04dgf/e04dga from external file
e04mgf Supply optional parameter values for e04mff/e04mfa from external file
e04mzf Converts MPSX data file defining LP or QP problem to format required by e04nqf
e04ndf Supply optional parameter values for e04ncf/e04nca from external file
e04ngf Supply optional parameter values for e04nff/e04nfa from external file
e04nlf Supply optional parameter values for e04nkf/e04nka from external file
e04nrf Supply optional parameter values for e04nqf from external file
e04udf Supply optional parameter values for e04ucf/e04uca or e04uff/e04ufa from external file
e04uhf Supply optional parameter values for e04ugf/e04uga from external file
e04uqf Supply optional parameter values for e04usf/e04usa from external file
e04vkf Supply optional parameter values for e04vhf from external file
e04wef Supply optional parameter values for e04wdf from external file
h02bff Interpret MPSX data file defining IP or LP problem, optimize and print solution
h02buf Convert MPSX data file defining IP or LP problem to format required by h02bbf or e04mff/e04mfa
h02ccf Read optional parameter values for h02cbf from external file
h02cff Read optional parameter values for h02cef from external file
p01abf Return value of error indicator/terminate with error message
除此之外,在同时具有线程安全与非线程安全的算法函数 (例如:e04ufa 和 e04uff) 中,我们只提供线程安全的函数。

参考数据

ACM (1960–1976) 依算法内容分类的 ACM 索引