首页 > 编程知识 正文

python 非线性方程,python非线性最优化问题

时间:2023-05-04 00:37:23 阅读:226337 作者:506

文章目录 一、用Excel完成线性规划问题的求解二、用python完成线性规划问题的求解三、用拉格朗日方法求解

一、用Excel完成线性规划问题的求解

建立数据源

写出资源配置三要素

在excel中设置目标函数
根据前面的分析可知,目标函数为E2,E6与F2, F6区域两列数组对应元素的乘积之和,在C10单元格中输入=SUMPRODUCT (E2:E6,F2:F6)

在excel中设置约束条件

加载excel规划求解模块
选择“文件”→“选项”→“加载项"→“转到”,勾选“规划求解加载项”。单击“确定"按钮。在“数据”菜单下就出现了“规划求解”模块(操作过程同“数据分析”模块的加载)

设置决策变量和目标函数

设置约束条件
添加约束条件1

添加约束条件2

添加约束条件3

添加约束条件4

添加约束条件5

添加约束条件6


最终添加结果

点击求解,得到最终结果

二、用python完成线性规划问题的求解

设置约束条件

使用scipy库对线性规划的最优解、最大值进行求解

# 导入包from scipy import optimizeimport numpy as np#创建矩阵,c为目标函数的矩阵,A_ub为约束条件的左边构成的矩阵,B_ub为约束条件的右边c=np.array([600,800,500,400,300])A_ub=np.array([[1000,2000,0,0,0],[-1,-1,0,0,0],[1000,2000,400,1000,100],[-2000,-4000,-3000,-5000,-600],[1,0,0,0,0],[0,1,0,0,0],[0,0,1,0,0],[0,0,0,1,0],[0,0,0,0,1]])B_ub=np.array([30000,-20,40000,-100000,14,8,40,5,50])# 求解res=optimize.linprog(-c,A_ub,B_ub)print(res) 得到结果
三、用拉格朗日方法求解

求解问题

手工求解
参考拉格朗日乘数法

求函数f(x,y,z)在条件φ(x,y,z)=0下的极值。 方法(步骤)是:
1.做拉格朗日函数L=f(x,y,z)+λφ(x,y,z),λ称拉格朗日乘数;
2.求L分别对x,y,z,λ求偏导,得方程组,求出驻点P(x,y,z); 如果这个实际问题的最大或最小值存在,一般说来驻点只有一个,于是最值可求

利用python编程求解 # 导入包from sympy import *# 设置变量x,y,z,k = symbols('x,y,z,k')a,b,c=symbols('a,b,c')f = 8*x*y*zg = x**2/a**2+y**2/b**2+z**2/c**2-1#构造拉格朗日函数L=f+k*g#求导dx = diff(L, x) # 对x求偏导print("dx=",dx)dy = diff(L,y) #对y求偏导print("dy=",dy)dz = diff(L,z) #对z求偏导print("dz=",dz)dk = diff(L,k) #对k求偏导print("dk=",dk)dx= 8*y*z + 2*k*x/a**2dy= 8*x*z + 2*k*y/b**2dz= 8*x*y + 2*k*z/c**2dk= -1 + z**2/c**2 + y**2/b**2 + x**2/a**2#求出个变量解m= solve([dx,dy,dz,dk],[x,y,z,k]) print(m)#变量赋值x=sqrt(3)*a/3y=sqrt(3)*b/3z=sqrt(3)*c/3k=-4*sqrt(3)*a*b*c/3#计算方程的值f = 8*x*y*zprint("方程的最大值为:",f) 得到结果

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。