nag toolbox for matlab

56
Experts in numerical algorithms and HPC services NAG Toolbox for MATLAB Workshop 刘泰兴Ted Liu [email protected] Technical Manager Numerical Algorithms Group Greater China Office 英商纳格资讯 大中华区分公司 tw.nag-gc.com

Upload: ted-liu

Post on 25-Mar-2016

351 views

Category:

Documents


20 download

DESCRIPTION

Simplified Chinese version

TRANSCRIPT

Page 1: NAG Toolbox for MATLAB

Experts in numerical algorithms and HPC services

NAG Toolbox for MATLAB Workshop

刘泰兴Ted [email protected]

Technical Manager

Numerical Algorithms GroupGreater China Office

英商纳格资讯 大中华区分公司

tw.nag-gc.com

Page 2: NAG Toolbox for MATLAB

2

议程

公司简介 NAG Toolbox for MATLAB简介 如何使用NAG Toolbox for MATLAB NAG vs. MATLAB函数与性能之比较

Page 3: NAG Toolbox for MATLAB

3

Before Our Workshop…

您孰悉MATLAB ?

您使用过哪种Toolbox?

Please ask questions, make comments, etc.

Page 4: NAG Toolbox for MATLAB

4

Numerical Algorithms Group

1970 – Nottingham Algorithms Group 提供ICL computer公司数值解决方案

1971 – 第一版算法库 支援Algol 60与 Fortran 语言

1973 – 改名为Numerical Algorithms Group 1976 – NAG Ltd成立

非营利公司 1978 –美国分公司成立

1990 – NAG C算法库 1996 – 日本分公司成立 2009 –大中华区分公司成立

Page 5: NAG Toolbox for MATLAB

5

我们的产品

数学、统计算法库(约1,600 个函数) Fortran 77/90 C / C++ SMP与Multi-core MPI 支持多种环境

MATLAB, R, Maple, Excel, Python, … Fortran 集成开发环境(IDE)编译器 高效能计算(HPC)服务

提供英国HECToR超级计算机技术服务

专案咨询 客制化应用系统开发 算法开发

Page 6: NAG Toolbox for MATLAB

6

求根 级数求和 积分 常微分 偏微分 数值积分 积分方程 网格生成 插值 曲线与曲面拟合 优化 特殊函数估计

稠密线性代数 稀疏线性代数 相关性与回归分析 多元方法 随机数生成器 单变量估计 非参数统计 统计平滑化函数 事件列表分析 存活分析 时间序列分析 作业研究 …

NAG算法库函数分类(47大类)

Page 7: NAG Toolbox for MATLAB

7

科学研究、工程、与财务金融客户

重要研究单位 HPCVL加拿大高效能计算虚拟实验室 COSMOS英国剑桥大学宇宙计划 UK National Physical Laboratory英国国家物理实验室 CERN欧洲粒子物理研究所 UK MetOffice英国国家气象局 ECMWF欧洲中期天气预报中心 NERSC国家能源研究科学计算中心 各国家重点研究院所 各大学研究室…

生命科学 Glaxo Wellcome, Pfizer, Switzerland University Hospital, National

Institutes of Health... 财务金融

HSBC, Swiss Bank Corporation, Schroders, UBS, BNP Paribas, Standard & Poor’s, Morgan Stanley, Prudential Insurance, JP Morgan, ABN AMRO, Goldman Sachs. Deutsche Bank, Fidelity, International Monetary Fund, …

Page 8: NAG Toolbox for MATLAB

8

NAG MATLAB 工具箱

Page 9: NAG Toolbox for MATLAB

9

NAG MATLAB 工具箱

MATLAB mex檔 mex用来在MATLAB中运行存在的Fortran 或C的程序 例如MATLAB的loops运行太慢可以透过mex提高性能

包含所有NAG算法库函数,除了 BLAS NAG IO 函数 与NAG 非线程安全函数

与MATLAB提供的函数功能互补 Statistics Toolbox Optimization Toolbox Curve Fitting Toolbox Spline Toolbox Partial Differential Equation Toolbox

Page 10: NAG Toolbox for MATLAB

10

NAG MATLAB 工具箱

在MATLAB 中调用NAG Fortran函数 提供完整接口

完全集成至MATLAB 中 许多函数参数改为选项

容易了解的程序调用方式

完整的函数说明手册 提供范例程序 完整的章节说明

集成至MATLAB help系统中 范例演示程序

Page 11: NAG Toolbox for MATLAB

11

NAG MATLAB 工具箱

共有1415 个MATLAB 函数,提供完整的数学与统计功能 优化 微分方程 线性代数 (稠密与稀疏) 转换 积分 随机数生成 回归 时间序列 …

Page 12: NAG Toolbox for MATLAB

12

支援平台

MATLAB版本

支援平台 MATLAB 2007 /2008 MATLAB 2009a MATLAB 2009b /

2010Linux 32-bit MBLUX22DGL MBLUX22DJL MBLUX22DJLLinux 64-bit MBL6A22DGL MBL6A22DJL MBL6A22DJLMicrosoft

Windows 32-bit MBW3222DCL MBW3222DCL MBW3222DCL

Microsoft Windows 64-bit MBW6I22DCL 即将推出 即将推出

下载安装程序:http://tw.nag-gc.com/downloads/mbdownloads.asp

Page 13: NAG Toolbox for MATLAB

13

安装NAG Toolbox (MBW3222DCL) 说明档

C:\Program Files\MATLAB\R2010a\help\toolbox\NAG 运行档

C:\Program Files\MATLAB\R2010a\toolbox\NAG\mex.w32 DEMO程序

C:\Program Files\MATLAB\R2010a\help\toolbox\NAGToolboxDemos 安装过程中若您选择更新路径

自动更新 C:\Program Files\MATLAB\R2010a\toolbox\local\pathdef.m

Page 14: NAG Toolbox for MATLAB

14

安装NAG Toolbox (MBW3222DCL) 试用授权

MBW3222DC TRIAL 2010/06/04 "2mh7Mf7qhRNfNSmVGiMcc3Qh4q"

Page 15: NAG Toolbox for MATLAB

15

范例1/2

如何使用NAG 算法库计算求解线性方程式

A 是n X n 矩阵;x 与 b 为 n 向量

a = [ 1.80, 2.88, 2.05, -0.89;5.25, -2.95, -0.95, -3.80;1.58, -2.69, -2.90, -1.04;-1.11, -0.66, -0.59, 0.80];

b = [ 9.52;24.35;0.77;-6.22];

BAx =

Page 16: NAG Toolbox for MATLAB

16

[aOut, ipiv, bOut, info] = f07aa(a, b);bOutbOut =

1.0000-1.00003.0000

-5.0000

范例2/2

调用方式 f07aa 函数需输入两个参数

Page 17: NAG Toolbox for MATLAB

17

函数的参数

对照NAG Fortran函数… F07AAF(N, NRHS, A, LDA, IPIV, B, LDB, INFO)

许多参数可以忽略,在运行时可被定义出 矩阵维度 工作区大小 某些参数取决于其他输入值

合理的默认值

其余参数为选择性参数

Page 18: NAG Toolbox for MATLAB

18

选择性参数

选择性参数字于强制性参数后

选择性参数以 字符串 与数值 方式 成对呈现

各选择性参数无顺序性

需忽略 bOut(4)

[aOut, ipiv, bOut, info] = f07aa(a, b,‘n’, int32(3));bOut =

4.1631-2.12493.9737

-6.2200 只计算左上角3 X 3 矩阵

[aOut, ipiv, bOut, info] =f07aa(a(1:3,1:3),b(1:3));

Page 19: NAG Toolbox for MATLAB

19

选择性参数

g01hb计算多变量分布的机率,相对精确度默认值为0.0001

可以改变其默认值

g01hb (tail, a, b, xmu, sig)ans =0.9142

g01hb (tail, a, b, xmu, sig,'tol',0.1)ans =0.9182

Page 20: NAG Toolbox for MATLAB

20

错误与警告讯息1/2

NAG 函数提供多种错误讯息 缺乏输入参数

输入矩阵太小

选择性参数不是成对方式输入

没有参数或者参数型态错误

错误讯息通常提供完整资讯

>> [aOut, ipiv, bOut, info] = f07aa(a, b, 'n');??? Error using ==> f07aaInconsistent number of parameters:

either a compulsory parameter is missing,or the optional parameters are not in

key/value pairs.

Page 21: NAG Toolbox for MATLAB

21

错误与警告讯息2/2

NAG 函数提供多种警告讯息 NAG:warning

同时意味者函数输出之ifail参数为非零值

可查看函数说明了解ifail数值代表的意义

若您不想显示警告讯息,可以关闭warning('off', 'NAG:warning')

Page 22: NAG Toolbox for MATLAB

22

宣告正确的变量型态

NAG 函数要求的参数需要精确的参数型态 int32(1) –宣告4-byte integer,数值为 1 complex(1,1) –宣告复数 1.0000 + 1.0000i logical(0) –宣告逻辑变量为false非零值为 true

错误的型态会输出错误讯息

s01ea(0)??? Error using ==> s01eaParameter number 1 is not a complex scalar ofclass double.

Page 23: NAG Toolbox for MATLAB

23

以M-Files做为参数

许多NAG函数需提供 Mfile 做为求值的目标函数(积分、优化...) 求解积分

被积分的函数定义于‘d01ah_f.m’档案中

不支持匿名函数(Anonymous functions)

d01ah(0, 1, 1e-5, 'd01ah_f', int32(0))

function [result] = d01ah_f(x)result = 4.0/(1.0+x^2);

Page 24: NAG Toolbox for MATLAB

24

使用者工作区(Workspace)

许多函数提供用户工作区参数,传递数据给目标函数 线程安全 以 cell array方式传递

数据将会传送给e04fy_lsfun1.m 程序

x = [0.5; 1; 1.5];y = [0.14,0.18,0.22, < snip > 2.10,4.39];t = [[1.0, 15.0, 1.0], < snip > [15.0, 1.0, 1.0]];user = {y, t, 3};[xOut, fsumsq] = e04fy(int32(15), 'e04fy_lsfun1', x, 'iuser',user);

Page 25: NAG Toolbox for MATLAB

25

MATLAB 工具箱的效能

Page 26: NAG Toolbox for MATLAB

26

范例

随机数生成器 Random Numbers 插值 Interpolation 特征值 Eigenvalue 曲线拟合 Curve Fitting 优化 Optimization

Page 27: NAG Toolbox for MATLAB

27

随机数生成 – Chapter G05

随机数 - 用来模拟现实生活 人是很不擅长选择的

例如:假设硬币投掷的随机序列… HTHHTHTTHTHHTTTHTTHHTTHTHHTHTH …

大部分的人会很容易的选择出不是随机的序列

因此需要好的算法

Page 28: NAG Toolbox for MATLAB

28

随机数生成 – Chapter G05

Pseudo-random numbers 有系统性的产生

统计属性接近于真实的随机随机数

在连续的随机数中不具有相关性

Quasi-random numbers 统计上不是独立的

在空间中有较平均的分布 (看起来更随机) 应用于 Monte Carlo 模拟 G05 有 Sobol, Faure 与Neiderreiter 算法

Page 29: NAG Toolbox for MATLAB

29

Pseudo- 与Quasi-Random Numbers

MATLAB 中仅有Pseudo Random Numbers 函数 Quasi-Random Numbers 仅在Statistics Toolbox 中提供

Page 30: NAG Toolbox for MATLAB

30

插值1/3x = [0;0.2;0.4;0.6;0.75;0.9;1];y = [1;1.22;1.49;1.82;2.11;2.45;2.71];plot (x, y, ‘O’)

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 11

1.2

1.4

1.6

1.8

2

2.2

2.4

2.6

2.8

插入200,000 个数值

t = 0 : 0.000005 : 1;

Page 31: NAG Toolbox for MATLAB

31

插值2/3

MATLAB:Interp1NAG:e01be NAG提供更高的效能

x = [0;0.2;0.4;0.6;0.75;0.9;1];y = [1;1.22;1.49;1.82;2.11;2.45;2.71];t=0 : 0.000005 : 1;matlabtimes = zeros(1,100);for n=1:100

ticy1 = interp1 (x, y, t, 'pchip');matlabtimes(n) = toc;

endmean(matlabtimes)nagtimes = zeros(1,100);for n=1:100

tic[d, ifail] = e01be (x, y);[y2, ifail] = e01bf (x, y, d, t);nagtimes(n) = toc;

endmean(nagtimes)

0.0353 VS 0.001919 倍

Page 32: NAG Toolbox for MATLAB

32

插值3/3

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 11

1.2

1.4

1.6

1.8

2

2.2

2.4

2.6

2.8

plot (t, y2, ‘O’)

Page 33: NAG Toolbox for MATLAB

33

线性代数

MATLAB 中的稠密线性代数函数架构在 LAPACK上 然而,您只能得到部分的 LAPACK NAG 工具箱实现所有的 LAPACK 函数

有一样的运行性能?

Page 34: NAG Toolbox for MATLAB

34

线性方程

MATLAB 使用“\” 确认矩阵的性质(Symmetric, positive definite

etc.),然后再调用合适的函数

LAPACK 中对于一般矩阵使用DGESV 函数 NAG 以 f07aa 函数实现

a=rand(6000);b=rand(6000,1);tic; [aOut, ipiv, bOut, info] = f07aa(a, b); toc;Elapsed time is 11.947979 seconds.tic; c=a\b; tocElapsed time is 17.169614 seconds.

6000X6000 1.44倍7000X7000 1.61倍

Page 35: NAG Toolbox for MATLAB

35

特征值与特征向量 – Chapter F08

MATLAB的函数 eig[v,d] = eig(a); f08fa (DSYEV in LAPACK),类似eig 的QR 算法[a, w, info] = f08fa('V', 'U', a) f08fc (DSYEVD), divide与conquer算法

[a, w, info] = f08fc('V', 'U', a)

Page 36: NAG Toolbox for MATLAB

36

特征值与特征向量

0

100

200

300

400

500

600

700

800

1000 1500 2000 2500 3000 3500 4000 4500 5000

Tim

e (S

ec.)

Matrix Size

Eigen Value Routines

eigf08faf08fc

Page 37: NAG Toolbox for MATLAB

38

曲线拟合1/4

找出一个函数曲线可以逼近所有的数据点

0 1 2 3 4 5 6 7 8-1

0

1

2

3

4

5

6

7

8Using NAG routines e02be, e02bb to fit a cubic spline

Smoothness = 0.001

Number of knots = 8

0 1 2 3 4 5 6 7 8-1

0

1

2

3

4

5

6

7

8Using NAG routines e02be, e02bb to fit a cubic spline

MATLAB仅有polyfit 多项式曲线拟合函数

Page 38: NAG Toolbox for MATLAB

39

曲线拟合2/4

MATLAB:polyfitNAG:e02ac NAG提供更高的效能

x = (0: 0.0001: 1000)';y = 2.011*x.*x.*x + 123*x.*x + 0.123*x + 0.1234;matlabtimes = zeros(1,5);for n=1:5

ticp=polyfit(x,y,3);matlabtimes(n) =toc;

endmean(matlabtimes)nagtimes = zeros(1,5);for n=1:5

tic[a, ref] =e02ac(x, y, int32(4));nagtimes(n) =toc;

endmean(nagtimes)

3.0115 VS 0.58895倍

Page 39: NAG Toolbox for MATLAB

40

曲线拟合3/4

MATLAB 提供两个三维曲线拟合函数 griddata – 使用数据的Delaunay 三角网方法。曲线会通过数据点

interp2 – 不同的插值函数,包含cubic、spline、linear、nearest 等方法

其他更高阶的拟合函数在Curve Fitting Toolbox中

Page 40: NAG Toolbox for MATLAB

41

曲线拟合4/4 – NAG 曲线拟合函数

曲线拟合函数包含: Curve Fitting- polynomials and cubic splines Surface Fitting- bivariate polynomials and bicubic splines General Linear and Nonlinear Fitting Functions Padé Approximants 加入限制式问题

允许数据加入权重

Page 41: NAG Toolbox for MATLAB

42

优化

MATLAB提供

没有提供具限制式的优化函数

Page 42: NAG Toolbox for MATLAB

43

线性限制式优化

Page 43: NAG Toolbox for MATLAB

44

非线性限制式优化

Page 44: NAG Toolbox for MATLAB

45

NAG 优化函数

求解2D Rosenbrock function优化问题 f(x,y) = 100*(y-x*x)^2 + (1-x)^2

无限制式 MATLAB的fminsearch函数计算结果

x = 1.0000e+000 y = 1.0000e+000 fval = 8.1777e-010, (趋近于0.0000)

选择正确的算法 考虑NAG的e04uc函数…

Page 45: NAG Toolbox for MATLAB

46

Case Study - e04uc 与fmincon (MATLAB Optimization Toolbox) fmincon

使用三种算法 active-set interior-point trust-region-reflective

NAG e04uc 使用Sequential Quadratic Programming (SQP)方法

使用者案例(欧洲银行) 48个变数及9个线性限制式 不提供导数

Fmincon共计1890次目标函数求值,耗时87.6 秒 e04uc仅1129次目标函数求值,耗时49.4 秒

Page 46: NAG Toolbox for MATLAB

47

NAG 优化函数

区域最佳化并不保证会得到最小值

全局优化 (global optimization)

22版新函数

e05jb

Page 47: NAG Toolbox for MATLAB

48

结语

MATLAB能够提供许多的数学函数功能 大部分的功能需自不同的工具箱中取得

MATLAB并没有提供多种的算法求解,也限制使用底层的函数 影响性能 针对特定的问题,可采用较为合适的算法

NAG涵盖所有常用的数学与统计函数

所有的NAG函数都可在MATLAB中使用

Page 48: NAG Toolbox for MATLAB

Experts in numerical algorithms and HPC services

NAG Toolbox for MATLAB练习

Page 49: NAG Toolbox for MATLAB

50

多项式求根 u=1; r=-6; s=11; t=-6; [zeror, zeroi, errest, ifail] = c02ak(u, r, s, t);

zeror =1.00002.00003.0000

zeroi =000

6116 23 −+− xxx

Page 50: NAG Toolbox for MATLAB

51

优化1/4

无限制式之优化

求x为多少时f(x)有最大值及最小值 x 的区间[-6, 4]

53)( 2 −+= xxxf

Page 51: NAG Toolbox for MATLAB

52

优化2/4

Page 52: NAG Toolbox for MATLAB

53

-6 -5 -4 -3 -2 -1 0 1 2 3 4-10

-5

0

5

10

15

20

25

优化3/4 新增目标函数 function [fc, user] = func_e04ab(xc, user) fc = xc.^2 + 3*xc – 5;

user = 0; x = -6:.01:4; [y, user] = func_e04ab(x, user); plot (x, y)

e1 = 0; %相对准确度 e2 = 0; % 绝对准确度 a = -6; % lower bound b = 4; % upper bound maxcal = int32(30); % F(x) 允许最大调用次数

Page 53: NAG Toolbox for MATLAB

54

优化4/4

[e1Out, e2Out, aOut, bOut, maxcalOut, x, f, user, ifail] = e04ab(‘func_e04ab’, e1, e2, a, b, maxcal); %计算最小值

mytext = sprintf(‘Minimum (%g,%g) in [%g,%g]’, x, f, a, b);

text(-3, 10, mytext) %最大值呢?

-6 -5 -4 -3 -2 -1 0 1 2 3 4-10

-5

0

5

10

15

20

25

Minimum (-1.5,-7.25) in [-6,4]

Page 54: NAG Toolbox for MATLAB

55

相关性矩阵1/2

十种股票的收盘价X 91笔 rawdata.dat

Page 55: NAG Toolbox for MATLAB

56

相关性矩阵2/2

fid = fopen(‘rawdata.dat’); at = zeros(10,91); [at,count] = fscanf(fid, ‘%f’, [10 91]); a = at’; clear at

weight = ‘u’; wt = zeros(1,1); [xbar, std, v, x, ifail] = g02bx(weight, a, wt);

Page 56: NAG Toolbox for MATLAB

Experts in numerical algorithms and HPC services

Question and Answer

[email protected]://tw.nag-gc.com

试用软件:http://tw.nag-gc.com/downloads/