数学建模用python好吗_用 Python 做数学建模

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

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

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

1

2

3

4

5

6

7

8

9

10

11

12

max: z = 4x1 + 3x2

st:      2x1 + 3x2<=10

x1 + x2 <=8

x2 <= 7

x1,x2 > 0

from scipy.optimize import linprog

c = [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))

多项式的最小二乘法曲线拟合

1

2

3

4

5

6

7

8

9

10

11

12

13

14

import numpyas np

import matplotlib.pyplotas 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()

方程求导

1

2

3

4

5

6

7

8

from __future__ import print_function

from __future__ import division

import numpyas np

import scipyas sp

import scipy.misc

def f(x):return 2*x*x + 3*x + 1

print(sp.misc.derivative(f, 2))

求不定积分

1

2

3

4

5

6

7

8

9

from __future__ import print_function

from __future__ import division

import numpyas np

import scipyas sp

import scipy.integrate

f = lambda x : x**2

print(sp.integrate.quad(f, 0, 2))

print(sp.integrate.fixed_quad(f, 0, 2))

求解非线性方程组

1

2

3

4

5

6

7

8

9

10

11

from __future__ import print_function

from __future__ import division

import numpyas np

import scipyas sp

import 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))

求解线性方程组

1

2

3

4

5

6

7

8

9

10

11

from __future__ import print_function

from __future__ import division

import numpyas np

import scipyas sp

import matplotlib.pylabas plt

import 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))

标签: 无

本文同步分享在 博客“KEVINGUO”(other)。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值