用 Python 做數學建模

  • 2020 年 3 月 17 日
  • 筆記

數學建模中,大多數人都在用MATLAB,但MATLAB不是一門正統的電腦程式語言,而且速度慢還收費,最不能忍受的就是MATLAB編輯器不支援程式碼自動補全。python對於數學建模來說,是個非常好的選擇。python中有非常著名的科學計算三劍客庫:numpy,scipy和matplotlib,三者基本代替MATLAB的功能,完全能夠應對數學建模任務。

下面列舉幾個python解決數學建模的例子:

線性規劃問題的求最大最小值問題

123456789101112

max: z = 4×1 + 3x2st:      2×1 + 3×2<=10           x1 + x2 <=8           x2 <= 7           x1,x2 > 0from scipy.optimize import linprogc = [4,3]        #默認linprog求解的是最小值,若求最大值,此處c取反即可得到最大值的相反數。A = [[2,3],[1,1]]b = [10,8]x1_bounds = [0,None]x2_bounds =[0,7]res = linprog(c,A,b,bounds=(x1_bounds,x2_bounds))

相關推薦:《python影片教程

多項式的最小二乘法曲線擬合

1234567891011121314

import numpy as npimport matplotlib.pyplot as pltx = 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()

方程求導

12345678

from __future__ import print_functionfrom __future__ import divisionimport numpy as npimport scipy as spimport scipy.misc  def f(x): return 2*x*x + 3*x + 1print(sp.misc.derivative(f, 2))</pre>

求不定積分

123456789

from __future__ import print_functionfrom __future__ import divisionimport numpy as npimport scipy as spimport scipy.integrate  f = lambda x : x**2print(sp.integrate.quad(f, 0, 2))print(sp.integrate.fixed_quad(f, 0, 2))

求解非線性方程組

1234567891011

from __future__ import print_functionfrom __future__ import divisionimport numpy as npimport scipy as spimport scipy.optimize  def f(x):    return [5*x[1] + 3, 4*x[0]*x[0], x[1]*x[2] – 1.5]ans = sp.optimize.fsolve(f, [0, 0, 0])print(ans)print(f(ans))

求解線性方程組

1234567891011

from __future__ import print_functionfrom __future__ import divisionimport numpy as npimport scipy as spimport matplotlib.pylab as pltimport scipy.linalg  a = np.array([[1, 3, 5], [2, 5, 1], [2, 3, 8]])b = np.array([10, 8, 3])print(sp.linalg.solve(a, b))# print(sp.linalg.inv(a).dot(b))