Matlab to GEDAE Idea 中文手册

19
技术支持工程师:母洪强 13305188718 Matlab to GEDAE Idea 中文手册 QQ 技术群:GEDAE 230308083 2014.1

Transcript of Matlab to GEDAE Idea 中文手册

技术支持工程师:母洪强 13305188718

Matlab to GEDAE Idea中文手册

QQ技术群:GEDAE 230308083

2014.1

技术支持工程师:母洪强 13305188718

目 录

前言..................................................................................................................................................... 1Range Variables范围变量..................................................................................................................1

MATLAB vs. Idea Ranges as used to Index Values................................................................... 1Idea Dimensions are 0 Based...................................................................................................... 1Defining Range Variables............................................................................................................2Getting the size of a range...........................................................................................................2Algebraic and Functional Expressions........................................................................................2Interpreting Algebraic Expressions Containing Ranges............................................................. 4Matrix Element Selection............................................................................................................4Setting a subset of elements of a matrix..................................................................................... 4Idea Matrices are Stored in Row Major Order........................................................................... 5

Operators操作符................................................................................................................................ 6Idea operators extend C operators...............................................................................................6Idea collapsing operators.............................................................................................................6Translating MATLAB operators into Idea operators.................................................................. 7

Logical Indexing逻辑索引................................................................................................................ 7Declaring Variables变量声明............................................................................................................ 8Loops循环.......................................................................................................................................... 9

Translating MATLAB Loops into Idea Loop............................................................................. 9The Dataflow (or Streaming) Concept......................................................................................10Translating MATLAB Loops into Idea Dataflow.....................................................................10Do/while and while loops..........................................................................................................11Choosing between for loop and dataflow implementations of loops....................................... 11

Conditionals条件............................................................................................................................. 12The if Statement........................................................................................................................ 12The switch Statement................................................................................................................ 13

Translating MATLAB Function into Idea.........................................................................................14Defining Functions in Idea........................................................................................................14

Discussion......................................................................................................................................... 15MATLAB Features not Directly Supported in Idea..................................................................15Importing external libraries and source code into Idea Kernels...............................................15MATLAB functions provided in Idea....................................................................................... 16Regression testing – comparing MATLAB output to Idea output........................................17

技术支持工程师:母洪强 13305188718 1

前言

本文档介绍如何转换MATLAB函数和程序到 Idea语言。

Range Variables范围变量

最明显的不同是 Idea大量使用 Range 型变量。广泛用于矢量、矩阵和更高维度的变量。例如MATLAB实现代码如下(两个矩阵相加,然后选择其中的一部分):C =A + B;D = C(:,2:5);而用 Idea实现如下:C[r][c] = A[r][c] + B[r][c];range n = 4;D[r][n] = C[r][n+1];其中 r、c要先定义为 range型变量。n为 c列中的一部分。下面介绍具体如何转化。

MATLAB vs. Idea Ranges as used to Index Values

MATLAB和 GEDAE都使用数据范围定义矢量或矩阵的大小和索引 Index。MATLAB (start:stop) or (start:step:stop)。如 1:5,1:2:7.

在 GEDAE中这样定义:range n = N;该 range不是矢量,但是你可以认为它是 0,1......N-1的任何整数值。与 matab的不同是他的 step是 1.可以如下写实现任意 step的(start:step:stop)。step*n+start

Idea Dimensions are 0 Based

Idea的数组、矩阵位标从 0开始,与 matlab的从 1开始不同。MATLAB如下:

A = B(3: 6); % 把 A赋值为 B(3),B(4),B(5),B(6).Idea如下:

技术支持工程师:母洪强 13305188718 2

range n = 4 // takes on the values 0,1,2,3A[n] = B[n + 2]; //A = B[2],B[3],B[4],B[5]. 注意 B[2]是第三个数。

Defining Range Variables

最直接的定义方式:

range n = <some integer expression>range n = 16;

第二种定义方式,可以作为函数的输入参数(i,j,k都是 range 型变量):out mmult(float A[i][j],float B[j][k]) {out[i][k] += A[i][j]*B[j][k];}

第三种方式可以作为函数的输出,例如实数离散傅立叶变化产生一个矢量输出

(长度是输入矢量的一半):

float x[n] = …y[m] = rdft(x);这里面 m是一个新的 range变量,长度是 n的一半。

Getting the size of a range

#操作符用来获得 range变量的大小。如 range n = 16;那么#n 的值就是 16.MATLAB中求取矩阵 A的行数和列数一般如下:R = size(A,1);C = size(A,2);Idea则如下:A[r][c] = func(…); // func is any function defined by a .k or .i fileR = #r;C = #c;

Algebraic and Functional Expressions

Idea有两种基本的表述方式:代数和功能。代数表达式右边(rhs)包含单目、双目或折叠运算符,并且函数均是有效的标量函数。例如:

out[i] = abs(a[i] + b[i])/#i; 是一个代数表达式因为 abs 是标量函数。

技术支持工程师:母洪强 13305188718 3

功能表达式右边是由单个函数调用,该函数的参数可以是向量或矩阵或任何名称

的标量表达式。例如我们定义了一个变量 x[n]然后:y[m] = rdft(x);这是一个功能表达式因为 rdft函数不全部用标量参数。如果功能表达式是多输出函数,那么多个输出用逗号隔离开书写在表达式的左边。例如 Idea的 meshgrid函数等同于Matlab的 meshgrid函数:rows[r] = …cols[c] = …mrows[t],mcols[t] = meshgrid(rows,cols);

代数表达式要求所有非标量条目有完整的维度索引,这些索引可以是 range型变量或整数值。功能表达式要求所有非标量参数被传递时要使用没有维度的非标量

条目。功能表达式的标量参数仍然可以是代数表达式。例如:

下面表述是错误的:

y[m] = rdft(x[n]);y[m]= rdft(-x);y[m] = rdft(x+2);因为 x是一个矢量变量名字而未被传递。但是 find函数把矢量作为它第一个参数,要寻找的最大数值为其第二参数可以如下:

x[n] = …y[m] = find(x,#n/2-1);这里作为标量的第二个参数可以是任意代数表达式。

代数表达式要求所有用在表达式的 LHS 和 RHS 的 range 变量被预定义。在声

明的 LHS 使用的 range 变量定义了正在生成的数据的大小。如果表达式使用=运

算符(未折叠),那么表达式的 rhs 的任何 range 变量必须为表达式的 lhs 定义

过的一部分。

相比之下功能表达式不要求用于表达式的 lhs 预先定义过,而是表达式定义

本身定义自己的尺寸。但是,如果尺寸是先前定义的 Idea 编译器将确保该定义

是一致的。

功能表达式的限制意味着一些MATLAB表达式可以写为一行Idea中却必须写成多

行。例如MATLAB如下:A(1:32) = 1.0;B(1:32) = 4.0;C = fft(A+B);

写成 Idea:range n = 32;A[n] = 1.0;B[n] = 4.0;AB[n] = A[n]+B[n];// algebraic expressionC[n] = dft(AB); // functional expression// dft is the Idea equivalent of fft

技术支持工程师:母洪强 13305188718 4

Interpreting Algebraic Expressions Containing Ranges

使用 range的代数表达式会计算 range所有的可能值。例如:

range r = 3;range c = 2;A[r][c] = (r+1)*c;A [ r] [c]是一个 3x2 的矩阵,并计算值 r = 0 .. 2 和 c = 0 .. 1 。A 的这个

定义是相当于 MATLAB 表达式:

A = (1:3)’*(0:1);

Matrix Element Selection

MATLAB中选择矩阵一部分的方式如下:A = B(2:5,3:8);

Idea如下:range r = 4;range c = 6;A[r][c] = B[r+1][c+2];

Setting a subset of elements of a matrix

MATLAB设置一个矩阵 B作为 A的一部分的方式:A(2:5,3:8) = B

Idea中每个变量必须有独特的名字,因此矩阵 A不能被修改,因此需要创建一个新的矩阵 A1作为修改过的 A。假设 A[n][m]=....,然后可以设置 A1:A1[n][m] = set(A,B,2,3);

这里面 A1和 A相同除了:A[r+2][c+3]= B[r][c]。

下面的表显示了在一个矩阵 A或一个矢量 V里如何设置元素的子集。

技术支持工程师:母洪强 13305188718 5

Idea Matrices are Stored in Row Major Order

MATLAB矩阵以列为首要顺序,Idea以行为首要存储顺序。这种区别在需要把矩阵转换为单索引的矢量时尤为重要,例如MATLAB中:A = (1:3)’*(2:4)A =2 3 44 6 86 9 12

那么:

B =A(1:9)B =2 4 6 3 6 9 4 8 12

下面是等同功能的代码在 Idea中:range r = 3;range c = 3;range n = #r*#c;A[r][c] = (r+1)*(c+2)B[n] = A[n%#r][n/#r];

把矩阵 A转换成矢量 B,Idea中用下面的代码实现相同的功能:C[c][r] = A[r][c]; // matrix transposev[r](c) = C[c][r] // reinterpretation of matrix as #c vector tokenss(r) =v[r]; // reinterpretation of vector as #r scalar tokensB[n] = s(n); // reinterpretation of #n scalar tokens as a vector或者

C[c][r] = A[r][c]; // matrix transposeB[n] = m_v1(C); // using the built in zero copy m_v1 function.

技术支持工程师:母洪强 13305188718 6

上述两种矩阵到数组的方法除了矩阵转置外均不需要额外的计算。

Operators操作符

Idea operators extend C operators

Idea运算符与 C运算符是相同的,除了# 和`。range n = 4;y = 3;z = y`#n;Z的结果是 3的四次方。

Idea collapsing operators

Idea提供一系列的折叠运算符,如最常用的+=运算符:range i = 6;S += v[i];那么

S = v[0]+v[1]+v[2]+v[3]+v[4]+v[5];这里

S <op>= v[i];等同于

S = v[0] <op> v[1] <op> v[2] <op> v[3] <op> v[4] <op> v[5];

折叠运算符将会穷举所有等式左边没看到的右边索引:

a[i][j] = …b[j][k] = …c[i][k] += a[i][j]*b[j][k];

Family 和 timeindices也可以用折叠运算符,例如一个 FIR滤波器可以表述为:

y += C[i]*x(-i);

跨越多个 family求和(这可以映射到多个处理器)可以表述为:y[i] += [f]x[i];

其他一些简单的例子:

sum += m[i][j]; // matrix sumdot += x[i] * y[i]; // dot productprod += m[i][j] * n[k][j]; // matrix multiply by transposedil[i][j] ||= im[i+i1][j+j1]; // bitmap image dilation kernel

技术支持工程师:母洪强 13305188718 7

erd[i][j] &&= im[i+i1][j+j1]; // bitmap image erosion kernel下表列举了一些折叠运算符,标量输出矢量输入:

Translating MATLAB operators into Idea operators

Logical Indexing逻辑索引MATLAB中我们可以用逻辑索引获得一个矢量或者矩阵的元素,例如:A = [(0:5),(0:4)]A =0 1 2 3 4 5 0 1 2 3 4B =A(A>3)B =4 5 4

Idea中可以用 find/gather实现上面的功能:

技术支持工程师:母洪强 13305188718 8

range n = 11;A[n] = n>5 ? n-5 : n;C[n] = A[n] > 3;Indx[m] = find(C);B[m] = A[Indx[m]];

同样对于矩阵,我们也可以用 find/gather :range r = R;range c = C;A[r][c] = …C[r][c] = A[r][c] > 3;Rindx[m],Cindx[m] = find(C);B[m] = A[Rindx[m],Cindx[m]);

Declaring Variables变量声明一个 Idea典型的变量声明如下:float A[r][b] = <valid idea expression>

当一个变量被声明它的维度,如果有的话,必须始终声明为简单的 range变量。在这种情况下 A被声明为 range变量 r和 c的矩阵。以下目前是非法的:

A[r+3][c*2] = <valid expression>因为所有左边的索引必须是简单的。Family 和 time索引也必须是简单的。因此下面表达是合法的:

range n = 16;range f = 4;[f]A[n] = B[f+1];i(n) = n*2;该声明的类型是可选的,它可以直接地来自 rhs(表达式右边),但要求没有显式的类型转换。

MATLAB和 Idea之间的主要区别是一个 Idea表达式左边 LHS的变量名只能使用一次。比如MATLAB表达式:

A(1:4) = (1:4);A(2) = 8;Idea中必须如下表达:range r = 4;A1[r] = r+1;A[r] = set(A1,8,2)

技术支持工程师:母洪强 13305188718 9

Loops循环下面是在MATLAB中逐元素的建立一个数组的典型例子。下面是一个函数 func对一个矩阵 B的操作,一个矢量 V,和索引 i的 for循环操作。

A = zeros(N);V = a vector of size NB = a matrixfor i = 1:Nai = func(B,V(i),i);A[i] = ai;end

Translating MATLAB Loops into Idea Loop

GEDAE中实现上面相应功能的代码为:B[r][c] = a matrix;V[n] = a vector of size N;for (i=0, float A[n] = create(N); i<N; i=i+1) {ai = func(B,V[i],i);A[n] = set(A,ai,i);}

其中

For 循环语法与 C语言相同 i++用 i=i+1代替,由于 GEDAE暂不支持++运算符。 create(N)函数创建一个未初始化的数组 A以及一个维度为 N的 range型变量

n create(N)函数可以用来创建任何数据类型的矢量。因此 create(N)函数中的 A的类型必须被声明。

Set函数设置 ith 为 i+2代替 matlab的 i+1,因为 idea索引从 0开始,matlab从 1开始。

变量名 A即出现在 for循环初始化中,也在循环体里。这是 Idea等式左边变量名必须是独有这一规则的特例。

For循环中变量初始化部分,如 A,既可以出现在 set函数调用的 lhs,也可以出现在 rhs。

技术支持工程师:母洪强 13305188718 10

The Dataflow (or Streaming) Concept

GEDAE中 dataflow是一个重要的特征。(注意:matlab有 step型函数,用while循环实现一个数据流。我们未试图在 gedae中与 matlab steam等同。)stream是数据项的一个特征。如果一个数据项是 stream,那么编译器执行软件时会处理所有的令牌 token。例如,函数 foo()从外部接口读数据,表达式 x=foo();只要接口有数据就会执行直到程序被终止。不需要额外软件来处理 stream。因为编译器知道 stream概念并执行必要的软件。当然一个 Token流的可能来源是相当广泛的,大多数的来源是由一个外部接

口(例如 AD/DA转换器或消息接口)或由一个 Token分解成的 subtokens流,接着处理 subtoken然后重编成一个完整的 Token。一个内部流最常见的例子是一个矩阵分解成一个向量流,每个向量是一行数据。矢量是以某种方式进行处理,

例如,一个滤波器,结果被重新组装成一个矩阵。有许多其他的例子,如在一个

图像寻找 ROIs,然后建立一个基于 ROIs的跟踪数据库。后例的要点是强调数据流可以是动态的。

Translating MATLAB Loops into Idea Dataflow

The same code that could be implemented using a for loop in MATLAB and as a forloop in Idea can also be written using the Idea dataflow notation as:同样的代码可以在MTALAB中 for循环实现或 Idea中 for循环实现,也可使用Idea 的 dataflow符号来实现:

B[r][c] = some matrix;V[n] = a vector of size N;Bn[r][c](n) = B[r][c];i(n) = n;v(n) = V[n];ai= func(Bn,v,i);A[n] = ai(n);

其中:

Bn 是一个有 N个 Token的数据流,重复 Token B的值。我们说保持 B的值N次。

v(n) = V[n]把有一个矢量 N个 token的值转换成 N个标量 token。 i是 N个整数 token的 stream,它的值为 0...N-1. Func是用户自定义的函数,它对每个自变量,在每个 token生成一个输出。 注意自变量 Bn,v, i 对于 func都比 B或 V的数据率高 N倍。 ai = func(B,i) 不会给出同样的结果,因为 B和 I数据流不平衡。该表达式将会根据每个 i的 N个值得到一个新矩阵 B。

A[n] = ai(n) 收集 ai的一组 tokens #n = N,转换成大小为 N的矢量 A。

技术支持工程师:母洪强 13305188718 11

一般来说当构造一个矩阵或者矢量时,一次性索引的 Idea dataflow符号更简单和容易,适合并行化,尽管上述两种方法都可行。

Do/while and while loops

Idea也支持 do-while和 while语法,在初始化循环变量方面与 c有些不同。例如do-while循环如下:do (i=0, float A[n] = create(N)) {ai = func(B,V[i],i);A[n] = set(A,ai,i);i = i+1;} while (i<N);

所不同的是逗号分隔的初始化列表。同样的 while循环实现如下:

while (i=0, float A[n] = create(N); i<N) {ai = func(B,V[i],i);A[n] = set(A,ai,i);i = i+1;}

Choosing between for loop and dataflow

implementations of loops

选择 for循环还是 dataflow的循环执行,当需要实现MATLAB循环同样功能的时候会面临这个问题。

例如:

x[c](r) = A[r][c] // produce r tokens for each matrix A containing the rows of A.y[c] = fft(x);z[c] = y[c]*Coeff[c];w[c] = ifft(z);B[r][c] = w[c](r); // collect r tokens of w into a new matrix B.上面可以用一个循环来实现,但是用上面的方式更好。如果用循环来实现,我们

必须让 FFT以粒度为 1运行,而上述方式我们可以让 FFT在用户编译选项控制下,粒度既可以是#r,1,或者两者结合。

但是当你有很多输入-其中有些需要被复制-使用循环相比 dataflow版本有很大简化。例如假设变量 a1...an 被定义在循环外,然后:a1 = ..

技术支持工程师:母洪强 13305188718 12

...an = ..for (x = 0, i=0; i<N; i = i+1) {x = func(x,a1,...an)}

如果使用 dataflow则需要设置一组新变量 b1..bn:range i = N;a1 = .....an = .b1(i) = a1;...bn(i) = an;x = func(x(-1),b1,...bn);

问题的关键是,当使用一个 Idea循环完成时该复制自动完成的。在一个大的例里往往并不清楚哪些 Tokens必须被复制,因为需要被复制的 Tokens可能分布在在循环体中的多行。

我们的例子中的 for循环实现了一个简单的计数循环。然而,在 Idea的循环可以长度不定。例如图像自动对焦迭代算法,直到结果达到满足某些条件的“足够好”。这样的结构可以用数据流来实现,但很别扭。

总之,当只有有少数 stream需要被复制以及MATLAB循环执行次数可以被预定时候使用 dataflow,否则使用 Idea loop。

Conditionals条件MATLAB的条件语句可以容易地转换成 Idea条件语句。C格式的 if和 switch语句是支持的。

The if Statement

例如 if/else语句如下:stream float x = …stream float a1 = …if (x > 1.0) {b = 1+a1;y = x-b;} else {y = x-1;}

技术支持工程师:母洪强 13305188718 13

}z = y+1;q = b+2;

其中需要注意的是:

不像 C的 if-else语句,单行时也要用{}。 尽管 a1只出现在 if语句,每个 y令牌输出时也会消耗一个 a1输入令牌 变量名称 Y可以重复在 if和 else语句,如果这样做每个消耗的输入令牌产生一个 Y令牌。

变量b只有在 if语句激活时才被产生。因此 z和q有不同的数据率。如在 if-else语句外的表达式 w=y+b编译时候会报 dataflow错误。

If语句不要求必须要有 else,例如:

if (x > 0) {y = x;}产生一个 stream y,只有当 x为正时 token才有效。

The switch Statement

Idea的 switch语句如下:stream float x = …stream float a1 = …stream int mode = …switch (mode) {case 0: {b = 1+a1;y = x-b;}case 1: {y = x-1;}case 2: {b = 1-a1;y = x-b;}default: {y = x-3;}}其中:

技术支持工程师:母洪强 13305188718 14

不像 C那样 case语句要个 break语句,不需要 break语句。 不像 C甚至 case下单行也必须由{}包围。 a1输入 在每个 y token生成时消耗一个 token,即使它只出现在 case0. 变量名 Y在所有的 case和可选的默认从句下可以重复,如果这样消耗每个输入令牌都会产生一个 Y令牌

变量 b只有在 case0和 case3从句唤醒时才会被产生。因此 z和 q有不同的数据率。一个表达式像 w=y+b如果在 switch语句之外编译时会被报 dataflow错误。

如果没有 Default从句,则 y被认为有低于 x的不同的数据率,因为它不能保证被产生。这种情况下一个表达式像 w=y+x如果在 switch语句之外编译时会被报 dataflow错误。

Translating MATLAB Function into Idea当试图转换MATLAB函数到 Idea时,首先要确认 Idea是否已经存在相同功能的函数,如果没有再规划如何建立相同功能的函数。

Defining Functions in Idea

在 Idea和MATLAB声明函数之间的主要区别在于 Idea需要声明参数类型和维度。因此,例如,多输出MATLAB函数声明为

[A,B] = func(C,D,E) {A = ..B = ..}

Idea中该函数声明为:A,B func(float C[r][c], int D, complex E[n]) {A[r][c] = .. // type derived from rhs of expressionint B[n] = .. // type set to int and may force type conversion}可以看出所有的 Idea函数参数需要声明类型和维度。输出 A和 B-作为等式左边的表达式-必须在函数体中声明他们的 range型变量。尽管如此,输出参数类型的声明可以省略,如果可以明确地从等式右边表达式中获取。

muhongqiang
高亮
muhongqiang
高亮
muhongqiang
高亮
muhongqiang
高亮
muhongqiang
高亮
muhongqiang
高亮
muhongqiang
高亮

技术支持工程师:母洪强 13305188718 15

Discussion

MATLAB Features not Directly Supported in Idea

Recursion递归

递归函数不能写成 Idea。不限制运行时间的递归 Idea 中永远是不可能的,虽然

固定深度的递归可在编译时实现。

Data Dependent Casting

表达式 sqrt(-1.0) 虽然在 MATLAB 中合法而 Idea 非法。因为到 sqrt 参数类

型是浮点类型输出也默认是浮点类型。然而 complex I =-1 ;z = sqrt(I)在

Idea 中正常工作。

No Variable Length Arguments

目前 Idea 中有固定的参数列表的函数不能设置默认值。Idea 可能扩展额外的语

法用来设置参数默认值和使用这些值,如果正在调用的参数列表被截断。

Utilization of Unindexed Arrays in Algebraic Expressions

目前在 MATLAB 中:

A = B+C;

在 Idea 中必须如下表达:

A[r][c] = B[r][c] + C[r][c];

Idea 语言的演进将通过外力来引导。这可能包括采用一些矩阵代数语法来减少

使用索引。

Importing external libraries and source code into Idea

Kernels

将外部库和源代码通过使用 Idea 的内核合并到 Gedae 是直白的。内核可以说是

Gedae 应用的叶状节点。内核既可以被显式地通过名字添加到一个框图,也可以

基于等式字段在表达式中引用。绝对值内核的一个例子是:

Name: sf_absEquation: out = abs(in);Type: stream

muhongqiang
高亮
muhongqiang
高亮
muhongqiang
高亮
muhongqiang
高亮
muhongqiang
高亮
muhongqiang
高亮
muhongqiang
高亮
muhongqiang
高亮
muhongqiang
高亮

技术支持工程师:母洪强 13305188718 16

Comment: "Absolute Value"Input: {stream float in;}Output: {inplace stream float out={in};}Include: {#include <e_vabs.h>}Exec: {e_vabs(in,1,out,1,size(in)); /* vector absolute value */}

在等式字段登记这个内核(供编译器使用),可以在 Idea 表达式中使用 abs()函

数。有适合其他令牌和数据类型等功能的内核。可以方便地想到用一个内核像定

义一个函数,但输入,输出和方法有更丰富的语义。在这个例子中的 exec 字段

用于创建执行方法,处理流输入和输出。输入或输出可以是一个数据流或一个参

数,并且一个流的输入或输出可以保持用于 N次执行。可以有一个本地字段具有

持久性(状态)数据,并通过 reset 方式在适当的时候复位状态到初始值。在在

这个例子中 E函数(E_前缀)是 Gedae 的 C 代码函数和对于每个目标平台优化的

代码库。编译器会适当替换 C代码的优化版本。文档“Kernel Reference

Manual.docx”详细解释了内核。

MATLAB functions provided in Idea

Gedae 有一个重要且不断增长的函数库,可以直接供编译器使用实现 Idea 代码。

许多这些函数是核心的 MATLAB 函数。Gedae 正在不断增加函数到标准库。有点

类似于 Matlab 工具箱函数。有一件事值得一提,就是在 Gedae 库提供的所有函

数都是免费的和开源的。

Standard C Library functions

Gedae 提供的标准 C库函数重载来处理所有的 Idea 基本数据类型。这些函数也

涵盖了许多 MATLAB 提供的相同函数。

MATLAB Toolbox Functions

Gedae和京汇公司可酌情或根据开发委托商的合同实现所需的MATLAB工具函数。

muhongqiang
高亮
muhongqiang
高亮
muhongqiang
高亮
muhongqiang
高亮
muhongqiang
高亮
muhongqiang
高亮

技术支持工程师:母洪强 13305188718 17

Regression testing – comparing MATLAB output to

Idea output

Gedae 提供.m 函数(供 MATLAB 或 Octave 使用),创建 Gedae 数据探测文件。

这些文件可以与 Gedae 探针工具一起使用,以验证的 MATLAB 代码转换成的

Idea 语言。详细信息请参阅文档。

注:Octave 是一个旨在提供与 Matlab 语法相容的开放源码科学计算及数值分析

的工具;它同时也是 GNU 计划成员之一。其名称与音乐上的八度没有直接关系。

该软件乃是以一位早期开发群的成员,同时也以敏于处理数值逼近问题著称的前

教授命名。Octave 语言是直译式及结构化(类于第二代的 BASIC)的编程语言,

支持许多 C语言风格的标准函式功能,它的语法基本上与 Matlab 一致,严谨编

写的程式码应同时可在 Matlab 及 Octave 执行。但若调用了 Matlab 工具包,则

一般不能直接在 Octave 上运行,因为 Octave 附带的工具包与 Matlab 并不兼容。

由于 Octave 是以 GNU 通用公共许可证授权,所以可以自由地复制、流通与使用。

Octave 可在大部份的类 Unix 操作系统中执行,亦可在 Microsoft Windows 中执

行。在 Mac OS X 中运行也是可能的,但设置较为复杂。来自维基百科。

muhongqiang
铅笔