Python科学计算初探

前言

最近跟着B站学 数模 与 Python,试着将"数学建模老哥"的 Matlib 代码翻译为 Python 代码。
这篇文章中的内容可以用于 numpy,scipy.optimize,matplotlib 的综合训练。
里面涉及到的线性规划问题处理思想也很耐人寻味。

“数学建模老哥”的内容截图

原问题:求下列线性规划问题的最优值
原问题截图

a 要通过迭代尝试,寻找最优值。

“数学建模老哥”的 matlib 源码截图
matlib代码
运行结果
matlib运行结果

尝试使用 Python 解决

环境:jupyter notebook(Ipython)
包:numpy,matplotlib,scipy
代码:

建议使用 jupyter 进行数据分析操作,实在太丝滑了。

import numpy as np
import scipy.optimize as opt
import matplotlib.pyplot as plt
# 结果列表
res=[]

# 迭代 a
for a in np.linspace(0.0,0.05,num=50):
    
    # 价值矩阵
    c=np.array([-0.05,-0.27,-0.19,-0.185,-0.185])
    
    # 不等式约束矩阵
    A=np.array([[0,0.025,0,0,0],[0,0,0.015,0,0],[0,0,0,0.055,0],[0,0,0,0,0.026]])

    # 等式约束矩阵
    Aeq=np.array([[1,1.01,1.02,1.045,1.065]])
    
    # 价值矩阵1
    b=np.array([a,a,a,a])
    
    # 价值矩阵2
    beq=np.array([1])
    
    # 边界约束
    x_bound=(0,None)
    
    # 计算
    temp=opt.linprog(c,A_ub=A,b_ub=b,A_eq=Aeq,b_eq=beq,bounds=x_bound)
    
    # 保存结果,(a,最优值)
    res.append((a,temp.fun))
    
# 设置轴上数值
axis_a=[i[0] for i in res]
axis_f=[-i[1] for i in res] # 为什么加 "-",去看 "老哥" 视频吧

# 绘制散点图
plt.scatter(x=axis_a,y=axis_f)
   

Python 效果

最后问问,通过这个图,你们知道怎么取最优解了吗?

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值