在数学建模中主流的编程语言是MATLAB,但随着python/R中数学软件包的不断完善,熟悉这两种编程语言的同学也可以快速数学建模的编程环节。后面我们将介绍几种常见数学建模算法的python实现,旨在展示python在本领域的强大威力。

1问题描述

你希望通过几种常见算法的实现,了解python在数学建模中的能力。

2解决方案

python除了丰富的原生数据结构外,拥有强大的第三方软件包支持,例如矩阵运算库Numpy,数据处理库Pandas、机器学习库Sklearn、深度学习库Tenserflow&Pytorch、科学计算库Scipy、图形绘制库matplotlib、网络算法库Networkx。此外几乎针对任何领域,都有第三方软件包的支持,这归功于python优秀的社区。使用者需要使用好pip这一软件包管理工具,发掘前人造好的轮子,尽量减少自己编程的难度。我们将在后面的问题讨论中介绍以下几种常用数学建模算法的python实现:

1.数据拟合算法

2.插值算法

3.线性规划算法

4.单源多宿最短路算法

问题讨论

我们的重点在于代码实现而非数学推导

1.数据拟合算法

我们这里介绍通过最小二乘法拟合线性函数


2.插值算法

我们使用几种常见的插值函数拟合上例中的三次函数


3.线性规划算法

我们可以使用scipy库对目标函数进行线性规划

注意这里求解的为目标函数最小值,如果我们需要求解最大值则将func取负数即可。输出内容如图


4.单源多宿最短路算法

我们介绍一下基于堆优化的dijkstra算法,这里的堆可以使用python内置的PriorityQueue实现。我们这里给出一个简单的堆实现:

通过堆优化的dijkstra算法的时间复杂度最低可以达到O(nlogm),上文给出的代码的时间复杂度为O(mlogm),但是胜在编码简单。此外还可以使用Networkx库进行求解,这里不再介绍。