MathSword教程1.基础操作

1. 程序主界面主要分【矩阵运算】与【算式解析】

2. 【矩阵运算】主要承担绝大部分的操作:实数矩阵变量的创建,优化问题求解,绘图等一系列操作。

3. 【算式解析】主要针对复数表达式进行计算,一些不常使用的特殊函数,也主要内置到这个模块进行计算。

4. 程序主要操作是遵循,变量赋值,然后函数调用,类似这么一种操作,所有的函数调用都有使用说明,具体可右键查看命令帮助。程序的

一些基本的操作,可看如下视频

 

MathSword教程3.非线性拟合

 

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:当中还有很多参数,可具体看参数设置说明,不同参数,优化结果以及优化效率会有一定差异。

 

MathSword教程4.非线性方程组求解

1 简单版本

如果想快速定义非线性方程问题求解,且书写语言更加接近数学表达式形式,可参考线性/非线性规划教程

2 进阶版本

这里需要一定的编程基础,可灵活构建所需的数学问题。 优先推荐使用【启发式优化算法】工具求解,结果不理想再按如下方式求解!

非线性方程组求解步骤如下:

setp1. 打开【高级优化】窗口,在【模板】当中选择【方程求解】

setp2. 在Code下误差函数ErrorFun里定义误差(其实就是把方程组写入到里面然后构建误差)

setp3. 在Parameter下设置varCount关键字(即优化变量个数)

setp4. 在Parameter下设置errorCount关键字(即误差函数个数,这个一般就是方程个数)

setp5. 然后点击【求解】即可

step6. 计算完毕后,回到程序命令行主窗口,输入Parameter下设置varName关键字后的名称,查看结果。(结果的顺序对应在step2当中变量定义的顺序)

 

 

 

 

 

 

MathSword教程5.数学公式搜索

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. 应用

 

 

 

MathSword教程6.神经网络

1. 前言

有些数学模型难以查找时,我们会尝试使用神经网络来进行逼近。MathSword提供一种简单快速的神经网络搭建模式,在下面的视频例子中,可直接使用对应代码更改相应参数即达到不同模型建立的目的。使用时,注意如下参数的设置:

NetCreateConnectLayer :使用本函数快速搭建一个前馈网络

NetCreateSolver :迭代不收敛时,尝试重新用本函数设置求解算法以及学习速率

NetOptSetOptVarValue :迭代不收敛时,尝试用本函数给优化变量重新设置迭代初值

PS:迭代不收敛时,确定输入输出样本的值域是否合理(比如选择Tanh作为输出层函数, 这时对应的样本值域就应该在-1到1之间),不合理时,需要先对数据进行映射(比如映射到-1与1之间等等)!

2. 应用

2.1 代码快速构建(不推荐使用)

下载: code

下载: Mnist

 

 

 

 

 

 

2.2 图构建方式(推荐使用)

 

 

 

 

 

MathSword教程7.启发式优化求解器

启发式优化算法有比较强的全局寻优能力,因此对于非线性优化(非线性拟合、非线性方程组求解等等)问题可以优先尝试使用启发式优化求解器。

目前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.).