功能: 公式数学模型搜索

格式:
FormulaSearch(y, x, xf, maxError, minR2, minNum, maxNum, threadNum, solveType, isShow, updateNum, iterNum, method, fun)
FormulaSearch(y, x, xf, maxError, minR2, minNum, maxNum, threadNum, solveType, isShow, updateNum, iterNum, method)
FormulaSearch(y, x, xf, maxError, minR2, minNum, maxNum, threadNum, solveType, isShow, updateNum, iterNum)
FormulaSearch(y, x, xf, maxError, minR2, minNum, maxNum, threadNum, solveType, isShow, updateNum)
FormulaSearch(y, x, xf, maxError, minR2, minNum, maxNum, threadNum, solveType, isShow)
FormulaSearch(y, x, xf, maxError, minR2, minNum, maxNum, threadNum, solveType)
FormulaSearch(y, x, xf, maxError, minR2, minNum, maxNum, threadNum)
FormulaSearch(y, x, xf, maxError, minR2, minNum, maxNum)
FormulaSearch(y, x, xf, maxError, minR2, minNum)
FormulaSearch(y, x, xf, maxError, minR2)
FormulaSearch(y, x, xf, maxError)
FormulaSearch(y, x, xf)
FormulaSearch(y, x)

y: 矩阵变量，其列数必须为1,具体含义看说明
x: 矩阵变量，每一列对应一个变量, 其行数必须与y一致
xf: 字符串向量存储的x每一列对应的具体表达式, 这里xf的元素个数必须与x的列数一致, 如果此参数为空, 则默认以"x1,x2,...,xn"来对应x每一列的数据
maxError: 满足条件的公式最大平方误差和,默认为10
minR2:    满足条件的公式最小R2系数,默认为0.9
minNum:   开始查找的变量数
maxNum:   查找的最大变量数
threadNum:开启的线程数,默认为8,最大不超过128
solveType:公式查找数学模型,默认为0,即尝试所有数学模型
isShow:   求解过程是否显示窗口,默认为1,即显示
updateNum:窗口显示过程中,单个线程公式数的刷新频率,默认为9999
iterNum: 内部求解最大迭代次数,默认为16
method: 开启的基本方法, 此参数为矩阵变量,矩阵变量里的元素值为1-5，如果设置对应元素值,表示开启对应方法，默认全部开启
fun: 开启的函数，此参数为矩阵变量,矩阵变量里的元素值为0-10，如果设置对应元素值,表示开启对应函数，默认全部开启

说明: 
1、这里假设x = [x1, x2, x3, ..., xn], 本函数主要是找到一个数学模型
  y = Fun(x1, x2, x3, ..., xn)

2、执行本函数后, 将返回一个对象,以便操作

3、要获得最终查找结果, 可以调用函数{FormulaSearchResult<矩阵运算\FormulaSearchResult>}

4、一般可配合{FormulaVarExtend<矩阵运算\FormulaVarExtend>}函数使用

5、method参数，例如设置为[1,3],则表示开启1和3方法，具体方法解释如下
1: 分式(分子多元一次,分母多元一次)
2: 多元一次方程
3: 多元二次方程
4: 分式(分子多元一次,分母多元二次)
5: 分式(分子分母均为一元多项式)

6、fun参数，例如设置为[2,3],则表示开启2和3函数，具体方法解释如下
0: 原始数据求解
1: y变换后求解
2: Log
3: Sin
4: Exp
5: Cos
6: Sqrt
7: Sigmoid
8: Tanh
9: Exp(-x^2)
10: PeakFun

7、如果嫌弃这个函数不能找到满意结果,可以使用{FormulaAutoSearch<矩阵运算\FormulaAutoSearch>}函数试一下

例子:
x = 1:0.1:10;
x = x';
y = sin(x/10 + x^0.5 + 1.25) * (x + log(x) * 10);
//假如事先采集到上面(x,y)数据,现在查找一个关联x,y的数学公式

x0 = {DataMap<矩阵运算\DataMap>}(x,0,1);//可以先考虑将x映射到区间[0,1]
[x1,xf] = {FormulaVarExtend<矩阵运算\FormulaVarExtend>}(x0);//先进行函数映射扩展

//添加一个常量,以增加命中率
n = {size<矩阵运算\size>}(y);
n = n(1);
one = {ones<矩阵运算\ones>}(n,1);
f = "1";
xf = {SymVectorAppend<矩阵运算\SymVectorAppend>}(f, xf);
x1 =[one, x1];

f = FormulaSearch(y, x1, xf,  0.1);//执行后可时时看到查找结果, 注意因为上面对输入进行了一定的变换, 因此最终的结果需要根据{DataMap<矩阵运算\DataMap>}函数进行恢复