# Builtin - 数学 / 数值方法 ## `any(data, n)` 判断任意值或数组或数组其行列数据的真假,集合中只要有一个元素是真则为真。 | 参数 | 类型 | 说明 | | ------ | ------- | ----------------------------------------------------------------------- | | `data` | any | 当N缺省或取默认值0时,可以为任意数据,否则只能是数组。 | | `n` | integer | 若取值0,对Data整体判断,如果Data是数组,则对所有元素进行判断,缺省值。 | 返回:real/table ### 示例 范例一: ```tsl // 判断非数组的真假 return any('a', 0); // 输出: // 1 ``` 范例二: ```tsl // 判断特殊数据类型的真假 return any(array(1, '', ' ', nan, nil, inf, -inf, array()), 1); // 结果 ``` 范例三: ```tsl // 判断二维数组的行 f := array('e': ('A': 1, 'B': 0), 'f': ('A': 2, 'B': ''), 'd': ('A': 3, 'B': nil)); return any(f, 1); // 输出:’e’,’f’,’d’为行标,表示该行结果。其中,’d’行中,对集合(3,nil)判断为真,则该行值判断结果为1,’B’列中。 ``` 范例四: ```tsl // 判断多维数组的行 t := array('e': ('A': 0, 'B': 0), 'f': ('A': 2, 'B': array(1, 0))); return any(t, 1); // 输出:’f’行中对集合(0,array(1,0))->(0,1)->1,则该列结果为1 ``` 范例五: ```tsl // 判断多维数组的列 t := array('e': ('A': 1, 'B': 1), 'f': ('A': 2, 'B': array(1, 0))); return any(t, 2); // 结果 ``` ## `all(data, n)` 所有为真,判断任意值或数组或数组其行列数据的真假,集合中只要有一个元素为假则为假。 | 参数 | 类型 | 说明 | | ------ | ------- | ------------------------------------------------------------------------- | | `data` | any | 当N缺省或取默认值0时,可以为任意数据,否则只能是数组。 | | `n` | integer | 若值为0,则对Data整体判断,如果Data是数组,则对所有元素进行判断,缺省值。 | 返回:real/table ### 示例 范例一: ```tsl // 判断数组中所有元素是否都为真 return all(array(1, 2, -1, 1, 9)); // 输出: // 1 ``` 范例二: ```tsl // 判断特殊数据类型的真假 return all(array(1, '', ' ', nan, nil, inf, -inf, array()), 1); // 结果 ``` 范例三: ```tsl // 判断二维数组的行 f := array('e': ('A': 1, 'B': 0), 'f': ('A': 2, 'B': 3), 'd': ('A': 3, 'B': nil)); return all(f, 1); // 输出:’e’,’f’,’d’为行标,表示该行判断结果。其中,’d’行中,对集合(3,nil)判断为假,因为其中nil判断为假。 ``` 范例四: ```tsl // 判断多维数组的行 t := array('e': ('A': 1, 'B': 1), 'f': ('A': 2, 'B': array(1, 0))); return all(t, 1); // 输出:’f’行中对集合(2,array(1,0))->(1,0)->0,则该行结果为0 ``` 范例五: ```tsl // 判断多维数组的列 t := array('e': ('A': 1, 'B': 1), 'f': ('A': 2, 'B': array(1, 0))); return all(t, 2); // 输出:’B’列中对集合(1,array(1,0))->(1,0)->0,则该行结果为0 ``` ## `conv(a, b)` 计算输入序列A、B的卷积 | 参数 | 类型 | 说明 | | ---- | ----- | ------------ | | `a` | array | 一维数字数组 | | `b` | array | 一维数字数组 | 返回:array ### 示例 ```tsl a := array(0.4044, 0.32362, 0.38548, 0.17435, 0.08502, 0.41899, 0.02551, 0.46226); b := array(0.82284, 0.7466, 0.17411, 0.85894, 0.7105, 0.51353, 0.30399, 0.01498, 0.0914, 0.36445, 0.14731, 0.1659, 0.98853, 0.44569, 0.11908); return conv(a, b); ``` ## `setSysParams(params)` 一次性设置整个系统参数。 | 参数 | 类型 | 说明 | | -------- | ----- | ---- | | `params` | array | | 返回:integer ### 示例 ```tsl s0 := getSysParams(); echo toStn(s0), '\r\n'; r := setSysParams(array("StockID": "SZ000001")); s1 := getSysParams(); echo r, ':', toStn(s1), '\r\n'; // 打印结果: ``` ## `GM_Icorr(values, target_index)` 计算灰色关联分析结果。 | 参数 | 类型 | 说明 | | -------------- | ----- | -------------- | | `values` | array | 待分析序列矩阵 | | `target_index` | any | 参考序列下标 | 返回:array ## `se_Gauss(a, b, x)` 用全选主元高斯消去法求解n阶线性方程组AX = B | 参数 | 类型 | 说明 | | ---- | ----- | ---- | | `a` | array | | | `b` | array | | | `x` | array | | 返回:any ## `se_Gauss_Jordan(a, b, x)` 用全主元高斯-约当(Gauss-Jordan)消去法同时求解系数矩阵相同而常数向量不同的m个n阶线性方程组AX = B | 参数 | 类型 | 说明 | | ---- | ----- | ---- | | `a` | array | | | `b` | array | | | `x` | array | | 返回:any ## `se_Ldl(a, b, x)` 用LU分解法求解系数矩阵为对称、右端具有m组常数向量的线性方程组 AX = B | 参数 | 类型 | 说明 | | ---- | ----- | ---------------------------------------------------------------------------- | | `a` | array | 实型二维数组,大小为NN。存放方程组的系数矩阵,此系数矩阵必须为对称矩阵(即) | | `b` | array | 实型二维数组,大小为NM。存放方程组右端的常数向量 | | `x` | array | 实型一维数组,大小为NM。返回方程组的解向量 | 返回:any ## `se_Cholesky(a, b, x)` 用乔列斯基(Cholesky)分解法(即平方根法)求解系数矩阵为对称正定、且右端具有m组常数向量的线性方程组AX = B | 参数 | 类型 | 说明 | | ---- | ----- | ---------------------------------------------------------------------------- | | `a` | array | 实型二维数组,大小为NN。存放方程组的系数矩阵,此系数矩阵必须为对称矩阵(即) | | `b` | array | 实型二维数组,大小为NM。存放方程组右端的常数向量 | | `x` | array | 实型一维数组,大小为NM。返回方程组的解向量 | 返回:any ## `se_Gauss_Seidel(a, b, x)` 用高斯-赛德尔迭代法求解系数矩阵具有主元占优的线性方程组AX = B | 参数 | 类型 | 说明 | | ---- | ----- | ------------------------------------------ | | `a` | array | 实型二维数组,NN。存放方程组的系数矩阵 | | `b` | array | 实型二维数组,NM。存放方程组右端的常数向量 | | `x` | array | 实型一维数组,NM。返回方程组的解向量 | 返回:any ## `ip_SLQ(x, y, z, xv, yv, zv)` 根据给定矩形域上的nXm个结点(i=0,1…..n-1;j = 0 , 1, ….., m-1)上的函数值Zij = Z(Xi,Yj),利用二元三点插值公式计算指定插值点(u,v)处的函数值w=Z(u,v) | 参数 | 类型 | 说明 | | ---- | ----- | --------------------------------------------------------------------------- | | `x` | array | 实型一维数组,长度为N。存放给定nXm个点的X方向上的n个坐标,要求X010; b := 3->7; return histc2(a, b); // 输出:array(0,0,1,1,2,3,4,0,0,0) ``` ## `chckxy(x, y)` 合并x,y后对x列正序排列。 | 参数 | 类型 | 说明 | | ---- | ----- | -------- | | `x` | array | 一维数组 | | `y` | array | 一维数组 | 返回:array ### 示例 ```tsl uses interp_unit; // 置顶 x := array(5, 1, 19, 8); y := array(2, 3, 1, 7); chckxy(x, y); return x | y; // 输出: // Execute script error at Line:4 // function:__main__:line 4:instruction:usercall: function:chckxy compile error or not found // function:__main__:line 4:instruction:usercall: function execute error ``` ## `nearest(x, y, xi)` 最邻近插值 | 参数 | 类型 | 说明 | | ---- | ----- | ------------------- | | `x` | array | 一维数组 横坐标序列 | | `y` | array | 一维数组 纵坐标序列 | | `xi` | array | 一维数组 插值点序列 | 返回:array ### 示例 ```tsl uses interp_unit; // 置顶 x := array(5, 1, 19, 8); y := array(2, 3, 1, 7); xi := array(4, 12); return nearest(x, y, xi); // 输出:array(3,1) ``` ## `linear(x, y, xi)` 线性插值 | 参数 | 类型 | 说明 | | ---- | ----- | ------------------- | | `x` | array | 一维数组 横坐标序列 | | `y` | array | 一维数组 纵坐标序列 | | `xi` | array | 一维数组 插值点序列 | 返回:array ### 示例 ```tsl uses interp_unit; // 置顶 x := array(5, 1, 19, 8); y := array(2, 3, 1, 7); xi := array(4, 12); return linear(x, y, xi); // 输出:array(2.6667,1.7778) ``` ## `pchip(x, y, xx)` 分段三次hermite插值 | 参数 | 类型 | 说明 | | ---- | ----- | ------------------- | | `x` | array | 一维数组 横坐标序列 | | `y` | array | 一维数组 纵坐标序列 | | `xx` | array | 一维数组 插值点序列 | 返回:array ### 示例 ```tsl uses interp_unit; // 置顶 x := array(5, 1, 19, 8); y := array(2, 3, 1, 7); xx := array(4, 12); return pchip(x, y, xx); // 输出:array(3.3403,6.9345) ``` ## `pwch(x, y, s, dx, divdif)` 计算下x,y所对应的不同间隔区间。 | 参数 | 类型 | 说明 | | -------- | ----- | -------- | | `x` | array | 一维数组 | | `y` | array | 一维数组 | | `s` | array | 一维数组 | | `dx` | array | 一维数组 | | `divdif` | array | 一维数组 | 返回:array ## `ppval(pp, xx)` 对插值点列的值数据区间中计算出插值。 | 参数 | 类型 | 说明 | | ---- | ----- | ------------------------------- | | `pp` | array | 二维数组 包含列"x","coefs" | | `xx` | array | 一维数组 插值点序列 | 返回:array ## `ig_Trapezoid_1(a, b, call_back, v)` 用变步长梯形求积法计算定积分 | 参数 | 类型 | 说明 | | ----------- | ------ | ------------------------ | | `a` | float | 实型变量。积分下限 | | `b` | float | 实型变量。积分上限 | | `call_back` | string | 计算被积函数值的回调 | | `v` | float | 实型变量,返回的积分结果 | 返回:any ## `ig_Trapezoid_2(a, b, call_back, v)` 用自适应梯形求积法计算定积分 | 参数 | 类型 | 说明 | | ----------- | ------ | ------------------------ | | `a` | float | 实型变量。积分下限 | | `b` | float | 实型变量。积分上限 | | `call_back` | string | 计算被积函数值的回调 | | `v` | float | 实型变量,返回的积分结果 | 返回:any ## `ig_Simpson_1(a, b, call_back, v)` 用变步长辛普森(Simpson)计算定积分 | 参数 | 类型 | 说明 | | ----------- | ------ | ------------------------ | | `a` | float | 实型变量。积分下限 | | `b` | float | 实型变量。积分上限 | | `call_back` | string | 计算被积函数值的回调 | | `v` | float | 实型变量,返回的积分结果 | 返回:any ## `ig_Simpson_2(a, b, call_back1, call_back2, call_back3, v)` 用变步长辛普森(Simpson)计算二重积分 | 参数 | 类型 | 说明 | | ------------ | ------ | ------------------------------ | | `a` | float | 实型变量。积分下限 | | `b` | float | 实型变量。积分上限 | | `call_back1` | string | 计算积分下限的回调 | | `call_back2` | string | 计算积分上限的回调 | | `call_back3` | string | 计算被积函数f(x,y)函数值的回调 | | `v` | float | 实型变量,返回的积分结果 | 返回:any ## `ig_Romberg(a, b, call_back, v)` 用龙贝格(Romberg)求积法计算定积分, | 参数 | 类型 | 说明 | | ----------- | ------ | ------------------------ | | `a` | float | 实型变量。积分下限 | | `b` | float | 实型变量。积分上限 | | `call_back` | string | 计算被积函数值的回调 | | `v` | float | 实型变量,返回的积分结果 | 返回:any ## `sendToClient(cmd_type, cmd_text, cmd_param, cmd_data, time_out)` 发送命令到客户端执行。 | 参数 | 类型 | 说明 | | ----------- | ----------- | -------------------------- | | `cmd_type` | string | 命令类型。 | | `cmd_text` | string | 命令串。 | | `cmd_param` | any | 命令参数。 | | `cmd_data` | any | 命令数据。 | | `time_out` | integer=300 | 超时的秒数。默认是300s超时 | 返回:any ### 示例 ```tsl // 1)执行命令:return 100+1 return sendToClient("getdo", "return 100 + 1;", nil, nil); // 输出:101 // 2)采用系统参数取得数据,将取得的数据相加,并设置超时时间为30s return sendToClient("getdo", "return getsysparam('a') + getsysparam('b');", nil, array("a": 10, "b": 30), 30); // 输出:40 ``` ## `setGlobalCache(name, value)` 写入全局缓存。 | 参数 | 类型 | 说明 | | ------- | ------ | ------------ | | `name` | string | 缓存键 | | `value` | any | 写入缓存的值 | 返回:any