如何使用python完成数学建模常见算法!
2022-07-28 12:56:09来源:未知作者: 飞飞阅读量:
你希望通过几种常见算法的实现,了解python在数学建模中的能力。
python除了丰富的原生数据结构外,拥有强大的第三方软件包支持,例如矩阵运算库Numpy,数据处理库Pandas、机器学习库Sklearn、深度学习库Tenserflow&Pytorch、科学计算库Scipy、图形绘制库matplotlib、网络算法库Networkx。此外几乎针对任何领域,都有第三方软件包的支持,这归功于python优秀的社区。使用者需要使用好pip这一软件包管理工具,发掘前人造好的轮子,尽量减少自己编程的难度。我们将在后面的问题讨论中介绍以下几种常用数学建模算法的python实现:
4.单源多宿最短路算法
我们的重点在于代码实现而非数学推导
1.数据拟合算法
我们这里介绍通过最小二乘法拟合线性函数
-
#我们使用最小二乘法拟合一个三次函数,选取了5个参数 -
import numpy as np -
import matplotlib.pyplot as plt -
SAMPLE_NUM = 100 -
M = 5 -
x = np.arange(0, SAMPLE_NUM).reshape(SAMPLE_NUM, 1) / (SAMPLE_NUM - 1) * 10 -
y = 2*x**3+3*x**2+x+1 -
plt.plot(x, y, 'bo') -
X = x -
for i in range(2, M + 1): -
X = np.column_stack((X, pow(x, i))) -
X = np.insert(X, 0, [1], 1) -
W=np.linalg.inv((X.T.dot(X))).dot(X.T).dot(y) -
y_estimate = X.dot(W) -
plt.plot(x, y_estimate, 'r') -
plt.show()

-
import numpy as np -
from scipy import interpolate -
import pylab as pl -
x=np.linspace(0,10,11) -
y=2*x**3+3*x**2+x+1 -
xInset=np.linspace(0,10,101) -
pl.plot(x,y,"ro") -
for kind in["nearest","zero","slinear","quadratic","cubic"]: -
f=interpolate.interp1d(x,y,kind=kind) -
y_estimate=f(xInset) -
pl.plot(xInset,y_estimate,label=str(kind)) -
pl.legend(loc="lower right") -
pl.show()

-
import numpy as np -
from scipy.optimize import minimize -
def func(x): -
return(2*x[0]*x[1]+2*x[0]-x[0]**2+2*x[1]**2+np.sin(x[0])) -
cons=({"type":"eq","fun":lambda x:np.array([x[0]**3-x[1]]),"jac":lambda x:np.array([3*(x[0]**2),-1.0])},{"type":"ineq","fun":lambda x:np.array([x[1]-1]),"jac":lambda x:np.array([0,1])})#定义函数的多个约束条件 -
res=minimize(func,[-1.0,1.0],constraints=cons,method="SLSQP",options={"disp":True}) -
print(res)

-
classDisNode: -
def __init__(self,node,dis): -
self.node=node -
self.dis=dis -
def __lt__(self, other): -
return self.dis<other.dis -
classDisPath: -
def __init__(self,end): -
self.end=end -
self.path=[self.end] -
self.dis=0 -
def __str__(self): -
nodes=self.path.copy() -
return"->".join(list(map(str,nodes)))+" "+str(self.dis) -
classHeap: -
def __init__(self): -
self.size=0 -
self.maxsize=10000 -
self.elements=[0]*(self.maxsize+1) -
def isEmpty(self): -
return self.size==0 -
def insert(self,value): -
if self.isEmpty(): -
self.elements[1]=value -
else: -
index=self.size+1 -
while(index!=1and value<self.elements[index//2]): -
self.elements[index]=self.elements[index//2] -
index=index//2 -
self.elements[index]=value -
self.size+=1 -
def pop(self): -
deleteElement=self.elements[1] -
self.elements[1]=self.elements[self.size] -
self.size-=1 -
temp=self.elements[1] -
parent,child=1,2 -
while(child<=self.size): -
if child<self.size and self.elements[child]>self.elements[child+1]: -
child+=1 -
if temp<self.elements[child]: -
break -
else: -
self.elements[parent]=self.elements[child] -
parent=child -
child*=2 -
self.elements[parent]=temp -
return deleteElement -
defDijkstraWithHeap(nodes,start,GetNeighbors): -
dis=defaultdict(int) -
paths=defaultdict(DisPath) -
heap=Heap() -
visit=set() -
for node in nodes: -
dis[node]=sys.maxsize -
paths[node]=DisPath(node) -
dis[start]=0 -
heap.insert(DisNode(start,0)) -
while(not heap.isEmpty()): -
now=heap.pop().node -
if now in visit: -
continue -
visit.add(now) -
paths[now].dis=dis[now] -
for edge inGetNeighbors(now): -
end=edge.End -
if dis[now]+edge.value<dis[end]: -
dis[end]=dis[now]+edge.value -
paths[end].path=paths[now].path+[end] -
heap.insert(DisNode(end,dis[end])) -
return paths
相关文章
2022物理碗Physicsbowl竞赛真题考题解析
就在2小时前, 今年的“物理碗”国际竞赛落下帷幕 !作为全球含金量最高的物理竞赛之一,本次参赛的中国学生超5000名!在物理碗中获得TOP100奖项的学生...
阅读: 781
国际物理竞赛都有哪些?哪个含金量高?如何选择!
物理竞赛是物理,工程,天文等相关专业申请必备利器,也是仅次于数学的热门学科。在物理学科领域,足具权威性和代表性的赛事包含: 美国物理碗竞赛...
阅读: 297
SASMO新加坡国际数学竞赛详细介绍及奖项设置
0 1 SASMO是什么? 众所周知,新加坡数学的教学体系,是国际上最优秀的数学之一,SASMO是由新加坡国际数学竞赛中心(SIMCC)组织的一项国际数学竞赛,现...
阅读: 1255
2023秋季英国留学申请季趋势分析
23Fall已经有部分专业开启申请了,为了让大家能更好的迎接这个申请季的到来!今天小编就根据23Fall目前各校的招生政策,结合22Fall的录取情况,来预测一...
阅读: 90
更多栏目
热门文章
-
1.2022物理碗Physicsbowl竞赛真题考题解析
- 1

- 2022物理碗Physicsbowl竞赛真题考题解析
- 2023-02-20
- 1
-
2.国际物理竞赛都有哪些?哪个含金量高?如何选择!
- 2

- 国际物理竞赛都有哪些?哪个含金量高?如何选择!
- 2022-12-12
- 2
-
3.SASMO新加坡国际数学竞赛详细介绍及奖项设置
- 3

- SASMO新加坡国际数学竞赛详细介绍及奖项设置
- 2022-12-12
- 3
-
4.AMC数学竞赛如何做题效率最高?AMC竞赛备考PlanB高效解决
- 4

- AMC数学竞赛如何做题效率最高?AMC竞赛备考PlanB高效解决
- 2022-10-17
- 4
-
5.2023秋季英国留学申请季趋势分析
- 5

- 2023秋季英国留学申请季趋势分析
- 2022-09-30
- 5
-
6.2022年AMC数学竞赛考试即将开始!考试注意事项说明
- 6

- 2022年AMC数学竞赛考试即将开始!考试注意事项说明
- 2022-09-30
- 6
-
7.2022年寒假可以参加的写作竞赛有哪些?
- 7

- 2022年寒假可以参加的写作竞赛有哪些?
- 2022-09-30
- 7
-
8.背景一般可以申请英国商学院吗?可以选哪些项目?
- 8

- 背景一般可以申请英国商学院吗?可以选哪些项目?
- 2022-09-29
- 8
-
9.去美国留学的中国学生申请最多的专业是哪些?
- 9

- 去美国留学的中国学生申请最多的专业是哪些?
- 2022-09-29
- 9
-
10.物理碗/BPhO/AP物理课程难度对比,BPhO和物理碗竞赛可以同时备考吗
- 10

- 物理碗/BPhO/AP物理课程难度对比,BPhO和物理碗竞赛可以同时备考吗
- 2022-09-29
- 10
热门图文
-
互联网+、挑战杯、创青春等创新创业大赛含金量高吗??
2022-07-28
-
2022年芬兰人口数据统计公布!华人为第四大人口种族
2022-07-28
-
蓝思指数是什么?蓝思指数详细分析
2022-07-28
-
2022下半年数学竞赛比赛时间及官网链接整理
2022-07-28
-
2022年全国大学生英语竞赛题型及分值分布详解答题策略
2022-07-28
-
大学生竞赛项目汇总!能加分保研的工科类竞赛盘点
2022-07-28
