NAG 工具箱架构
本文的第一部分针对所有对 NAG 工具箱感兴趣的用户介绍本产品的架构。第二部分将针对熟悉 NAG 函数的用户,说明本产品与 NAG Fortran 算法库的 差异。
工具箱的架构
NAG 工具箱具有跟 NAG 算法库相同的架构。算法库分成多个章节,每个章节依据不同的数学与统计分类。每章有由三个英文字母与标题组成,例如:- D01 – Quadrature
工具箱中所有的函数名称皆为五个英文字母,且以章节名称为开头,例如:
- d01aj
工具箱的文件与 NAG 算法库相同有一致的章节架构,所以每个章节的函数会有一个对应文件,且由以下的架构组成:
- 章节内容,例如:Chapter D01。
- 章节介绍,例如:D01 Chapter Introduction。
- 函数文件,每章中的函数皆有各自的文件。
与 Fortran 算法库的差异
本部分主要针对已经熟悉 NAG Fortran 算法库或其他产品的 NAG 用户,提出 NAG 工具箱与其他 NAG 函数的差异处探讨,例如输出入参数的选择与函数的差异等。可选参数
可选参数会可归纳于以下分类:- 可应用于各种问题的默认值。
- 此参数只适用于函数解决某些情况下的特殊问题。
- 参数通常会于执行其间由其他参数决定。
在工具箱的中被忽略的参数
以下的参数已经在工具箱中被完全的省略,因为这些参数可以在执行时被确认出:- 矩阵的维度。
- 工作区的大小 - 完全取决于问题资料量的大小。
- 完全根据其他输入资料决定的参数。
使用者工作区 (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 |