用python做数学建模
前言
这里是用python解决数学建模的一些问题,用到的是python3.x,scipy,numpy和matplotlib。
先补充一些基本的数据知识。
1、numpy.array()
在基础操作里,array和list是不区分的(在索引和删除一些操作还有运行时间上会有区别),python也没有array这个数据结构。array是由numpy这个数值计算工具包定义的。因为很多操作必须要求是在array上进行(list会出错)所以需要掌握。以下参考官方文档。
import numpy as np
#向上转型 >>>np.array([1,2,3.0]) array([1. ,2. ,3.]) #多维度 >>> np.array([[1, 2], [3, 4]]) array([[1, 2], [3, 4]]) #预设维度 >>> np.array([1, 2, 3], ndmin=2) array([[1, 2, 3]]) #复数 >>> np.array([1, 2, 3], dtype=complex) array([ 1.+0.j, 2.+0.j, 3.+0.j]) #多种数据类型 >>> x = np.array([(1,2),(3,4)],dtype=[('a','<i4'),('b','<i4')]) >>> x['a'] array([1, 3])
正文
补充完一些基础的数据知识就开始接触真正的数学建模用到的类型知识了。
一、线性规划
选择scipy.optimize.linprog进行线性规划问题的求最大最小值问题。学习材料:官方文档。
这里不讨论具体问题,只涉及数学方程转换成函数语言进行求解的过程,参考书籍:数学建模算法与应用。
1 ''' 2 max: z = 4x1 + 3x2 3 st: 2x1 + 3x2<=10 4 x1 + x2 <=8 5 x2 <= 7 6 x1,x2 > 0 7 ''' 8 9 from scipy.optimize import linprog 10 11 c = [4,3] #默认linprog求解的是最小值,若求最大值,此处c取反即可得到最大值的相反数。 12 A = [[2,3],[1,1]] 13 b = [10,8] 14 x1_bounds = [0,None] 15 x2_bounds =[0,7] 16 res = linprog(c,A,b,bounds=(x1_bounds,x2_bounds))
三个变量的求解方法相同,此处不再赘述。
二、多项式的最小二乘法曲线拟合
利用numpy.polyfit。
import numpy as np import matplotlib.pyplot as plt ''' ''' x = np.arange(1990,1997,1) y = np.array([70 ,122 ,144 ,152, 174, 196, 202]) z1 = ployfit(x,y,1) #之前画过原始数据,数据走向为ax+b类型。故采用一次多项式拟合 p1 = np.ploy1d(z1) yvalue = p1(x) plt.plot(x,y,'*',label = '原始数据') plt.plot(z1,yvalue,label = '拟合曲线') plt.xlabel('x axis') plt.ylabel('y axis') plt.legend(loc = 4 ) plt.tittle('多项式拟合') plt.show()
没有写完,暂时先写这么多吧。
:)