1. 程序主界面主要分【矩阵运算】与【算式解析】
2. 【矩阵运算】主要承担绝大部分的操作:实数矩阵变量的创建,优化问题求解,绘图等一系列操作。
3. 【算式解析】主要针对复数表达式进行计算,一些不常使用的特殊函数,也主要内置到这个模块进行计算。
4. 程序主要操作是遵循,变量赋值,然后函数调用,类似这么一种操作,所有的函数调用都有使用说明,具体可右键查看命令帮助。程序的
一些基本的操作,可看如下视频
1. 程序主界面主要分【矩阵运算】与【算式解析】
2. 【矩阵运算】主要承担绝大部分的操作:实数矩阵变量的创建,优化问题求解,绘图等一系列操作。
3. 【算式解析】主要针对复数表达式进行计算,一些不常使用的特殊函数,也主要内置到这个模块进行计算。
4. 程序主要操作是遵循,变量赋值,然后函数调用,类似这么一种操作,所有的函数调用都有使用说明,具体可右键查看命令帮助。程序的
一些基本的操作,可看如下视频
PS:推荐优先使用【启发式优化算法】工具求解,结果不理想再按如下方式求解!
1. 虽然程序提供多个函数进行非线性拟合,但是推荐使用程序界面上方的【高级优化】进行非线性拟合、非线性方程组求解、以及非线性规划问题。
2. 【高级优化】窗口里可自定义一些代码设置,可以指定优化变量取值范围,以及设置混合整数优化问题。
3. 非线性拟合整体步骤如下:
setp1. 将已知数据以矩阵变量形式存储(导入)在一个变量当中。
setp2. 打开【高级优化】窗口,在【模板】当中选择【函数拟合】
setp3. 在Code下误差函数ErrorFun里定义误差(其实就是把函数表达式写一遍)
setp4. 在Parameter下设置data关键字(这个就是step1里的变量)
setp5. 在Parameter下设置varCount关键字(即优化变量个数)
setp6. 在Parameter下设置errorCount关键字(即误差函数个数,这个根据step3当中定义的误差而定,一般就1个)
setp7. 然后点击【求解】即可
step8. 计算完毕后,回到程序命令行主窗口,输入Parameter下设置varName关键字后的名称,查看结果。
PS:当中还有很多参数,可具体看参数设置说明,不同参数,优化结果以及优化效率会有一定差异。
1 简单版本
如果想快速定义非线性方程问题求解,且书写语言更加接近数学表达式形式,可参考线性/非线性规划教程。
2 进阶版本
这里需要一定的编程基础,可灵活构建所需的数学问题。 优先推荐使用【启发式优化算法】工具求解,结果不理想再按如下方式求解!
非线性方程组求解步骤如下:
setp1. 打开【高级优化】窗口,在【模板】当中选择【方程求解】
setp2. 在Code下误差函数ErrorFun里定义误差(其实就是把方程组写入到里面然后构建误差)
setp3. 在Parameter下设置varCount关键字(即优化变量个数)
setp4. 在Parameter下设置errorCount关键字(即误差函数个数,这个一般就是方程个数)
setp5. 然后点击【求解】即可
step6. 计算完毕后,回到程序命令行主窗口,输入Parameter下设置varName关键字后的名称,查看结果。(结果的顺序对应在step2当中变量定义的顺序)
1. 前言
工作中,我们可能会涉及到一些数据处理的问题。在数据处理过程中,很多时候,虽然我们有一堆数据,但是我们并不清楚这些数据之间的关系。因为某些原因,我们想观察这些数据之间的关系。这时,就希望能找到某种数学表达式来把这些数据变量给关联起来。
如果对参数个数没有特别要求的话,神经网络可以作为参考的数学模型一种选择。如果对参数个数有限制要求,则就需要另一种方式来查找对应表达式了,也就是我们希望找一种表达更简洁,且变量尽量少的数学表达式来构建数据之间的关系。常规地,我们希望找到一种如下形式的公式
(1)
$$
y = F(x_1,x_2,…, x_n, a_1, a_2, …, a_m)
$$
公式(1)中的\(x_1,x_2,…,x_n\)为自变量,\(y\)为因变量,\(a_1,a_2,…,a_m\)为公式中的额外变量参数,\(F\)为我们需要查找的数学模型。在这里,我们已知的是数据集\(x_1,x_2,…,x_n, y\),而未知的是\(a_1,a_2,…,a_m,F\)
在实际情况中,如果我们通过观察\(x_1,x_2,…,x_n, y\)的规律,或者变量之间的物理意义,如果能定向构建出\(F\),再进行优化求解,那这时就会省很多事情。这里,假如,我们并不能观察出\(x_1,x_2,…,x_n, y\)的规律,这时,构建\(F\)就无外乎进行盲试,MathSword提供一些盲试的数学模型。
2. 应用
1. 前言
有些数学模型难以查找时,我们会尝试使用神经网络来进行逼近。MathSword提供一种简单快速的神经网络搭建模式,在下面的视频例子中,可直接使用对应代码更改相应参数即达到不同模型建立的目的。使用时,注意如下参数的设置:
NetCreateConnectLayer :使用本函数快速搭建一个前馈网络
NetCreateSolver :迭代不收敛时,尝试重新用本函数设置求解算法以及学习速率
NetOptSetOptVarValue :迭代不收敛时,尝试用本函数给优化变量重新设置迭代初值
PS:迭代不收敛时,确定输入输出样本的值域是否合理(比如选择Tanh作为输出层函数, 这时对应的样本值域就应该在-1到1之间),不合理时,需要先对数据进行映射(比如映射到-1与1之间等等)!
2. 应用
2.1 代码快速构建(不推荐使用)
下载: code
下载: Mnist
2.2 图构建方式(推荐使用)
启发式优化算法有比较强的全局寻优能力,因此对于非线性优化(非线性拟合、非线性方程组求解等等)问题可以优先尝试使用启发式优化求解器。
目前MathSword内置自研SC启发式优化算法、以及基于龙格库塔法的RUN[1]算法,这两种算法是我目前测试过智能算法中效果最好的两种算法。这里将启发式优化求解的使用方法演示如下:
参考:
[1] Chen H , Ahmadianfar I , Heidari A A , et al. RUN beyond the metaphor: An efficient optimization algorithm based on Runge Kutta method[J]. Expert Systems with Application, 2021(181-Nov.).