前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用 Python 做数学建模

用 Python 做数学建模

作者头像
KEVINGUO_CN
发布2020-03-16 23:42:05
1.9K0
发布2020-03-16 23:42:05
举报
文章被收录于专栏:全栈全栈全栈全栈全栈全栈

数学建模中,大多数人都在用MATLAB,但MATLAB不是一门正统的计算机编程语言,而且速度慢还收费,最不能忍受的就是MATLAB编辑器不支持代码自动补全。python对于数学建模来说,是个非常好的选择。python中有非常著名的科学计算三剑客库:numpy,scipy和matplotlib,三者基本代替MATLAB的功能,完全能够应对数学建模任务。

下面列举几个python解决数学建模的例子:

线性规划问题的求最大最小值问题

123456789101112

max: z = 4x1 + 3x2st:      2x1 + 3x2<=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))

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-11-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档