68 KiB
Builtin - 数学 / 数值方法
any(data, n)
判断任意值或数组或数组其行列数据的真假,集合中只要有一个元素是真则为真。
| 参数 | 类型 | 说明 |
|---|---|---|
data |
any | 当N缺省或取默认值0时,可以为任意数据,否则只能是数组。 |
n |
integer | 若取值0,对Data整体判断,如果Data是数组,则对所有元素进行判断,缺省值。 |
返回:real/table
示例
范例一:
// 判断非数组的真假
return any('a', 0);
// 输出:
// 1
范例二:
// 判断特殊数据类型的真假
return any(array(1, '', ' ', nan, nil, inf, -inf, array()), 1);
// 结果
范例三:
// 判断二维数组的行
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’列中。
范例四:
// 判断多维数组的行
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
范例五:
// 判断多维数组的列
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
示例
范例一:
// 判断数组中所有元素是否都为真
return all(array(1, 2, -1, 1, 9));
// 输出:
// 1
范例二:
// 判断特殊数据类型的真假
return all(array(1, '', ' ', nan, nil, inf, -inf, array()), 1);
// 结果
范例三:
// 判断二维数组的行
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判断为假。
范例四:
// 判断多维数组的行
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
范例五:
// 判断多维数组的列
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
示例
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
示例
s0 := getSysParams();
echo toStn(s0), '\r\n';
r := setSysParams(array("StockID": "SZ000001"));
s1 := getSysParams();
echo r, ':', toStn(s1), '\r\n';
// 打印结果:
SelectStockIndex_Call(stock_arr, beg_t, end_t, select_cond, not_is_sell, sell_cond, not_need_stoped)
返回选股结果
| 参数 | 类型 | 说明 |
|---|---|---|
stock_arr |
array | 一维字符串数组,证券代码 |
beg_t |
datetime | 日期型时间,开始选股时间 |
end_t |
datetime | 日期型时间,结束选股时间 |
select_cond |
any | 布尔表达式,选股条件 |
not_is_sell |
bool | object |
sell_cond |
any | 布尔表达式,卖出股票条件 |
not_need_stoped |
bool | object |
返回:array
Demo_ip_Hermite_B()
ip_Hermite_B()函数教学函数。埃尔米特等距插值,计算给定插值点处的函数值。
返回:float
Demo_ip_SLG()
ip_SLG()函数教学函数。二元全曲间插值,计算给定插值点处的函数值。
返回:float
Demo_ip_SLQ()
ip_SLQ()函数教学函数。二元三点插值,计算给定插值点处的函数值。
返回:float
Demo_ip_Aitken_A()
ip_Aitken_A()函数教学函数。埃特金不等距插值,计算给定插值点处的函数值。
返回:float
Demo_ip_Hermite_A()
ip_Hermite_A()函数教学函数。埃儿米特不等距插值,计算给定插值点处的函数值。
返回:float
Demo_ip_Parabola_A()
ip_Parabola_A()函数教学函数。抛物线不等距插值,计算给定插值点处的函数值。
返回:float
Demo_ip_Lagrangian_A()
ip_Lagrangian_A()函数教学函数。拉格朗日不等距插值,计算给定插值点处的函数值。
返回:float
Demo_ip_Spline_A()
ip_Spline_A ()函数教学函数。第一类边界条件的三次样条插值,计算给定插值点处的函数值。
返回:float
Demo_ip_Aitken_B()
ip_Aitken_B()函数教学函数。埃特金等距插值,计算给定插值点处的函数值。
返回:float
Demo_ip_Lagrangian_B()
ip_Lagrangian_B()函数教学函数。拉格朗日等距插值,计算给定插值点处的函数值。
返回:float
Demo_ip_Spline_B()
ip_Spline_B ()函数教学函数。第二类边界条件的三次样条插值,计算给定插值点处的函数值。
返回:float
Demo_ip_Parabola_B()
ip_Parabola_B ()函数教学函数。抛物线等距插值,计算给定插值点处的函数值。
返回:float
Demo_ip_Spline_C()
ip_Spline_C ()函数教学函数。第三类边界条件的三次样条插值,计算给定插值点处的函数值。
返回:float
Demo_ig_Simpson_1()
ig_Simpson_1()函数教学函数。辛普森求积法回调函数,计算定积分。
返回:float
Demo_ig_Romberg()
ig_Romberg()函数教学函数。龙贝格求积法回调函数,计算定积分。
返回:float
Demo_ig_Simpson_2()
ig_Simpson_2()函数教学函数。辛普森二重积分法回调函数,计算定积分。
返回:float
Demo_ig_Trapezoid_2()
Demo_ig_Trapezoid_2()函数教学函数。自适应梯形求积法回调函数,计算定积分。
返回:float
Demo_ig_Chebyshev()
Demo_ig_Chebyshev()函数教学函数。切比雪夫求积法回调函数,计算定积分。
返回:float
Demo_ig_Gauss()
Demo_ig_Gauss()函数教学函数。高斯求积法回调函数,计算定积分。
返回:float
Demo_ig_Trapezoid_1()
Demo_ig_Trapezoid_1()函数教学函数。变步长梯形求积法回调函数,计算定积分。
返回:float
ig_Trapezoid_2CallBack(x)
自适应梯形求积法回调函数。关于自变量x的函数式,一般作用于定积分计算的被积函数。
| 参数 | 类型 | 说明 |
|---|---|---|
x |
float | 实数 |
返回:float
ig_Trapezoid_1CallBack(x)
变步长梯形求积法回调函数。关于自变量x的函数式,一般作用于定积分计算的被积函数。
| 参数 | 类型 | 说明 |
|---|---|---|
x |
float | 实数 |
返回:float
ig_Simpson_2CallBack2(x)
辛普森二重积分法积分上限回调函数。关于自变量x的函数式,一般作用于定积分计算的被积函数。
| 参数 | 类型 | 说明 |
|---|---|---|
x |
float | 实数 |
返回:float
ig_Simpson_1CallBack(x)
辛普森求积法回调函数。关于自变量x的函数式,一般作用于定积分计算的被积函数。
| 参数 | 类型 | 说明 |
|---|---|---|
x |
float | 实数 |
返回:float
ig_Simpson_2CallBack1(x)
辛普森二重积分法积分下限回调函数。关于自变量x的函数式,一般作用于定积分计算的被积函数。
| 参数 | 类型 | 说明 |
|---|---|---|
x |
float | 实数 |
返回:float
ig_ChebyshevCallBack(x)
切比雪夫求积法回调函数。关于自变量x的函数式,一般作用于定积分计算的被积函数。
| 参数 | 类型 | 说明 |
|---|---|---|
x |
float | 实数 |
返回:float
ig_RombergCallBack(x)
龙贝格求积法回调函数。关于自变量x的函数式,一般作用于定积分计算的被积函数。
| 参数 | 类型 | 说明 |
|---|---|---|
x |
float | 实数 |
返回:float
ig_GaussCallBack(x)
高斯求积法回调函数。关于自变量x的函数式,一般作用于定积分计算的被积函数。
| 参数 | 类型 | 说明 |
|---|---|---|
x |
float | 实数 |
返回:float
ig_Simpson_2CallBack(x, y)
辛普森二重积分法函数值回调函数。关于自变量x的函数式,一般作用于定积分计算的被积函数。
| 参数 | 类型 | 说明 |
|---|---|---|
x |
float | 实数 |
y |
float | 实数 |
返回:float
Demo_se_Gauss_Jordan()
se_Gauss_Jordan()函数教学函数。高斯-约当消去法,用全主元高斯-约当法消去法同时求解系数矩阵相同而常数向量不同的m个n阶线性方程组AX = B,其中A=array((0.2368,0.2471,0.2568,1.2671),(0.1968,0.2071,1.2168,0.2271),(0.1581,1.1675,0.1768,0.1871), (1.1161,0.1254,0.1397,0.1490)),B=array((1.8471),(1.7471),(1.6471),(1.5471))。
返回:any
Demo_se_Ldl()
se_Ldl()函数教学函数。LU分解法,用LU分解法求解系数矩阵为对称、右端具有m组常数向量的线性方程组 AX =B,其A=array((5,7,6,5,1),(7,10,8,7,2),(5,7,9,10,4),(1,2,3,4,5)),B=array((24,96),(34,136),(36,144),(35,140),(15,60));
返回:any
Demo_se_Gauss()
se_Gauss()函数教学函数。高斯消去法,用全选主元高斯消去法求解n阶线性方程组AX = B。其中A=array((0.2368,0.2471,0.2568,1.2671),(0.1968,0.2071,1.2168,0.2271),(0.1581,1.1675,0.1768,0.1871),(1.1161,0.1254,0.1397,0.1490)),B= array(1.8471,1.7471,1.6471,1.5471)
返回:any
Demo_se_Gauss_Seidel()
se_Gauss_Seidel()函数教学函数。高斯-赛德尔迭代法,用高斯-赛德尔迭代法求解系数矩阵具有主元占优的线性方程组AX = B。其中A=array((7,2,1,-2), (9,15,3,-2),(-2,-2,11,5),(1,3,2,13)),B=array(4,7,-1,0)。
返回:any
Demo_se_Cholesky()
se_Cholesky()函数教学函数。乔列斯基分解法,用乔列斯基(Cholesky)分解法(即平方根法)求解系数矩阵为对称正定、且右端具有m组常数向量的线性方程组AX = B。其中A=array((5,7,6,5),(7,10,8,7),(6,8,10,9),(5,7,9,10)),B= array((23,92),(32,128), (33,132), (31,124))。
返回:any
GM_Icorr(values, target_index)
计算灰色关联分析结果。
| 参数 | 类型 | 说明 |
|---|---|---|
values |
array | 待分析序列矩阵 |
target_index |
any | 参考序列下标 |
返回:array
nchoosek(n, k)
样本组合
| 参数 | 类型 | 说明 |
|---|---|---|
n |
array | 样本(一维数组) |
k |
integer | 每组样本数量(整数) |
返回:array
示例
Returnnchoosek(array('a', 'b', 'c', 'd'), 2);
// 输出:
array(
("d", "c"),
("d", "b"),
("d", "a"),
("c", "b"),
("c", "a"),
("b", "a"))
betainc(x, a, b, tail)
不完全贝塔函数
| 参数 | 类型 | 说明 |
|---|---|---|
x |
array | (一维数字数组,实数) 变量 要求0<=x<=1; |
a |
float | float 不完全贝塔函数的参数 要求a>=0; |
b |
float | float 不完全贝塔函数的参数 要求b>=0; |
tail |
string | 返回类型 |
返回:array
示例
a := 3;
b := 4;
tail := 'upper';
x := rand(10);
return array(betainc(x, a, b), betainc(x, a, b, tail));
// 输出:
// Execute script error at Line:5
// function:__main__:line 5:instruction:usercall: function:betainc compile error or not found
// function:__main__:line 5:instruction:usercall: function execute error
percentileOfScore(data, score, _type)
百分位占比(%)
| 参数 | 类型 | 说明 |
|---|---|---|
data |
array | 数组 待处理数据, |
score |
float | float 待排序值, |
_type |
integer | 算法 |
返回:array
示例
// 去除随机数组的极值
data := array(1, 2, 2, 4);
ret := array();
n := 0;
for i := 0 to 5 do
begin
ret[n, 'score'] := i;
for j, kind in array('rank', 'strict', 'weak', 'mean')do
begin
ret[n, kind] := percentileOfScore(data, i, j);
end
ret[n, 'percenrank'] := percentrank(data, i);
n++;
end;
return ret;
// 输出:
// 示例包含说明文字,未作为可执行片段运行。
Prog_Q(h, f, a, b, aeq, beq, lower_bounds, upper_bounds)
求解带线性约束和边界约束的二次规划问题。
| 参数 | 类型 | 说明 |
|---|---|---|
h |
array | 二次项系数矩阵 |
f |
array | 一次项系数 |
a |
array | 线性不等式约束左侧矩阵 |
b |
array | 线性不等式约束右侧向量 |
aeq |
array | 线性等式约束左侧矩阵 |
beq |
array | 线性等式约束右侧向量 |
lower_bounds |
array | 变量下界 |
upper_bounds |
array | 变量上界 |
返回: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
interp(x, y, xi, method)
分段插值函数,根据给定的数据 x,y 对数据xv进行分段插值,可选择方法
| 参数 | 类型 | 说明 |
|---|---|---|
x |
array of real | 实型一维数组,长度为N。存放给定N个点的值Xi,要求X0<X1...<Xn-1 |
y |
array of real | 实型一维数组,长度为N。存放N个给定点上的函数值Yi |
xi |
array of real | 实数或者一维实数数组,存放指定插值点的值 |
method |
string | 方法选择,具体取值如下: |
返回:array
示例
x := array(0, 0.01)->1;
y := x^2-x;
xi := array(0.005, 0.01)->1;
yi := interp(x, y, xi, 'spline');
return yi;
// 结果:6
1、"nearest"
x_ := array(5, 1, 19, 8);
y_ := array(2, 3, 1, 7);
xi := array(4, 12);
return interp(x_, y_, xi, "nearest");
// 返回: array(2,7)
2、" linear" 分段线性插值
x_ := array(5, 1, 19, 8);
y_ := array(2, 3, 1, 7);
xi := array(4, 12);
return interp(x_, y_, xi, "linear");
// 返回: array(2.25,4.8182)
3、"spline" 三次样条插值
x_ := array(5, 1, 19, 8);
y_ := array(2, 3, 1, 7);
xi := array(4, 12);
return interp(x_, y_, xi, "spline");
// 返回: array(1.1407,13.9444)
4、"pchip" 分段三次hermite插值
x_ := array(5, 1, 19, 8);
y_ := array(2, 3, 1, 7);
xi := array(4, 12);
return interp(x_, y_, xi, "pchip");
// 返回: array(2.0156,6.7115)
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个坐标,要求X0<X1...<Xn-1 |
y |
array | 实型一维数组,长度为N。存放给定nXm个点的X方向上的m个坐标,要求Y0<Y1...<Ym-1 |
z |
array | 实型二维数组,体积为为nXm。存放给定nXm个点上的函数值 |
xv |
float | 实型变量,插值点的X坐标 |
yv |
float | 实型变量,插值点的Y坐标 |
zv |
float | 实型变量,返回的插值结果 |
返回:any
ip_SLG(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个坐标,要求X0<X1...<Xn-1 |
y |
array | 实型一维数组,长度为N。存放给定nXm个点的X方向上的m个坐标,要求Y0<Y1...<Ym-1 |
z |
array | 实型二维数组,体积为为nXm。存放给定nXm个点上的函数值 |
xv |
float | 实型变量,插值点的X坐标 |
yv |
float | 实型变量,插值点的Y坐标 |
zv |
float | 实型变量,返回的插值结果 |
返回:any
histc2(a, b)
记录a中的元素在b中第几个区间的位置
| 参数 | 类型 | 说明 |
|---|---|---|
a |
array | 一维数组 |
b |
array | 一维数组 |
返回:array
示例
uses interp_unit; // 置顶
a := 1->10;
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
示例
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
示例
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
示例
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
示例
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
spline(x1, y1, xx1)
三次样条插值
| 参数 | 类型 | 说明 |
|---|---|---|
x1 |
array | 一维数字数组 横坐标序列 |
y1 |
array | 一维数字数组 纵坐标序列 |
xx1 |
array | 实数或一维数字数组 插值 |
返回:array
示例
x := array(5, 1, 19, 8);
y := array(2, 3, 1, 7);
xx := array(4, 12);
return spline(x, y, xx);
// 返回:array(1.1407,13.9444)
integral(call_back, a, b, method)
求函数的数值积分
| 参数 | 类型 | 说明 |
|---|---|---|
call_back |
string | 计算被积函数值的回调 |
a |
double | 实型变量。积分下限 |
b |
double | 实型变量。积分上限 |
method |
string | 积分方法 |
返回:double
示例
a := 1;
b := 3;
callback := "fun1";
return integral(callback, a, b, ’romberg’);
// 其中fun1函数:
function fun1(x)
begin
return 2 * x+1;
end;
// 结果:10
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
hessian(fun, x)
海塞矩阵 求解函数 fun 在x点的 海塞矩阵;
| 参数 | 类型 | 说明 |
|---|---|---|
fun |
string | 字符串,函数名 |
x |
array | 一维数组,指定点 |
返回:array
示例
return hessian("Hessian.demo", array(3, 4));
ig_Romberg(a, b, call_back, v)
用龙贝格(Romberg)求积法计算定积分,
| 参数 | 类型 | 说明 |
|---|---|---|
a |
float | 实型变量。积分下限 |
b |
float | 实型变量。积分上限 |
call_back |
string | 计算被积函数值的回调 |
v |
float | 实型变量,返回的积分结果 |
返回:any
perms(x)
样本排列
| 参数 | 类型 | 说明 |
|---|---|---|
x |
array | 样本,数组或数字 |
返回:array
示例
范例01:求10的阶乘
return perms(10);
// 输出:3628800
范例02:排列组合
return perms(array("a", "b", "c"));
// 输出:
array(
("c", "b", "a"),
("c", "a", "b"),
("b", "c", "a"),
("b", "a", "c"),
("a", "b", "c"),
("a", "c", "b"))
范例03:返回数组Array(('A','B'),('C', 'D'))中任意两个数据的排列组合
v := Array(('A', 'B'), ('C', 'D'));
return perms(v, 2);
// 输出:
// Execute script error at Line:2
// function:__main__:line 2:instruction:usercall: function:perms compile error or not found
// function:__main__:line 2:instruction:usercall: function execute error
范例04:对排列组合的每列求和
function test_1cth();
begin
func := createobject("funcexe");
a := array("A", "B", "C");
return perms(a, 3, func);
end;
type funcexe = class()
data;
function create();
begin
data := "";
end
function exe(dat);
begin
data+=dat;
end
end
// 输出:
// Execute script error at Line:0
maxDrawDown(data, updn, interval, ifabs)
最大回撤
| 参数 | 类型 | 说明 |
|---|---|---|
data |
array | 一维数字序列 |
updn |
bool | 涨跌标示符。1为求最大涨,0为求最大跌(默认值) |
interval |
integer | 最大区间,为空或者小于1时,求整个区间(默认值) |
ifabs |
float | 预留字段,暂时没有实际意义,可不给值 。 |
返回:real/table
示例
范例01:
// 计算一组序列的最大涨幅
data := array(3, 1, 7, 5, 6, 3);
return maxDrawDown(data, 1);
// 结果:
1
2
6
6
// 输出:说明:入点为data[1],出点为data[2],两者差为6,最大涨幅比例差为6
范例02:
// ------计算100日股票的最大跌幅
setSysParam(pn_stock(), 'SZ000002');
setSysParam(pn_date(), 20181031T);
setSysParam(pn_rate(), 1);
setSysParam(pn_rateday(), 20181031T);
setSysParam(pn_cycle(), cy_day());
data := nDay3(100, close());
t := maxDrawDown(data);
return t;
// 结果t:
12
43
6.96759
0.25765
// 注:若需计算最大跌幅率,则只需t[3] * 100即可。
minRecoveryTime(r, n1, n2)
最小恢复时间
| 参数 | 类型 | 说明 |
|---|---|---|
r |
array | (一维数字数组) 序列, |
n1 |
integer | Int 买入点位置, |
n2 |
integer | Int 卖出点位置 |
返回:integer
示例
// 科大讯飞(SZ002230)在20201220最近十个交易日序列中第一天购买第二天卖出后的最小恢复时间
setSysParam(pn_stock(), "SZ002230");
setSysParam(PN_Date(), 20201220t);
r := nDay(10, "close", close())[: , "close"];
return minRecoveryTime(r, 0, 1);
// 输出:6
generateCombinations(list, ret, start, n)
非空全组合生成器
| 参数 | 类型 | 说明 |
|---|---|---|
list |
array | 一维数组 样本, |
ret |
array | 返回生成的组合数组, |
start |
integer | Int 选取起始数据的位置, |
n |
integer | Int 记录每组数据的起始位置, |
返回:integer
示例
list := array('a', 'b', 'c');
generateCombinations(list, ret);
return ret;
// 输出:
// Execute script error at Line:2
// function:__main__:line 2:instruction:usercall: function:generateCombinations compile error or not found
// function:__main__:line 2:instruction:usercall: function execute error
percentage(y, per, style)
百分位去极值
| 参数 | 类型 | 说明 |
|---|---|---|
y |
array | 数字数组,待处理数据 |
per |
real|array | 实数或者一维数字数组,去极值百分位;5表示 5%; |
style |
integer | 整数,0 或者不输入时 去 百分位大于 per 和小于per的;1, 去除小于per的;2 去除 大于per的 数据 |
返回:array
示例
y := rand(100, 2);
per := 20;
style := 0;
return percentage(y, per, style);
GM_Initial(x, method, un)
数据初始化,提供了几种数据变换的方法,有初值化、均值化、最小值化、最大值化、按行区间值化、按列区间值化、归一化、逆化、倒数化和始点零化处理原始的序列 1)初值化: 2)均值化:, 3)最小值化:, 4)最大值化:, 5)按行区间值化: 6)按列区间值化: 7)归一化:, 8)逆化: 9)倒数化: 10)始点零化:
| 参数 | 类型 | 说明 |
|---|---|---|
x |
array | 数据矩阵,为二维数组类型; |
method |
string | 处理方法(ini,mean,min,max,rrange,crange,norm,inv,rec,zero),为字符串类型; |
un |
array | 归一化单位,为一维数组类型 |
返回:array
GM_Corr(x, l)
灰色关联度,以l行为参考数列的灰色关联度,返回的是关联度矩阵 ,, 以为参考数列,则关联度计算步骤如下: 1)初值化:; 2)求差数列:, 3)求两级最大和最小:, 4)求关联系数:,为分辨系数,是0到1之间的数 5)求关联度:
| 参数 | 类型 | 说明 |
|---|---|---|
x |
array | 数据矩阵,为二维数组类型; |
l |
any | 参考序列标号,为整数类型 |
返回:array
GM_AGO(x, method, r)
数列生成,r(r>0)次的累加或累减生成新数列 1)累加:, 2)累减:,
| 参数 | 类型 | 说明 |
|---|---|---|
x |
array | 数据矩阵,为一维数组类型; |
method |
string | 生成方法(add,sub),为字符串类型; |
r |
any | 次数,为整数类型 |
返回:array
GM_Scorr(x, method)
灰色绝对关联度、灰色相对关联度和灰色综合关联度,返回的是关联度矩阵 ,, 1)灰色绝对关联度: 2)灰色相对关联度:先对数列进行初值化,然后求新数列的灰色绝对关联度,即为原数列的灰色相对关联度 3)灰色综合关联度:
| 参数 | 类型 | 说明 |
|---|---|---|
x |
array | 数据矩阵,为二维数组类型; |
method |
string | 方法(abs,ret,com),为字符串类型; |
返回:array
GM_Estimate(x, l)
GM(1,1)模型,用于灰色系统模型的l步预测 结果说明: 平均相对误差:越小越接近零越好; 关联度:当ρ=0.5时,关联度大于0.6便满意 方差比:C 小误差概率:P
| 参数 | 类型 | 说明 |
|---|---|---|
x |
array | 数据矩阵,为一维数组类型; |
l |
any | 预测步长,为整数类型 |
返回:array
Prog_L(f, a, b, aeq, beq, lb, ub, x0, options, ozarr, intarr)
使用单纯形法,和起作用集法,系统默认作用集形法求解线性规划问题,即求解目标都为线性和约束条件都为线性的规划问题 Prog_L(f,A,b) 求解不等式约束 Prog_L(f,A,b,Aeq,beq) 求解不等式约束、等式约束 Prog_L(f,A,b,Aeq,beq,LB,UB) 求解不等式约束、等式约束、上下界限约束 Prog_L(f,A,b,Aeq,beq,LB,UB,x0,options) 求解不等式约束、等式约束,上下限约束,加入用户算法设置 Prog_L(f,A,b,Aeq,beq,LB,UB,x0,options,ozarr) 求解不等式约束、等式约束、上下限约束、0-1 约束 Prog_L(f,A,b,Aeq,beq,LB,UB,x0,options,ozarr,intarr) 求解不等式约束、等式约束、上下限约束、0-1 约束、整数约束 模型表达: min= sum(f*x) st. A:*x<=b Aeq :* x = Beq lb<x<ub x = (0 or 1) x = integer
| 参数 | 类型 | 说明 |
|---|---|---|
f |
array | 线性目标,一维数字数组,不可缺省 |
a |
array | 线性约束,二维数字数组,不可缺省 |
b |
array | 线性约束,一维数字数组,不可缺省 |
aeq |
array | 线性约束,二维数字数组,缺省为空 |
beq |
array | 线性约束,一维数字数组,缺省为空 |
lb |
array | 下界约束,一维数字数组,缺省为空 |
ub |
array | 上界约束,一维数字数组,缺省为空 |
x0 |
array | 初始值,一维数组 |
options |
array | 选项设置,数据表类型,缺省为:;array( 'algorithm' :'activeset',//'simplex' 单纯形,'activeset' 作用集法;//(当整数、0-1 约束时推荐使用);'maxiter': 400 , //最大迭代次数;'tolcon': 1.0e-10, //约束容忍误差;'tolfun' : 1.0e-8 , //目标最小误差;'tolx' : 1.0e-8 //变量最小变化) |
ozarr |
array | 01约束条件,第1个变量为01变量则ozarr := array(0) |
intarr |
array | 整数约束条件,第2,3两个变量为整数变量则 intarr:=array(1,2);返回结果:;数据表类型;ret["X"] : 变量取值,一维数字数组;ret["Fval"] :规划目标值,实数;ret["Error_M"] : 结果信息,整数;ret["Iter"] : 迭代次数,整数 |
返回:array
Prog_N(fun, x0, a, b, aeq, beq, lb, ub, nlc, options)
采用拟牛顿下山方法求解非线性规划求解。 Prog_n(fun,x0) 无约束最小值约束 Prog_n(fun,x0,A,B) 非线性不等式约束求解 Prog_n(fun,A,b,Aeq,beq) 求解不等式约束、等式约束 Prog_n(fun,x0,A,b,Aeq,beq,LB,UB) 求解不等式约束、等式约束、上下界限约束 Prog_n(fun,x0,A,b,Aeq,beq,LB,UB,x0,options) 模型表达 1非线性无约束最小值 min fun(x) 2非线性规划求解 min fun(x) st. c(x)<=0; //非线性不等式约束 ceq(x)=0; //非线性等式约束 A*x<=b; //线性不等式约束 aeq*x=beq; //线性等式约束 lb<=x<=ub ; //边界约束
| 参数 | 类型 | 说明 |
|---|---|---|
fun |
array | 目标函数,目标函数名字符串类型,不可缺省。其中,目标函数的返回值必须是一个实数(1x1的矩阵,或长度为1的数组都不允许) |
x0 |
array | 初始值,一维数字数组,不可缺省 |
a |
array | 不等式约束,二维数组,缺省为空 |
b |
array | 不等式约束,一维数组,缺省为空 |
aeq |
array | 等式约束,二维数组,缺省为空 |
beq |
array | 等式约束,一维数组,缺省为空 |
lb |
array | 下界,一维数组,缺省为空 |
ub |
array | 上界,一维数组,缺省为空 |
nlc |
array | 非线性约束,函数名,字符串 |
options |
array | 算法参数设置,默认为array('maxiter':400 , //最大迭代次数'maxfunevals':'100*numberofvariables', //目标回调最大次数'tolcon':1.0e-6 ,//约束容忍误差'tolfun' :1.0e-6 ,//目标最小误差'tolx' :1.0e-6 , //变量最小变化'diffmaxchange':1e-1,//差分时最大步长'diffminchange':1e-8 )// 差分时最小步长 |
返回:array
Prog_M(fun, x0, goal, weight, a, b, aeq, beq, lb, ub, nlc, options)
求解多目标规划问题 模型表达: min AttainFactor st. f(x)-AttainFactor*wight <=goal //目标约束 c(x)<=0; //非线性不等式约束 ceq(x)=0; //非线性等式约束 A*x<=b; //线性不等式约束 aeq*x=beq; //线性等式约束 lb<=x<=ub ; //边界约束
| 参数 | 类型 | 说明 |
|---|---|---|
fun |
array | 目标函数,函数名字符串 |
x0 |
array | 初始值 |
goal |
array | 目标中各个分目标的差,一维数组和目标个数相同 |
weight |
array | 目标中各个分量的在总体中的比重,一维数组和目标个数相同 |
a |
array | 不等式约束,二维数组 |
b |
array | 不等式约束,一维数组 |
aeq |
array | 等式约束,二维数组 |
beq |
array | 等式约束,一维数组 |
lb |
array | 下界,一维数组 |
ub |
array | 上界,一维数组 |
nlc |
string | 非线性约束,约束函数名字符串 |
options |
array | 算法参数设置,默认为:array('maxiter':400, //最大迭代次数'maxfunevals':'100*numberofvariables', //目标回调最大次数'tolcon':1.0e-6,//约束容忍误差'tolfun' :1.0e-6,//目标最小误差'tolx' :1.0e-6, //变量最小变化'diffmaxchange':1e-1,//差分时最大步长'diffminchange':1e-8)// 差分时最小步长 |
返回:array
NonLP_Fminsearch(fun, x0, methods)
无约束最小值求解,求解模型如下: min fun(x)
| 参数 | 类型 | 说明 |
|---|---|---|
fun |
string | 目标函数,函数名字符串 |
x0 |
array | 初始值,一维数字数组 |
methods |
any | 方法选择0 单纯形法1 转轴法2 模式搜索法3 拟牛顿下山法(默认方法,推荐使用) |
返回:array
NonLP_minSUMT(fun, x0, a, b, aeq, beq, nonlcon, methods)
(非线性规划建议统一使用prog_n函数)混合惩罚函数+转轴法/模式搜索法:可解所有优化问题,返回最优点、最优值和迭代次数。可求解如下问题:
| 参数 | 类型 | 说明 |
|---|---|---|
fun |
string | 目标函数表达式,为字符串类型; |
x0 |
array | 初值向量,为一维数组类型; |
a |
array | 线性矩阵不等式约束,为二维数组类型; |
b |
array | 线性向量不等式约束值,为一维数组类型; |
aeq |
array | 线性矩阵等式约束,为二维数组类型; |
beq |
array | 线性向量等式约束值,为一维数组类型; |
nonlcon |
string | 非线性约束回调,为字符串类型; |
methods |
string | 方法选择,’NM’,’Rb’,’HJ’ |
返回:array
NonLP_minPS(fun, x0, a, b, nonlcon)
(非线性规划建议统一使用prog_n函数),坐标轮换法求不等式约束问题,初值必须在可行域内!可求解如下问题:
| 参数 | 类型 | 说明 |
|---|---|---|
fun |
string | 目标函数表达式,为字符串类型; |
x0 |
array | 初值向量,为一维数组类型; |
a |
array | 线性矩阵不等式约束,为二维数组类型; |
b |
array | 线性向量不等式约束值,为一维数组类型; |
nonlcon |
string | 非线性约束回调,为字符串类型; |
返回:array
NonLP_minFactor(fun, x0, aeq, beq, nonlcon)
(非线性规划建议统一使用prog_n函数),乘子法求等式约束问题,可求解如下问题:
| 参数 | 类型 | 说明 |
|---|---|---|
fun |
string | 目标函数表达式,为字符串类型; |
x0 |
array | 初值向量,为一维数组类型; |
aeq |
array | 线性矩阵等式约束,为二维数组类型; |
beq |
array | 线性向量等式约束值,为一维数组类型; |
nonlcon |
string | 非线性约束回调,为字符串类型; |
返回:array
NonLP_Fmincon(fun, x0, a, b, aeq, beq, nonlcon, c, methods)
(非线性规划建议统一使用prog_n函数)默认选项只适合于单纯的等式约束问题或者单纯的不等式约束问题,罚函数+转轴法/模式搜索法适合于任何问题,结果返回最优点、最优值和迭代次数。 可求解如下问题:
| 参数 | 类型 | 说明 |
|---|---|---|
fun |
string | 目标函数表达式,为字符串类型; |
x0 |
array | 初值向量,为一维数组类型; |
a |
array | 线性矩阵不等式约束,为二维数组类型; |
b |
array | 线性向量不等式约束值,为一维数组类型; |
aeq |
array | 线性矩阵等式约束,为二维数组类型; |
beq |
array | 线性向量等式约束值,为一维数组类型; |
nonlcon |
string | 非线性约束回调,为字符串类型;nonlcon回调需用户自己新建一个函数,然后把函数名传进nonlcon,函数格式如下:;Function “函数名”(x);;Begin |
c |
any | =array();//*;C[0]:=……;C[1]:=……;……;Ceq:=array();//*;Ceq[0]:=……;Ceq[1]:=……;……;Return array(0:c,1:ceq);//*;End;;//*号的式子一定要写 |
methods |
any | 优化方法(0:默认,1:罚函数+转轴法,2:罚函数+模式搜索法),为用户自定义类型(整型); |
返回:array
NonLP_Range(fun, x0, h)
进退法,可一维优化问题的确定搜索区间,但目标函数必须是单峰函数,返回结果为上下界的取值。(中间函数)
| 参数 | 类型 | 说明 |
|---|---|---|
fun |
string | 目标函数表达式,为字符串类型 |
x0 |
float | 初值,为实数类型; |
h |
float | 步长,为实数类型; |
返回:array
NonLP_BSearch(fun, x0, h)
一维盲人搜索方法,目标函数既可以是单峰,也可以是多峰。返回最优点和最优值。(中间函数)
| 参数 | 类型 | 说明 |
|---|---|---|
fun |
string | 目标函数表达式,为字符串类型 |
x0 |
float | 初值,为实数类型; |
h |
float | 步长,为实数类型; |
返回:array
NonLP_Golden(fun, a, b)
(一维最小值搜索建议统一使用NonLP_Fminbnd函数),黄金分割法搜索[a,b]区间内目标函数的最小值,返回最优点和最优值
| 参数 | 类型 | 说明 |
|---|---|---|
fun |
string | 目标函数表达式,为字符串类型; |
a |
float | 区间左侧,为实数类型; |
b |
float | 区间右侧,为实数类型 |
返回:array
NonLP_Fibonacci(fun, a, b)
(一维最小值搜索建议统一使用NonLP_Fminbnd函数),斐波那契法,用斐波那契数列去搜索[a,b]区间内目标函数的最小值,返回最优点和最优值
| 参数 | 类型 | 说明 |
|---|---|---|
fun |
string | 目标函数表达式,为字符串类型; |
a |
float | 区间左侧,为实数类型; |
b |
float | 区间右侧,为实数类型 |
返回:array
NonLP_GP(fun, a, b)
(一维最小值搜索建议统一使用NonLP_Fminbnd函数),黄金分割+抛物线插值法:一维优化方法,返回最优点和最优值
| 参数 | 类型 | 说明 |
|---|---|---|
fun |
string | 目标函数表达式,为字符串类型; |
a |
float | 区间左侧,为实数类型; |
b |
float | 区间右侧,为实数类型; |
返回:array
NonLP_Nelder(fun, x0)
(无约束最小值求解建议统一使用NonLP_Fminsearch函数)内德-米德法,无约束多维的非线性规划方法,即单纯形法。返回最优点和最优值。
| 参数 | 类型 | 说明 |
|---|---|---|
fun |
string | 目标函数表达式,为字符串类型; |
x0 |
array | 初值向量,为一维数组类型 |
返回:array
NonLP_Hooke_Jeeves(fun, x0)
(无约束最小值求解建议统一使用NonLP_Fminsearch函数)模式搜索法,又叫Hooke-Jeeves法,求解无约束多维极值问题,返回最优点和最优值。
| 参数 | 类型 | 说明 |
|---|---|---|
fun |
string | 目标函数表达式,为字符串类型; |
x0 |
array | 初值向量,为一维数组类型 |
返回:array
linearProgramming(f, a, b, aeq, beq)
(线性规划,包括整数规划,01规划建议统一使用prog_L函数),解决如下线性规划模型问题
| 参数 | 类型 | 说明 |
|---|---|---|
f |
array of real | 一维实数数组,表示线性规划模型的目标函数系数; |
a |
array of real | 二维实数数组,表示线性规划模型的带“”约束方程系数矩阵,如果是带“”,则将该方程两边同乘以“-1”; |
b |
array of real | 一维实数数组,表示线性规划模型带“”约束方程的约束值; |
aeq |
array of real | 二维实数数组,表示线性规划模型带“=”约束方程系数矩阵; |
beq |
array of real | 一维实数数组,表示线性规划模型带“=”约束方程的约束值; |
返回:any
示例
Find x that minimizes
f(x) = –5x1 – 4x2 –6x3,
subject to
x1 – x2 + x3 ≤ 20
3x1 + 2x2 + 4x3 ≤ 42
3x1 + 2x2 ≤ 30
0 ≤ x1, 0 ≤ x2, 0 ≤ x3.
// TSL代码:
f := array(-5, -4, -6);
a := array((1, -1, 1), (3, 2, 4), (3, 2, 0));
b := array(20, 42, 30);
aeq := array();
beq := array();
return linearProgramming(f, a, b, aeq, beq);
// 结果:x1=0,x2=15,x3=3,f(x)=-78
intLinProg(f, a, b, aeq, beq, int_par)
(线性规划,包括整数规划,01规划建议统一使用prog_L函数)解决如下整数规划模型问题
| 参数 | 类型 | 说明 |
|---|---|---|
f |
array of real | 一维实数数组,表示整数规划模型的目标函数系数; |
a |
array of real | 二维实数数组,表示整数规划模型的带“”约束方程系数矩阵,如果是带“”,则将该方程两边同乘以“-1”; |
b |
array of real | 一维实数数组,表示整数规划模型带“”约束方程的约束值; |
aeq |
array of real | 二维实数数组,表示整数规划模型带“=”约束方程系数矩阵; |
beq |
array of real | 一维实数数组,表示整数规划模型带“=”约束方程的约束值; |
int_par |
array of real | 一维整数数组,表示要取整数的变量,缺省时表示全部变量取整; |
返回:array
示例
Find x that Maximum
f(x) =40x1+90x2
subject to
9x1+7x2≤ 56
7x1 + 20x2≤ 70
0 ≤ x1, 0 ≤ x2
x1, x2整数
// TSL代码:
f := array(-40, -90);
a := array((9, 7), (7, 20));
b := array(56, 70);
aeq := array();
beq := array();
int_par := array();
return intLinProg(f, a, b, aeq, beq, intpar);
// 结果:x1=4,x2=2,f(x)=-340
quadprog(h, f, a, b, aeq, beq)
(二次规划建议统一使用prog_Q函数),解决如下二次规划模型问题:
| 参数 | 类型 | 说明 |
|---|---|---|
h |
array of real | 二维实数数组,表示二次项目标函数系数,为对称矩阵 |
f |
array of real | 一维实数数组,表示二次规划模型的目标函数系数; |
a |
array of real | 二维实数数组,表示二次规划模型的带“”约束方程系数矩阵,如果是带“”,则将该方程两边同乘以“-1”; |
b |
array of real | 一维实数数组,表示二次规划模型带“”约束方程的约束值; |
aeq |
array of real | 二维实数数组,表示二次规划模型带“=”约束方程系数矩阵; |
beq |
array of real | 一维实数数组,表示二次规划模型带“=”约束方程的约束值; |
返回:array
示例
Find x that minimize
f(x) = 1/2 * x1^2+x2^2-x1 * x2-2x1-6x2
subject to
x1 + x2 ≤ 2
–x1 + 2x2 ≤ 2
2x1 + x2 ≤ 3
0 ≤ x1, 0 ≤ x2.
// TSL代码:
h := Array((1, -1), (-1, 2));
f := Array(-2, -6);
a := Array((1, 1), (-1, 2), (2, 1));
b := array(2, 2, 3);
aeq := array();
beq := array();
return quadprog(h, f, a, b, aeq, beq);
// 结果: x1=0.6667,x2=1.3333,f(x)=-8.2222
quadTrackRoute(h, f, a, b, aeq, beq, x0)
(二次规划建议统一使用prog_Q函数)解决如下二次规划模型问题:
| 参数 | 类型 | 说明 |
|---|---|---|
h |
array of real | 二维实数数组,表示二次项目标函数系数,为对称矩阵 |
f |
一维实数数组,表示二次规划模型的目标函数系数; | |
a |
array of real | 二维实数数组,表示二次规划模型的带“”约束方程系数矩阵,如果是带“”,则将该方程两边同乘以“-1”; |
b |
array of real | 一维实数数组,表示二次规划模型带“”约束方程的约束值; |
aeq |
array of real | 二维实数数组,表示二次规划模型带“=”约束方程系数矩阵; |
beq |
array of real | 一维实数数组,表示二次规划模型带“=”约束方程的约束值; |
x0 |
array of real | 变量的初始点。 |
返回:array
示例
Find x that minimize
f(x) = 2 * x1^2+2 * x2^2-x1 * x2+8 * x1-6x2
subject to
x1 + x2 ≤ 2
2 * x1 - x2 ≤ 1
// TSL代码:
h := Array((4, -1), (-1, 4));
f := Array(8, -6);
a := Array((1, 1), (2, -1));
b := array(2, 1);
aeq := array();
beq := array();
x0 := array(0, 0);
return quadTrackRoute(h, f, a, b, aeq, beq, x0);
// 输出:
// 示例包含说明文字,未作为可执行片段运行。
// 输出:分析:x1=-1.733333, x2=1.066667, 最小值f(x)=-10.13333
quadLagR(h, f, aeq, beq)
(二次规划建议统一使用prog_Q函数)解决如下二次规划模型问题:
| 参数 | 类型 | 说明 |
|---|---|---|
h |
array,tablearray | 二维实数数组,表示二次项目标函数系数,为对称矩阵 |
f |
array,tablearray | 一维实数数组,表示二次规划模型的目标函数系数; |
aeq |
array,tablearray | 二维实数数组,表示二次规划模型带“=”约束方程系数矩阵; |
beq |
array,tablearray | 一维实数数组,表示二次规划模型带“=”约束方程的约束值。 |
返回:any
示例
Find x that minimize
f(x) = 2 * x1^2+x2^2+x1 * x2-x1-x2
subject to
x1 + x2 = 1
// TSL代码:
h := Array((4, 1), (1, 2));
f := Array(-1, -1);
aeq := array((1, 1));
beq := array(1);
return quadLagR(h, f, aeq, beq);
// 输出:
// 示例包含说明文字,未作为可执行片段运行。
// 输出:解析:x1=0.25, x2=0.75, 最小值f(x)=-0.125
Hooke_Jeeves_Method(x0, d0, d_min, r, call_back)
H-J法求解无约束最优化问题
| 参数 | 类型 | 说明 |
|---|---|---|
x0 |
array | 一维数字数组类型 |
d0 |
array | 一维数字数组类型 |
d_min |
array | 一维数字数组类型 |
r |
float | 实数类型 |
call_back |
string | 字符串类型,计算目标值的回调 |
返回:array
SUMT_Method(x0, call_back)
SUMT法求解有约束最优化问题
| 参数 | 类型 | 说明 |
|---|---|---|
x0 |
array | 一维数字数组类型,各个变量的初始值 |
call_back |
string | 字符串类型,计算目标值的回调 |
返回:array
Sumt_Method__Pgm()
Sumt算法测试
返回:array
Sumt_Method_CallBack(x, r)
Sumt算法回调
| 参数 | 类型 | 说明 |
|---|---|---|
x |
array | 一维数字数组类型 |
r |
float | 实数类型 |
返回:float
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
示例
// 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