从拉格朗日乘子--约束优化到五元齐次线性方程求解

  • 引入
  • 问题导入(事情起源)
  • 三层循环
  • 数学神器——Wolfwarm alpha
  • 拉格朗日乘子
  • 五元齐次线性方程
  • 自坑三连——被伤的体无完肤
  • Win the final victory
  • 番外

引入

首先我要说这是属于三个人的伟大(虽然与第三个人素未谋面,但我觉得today已经通过a math problem 产生了灵魂触碰),在2个多小时的解题过程中,工具从百度—>CSDN—>VS17—>wolfarm alpha—>matlab,语言从数学语言—>C—>C++—>数学语言
简而言之,今晚是个奇妙之旅,下面正式起航。

问题导入(事情起源)

晚饭间,一妙人突然发来一条消息“有时间吗”,作为一直只把话言骚的基友,突然这么正经

联想最近事情,想到刚帮同学结束一场入D积极分子证明的座谈会,所以我第一反应是如下回答,但万万没想到是想我编程解决一道约束优化问题

考虑到此妙人受疫情影响电脑不在身旁,书写尚且飘逸的基础上,我又努力了一把,将以上书写体做了一下转化

求改表达式的最小值 min 0.108WA2+0.074WB2+0.055WC2+0.02WAWB+0.043WAWC+0.044WBWC0.108 W_{A}^{2}+0.074 W_{B}^{2}+0.055 W_{C}^{2}+0.02 W_{A} W_{B} +0.043 W_{A} W_{C}+0.044 W_{B} W_{C}0.108WA2​+0.074WB2​+0.055WC2​+0.02WA​WB​+0.043WA​WC​+0.044WB​WC​

约束条件如下:

{WA+WB+WC=10.34WA+0.07WB+0.26WC=0.3\left\{\begin{aligned}W_{A}+W_{B}+W_{C}=1 \\ 0.34 W_{A}+0.07 W_{B}+0.26 W_{C}=0.3\end{aligned}\right.{WA​+WB​+WC​=10.34WA​+0.07WB​+0.26WC​=0.3​

(注:公式是利用Mathpix SnipORC手写图片扫描转化)

三层循环

第一回合,直接暴力三层循环拆解。但是a,b,c精度要求是0.001,说明不是整数,此时我头脑清醒的果断投了手算一票,我预想通过两个约束条件消去目标方程2个参数,将目标方程化为一元二次方程求导,受友人“手算麻烦论”以及“电脑编程好用论”影响,更重要的是自己面子,问题始于编程,最终要是传统数学方法解决了,多没面子。

数学神器——Wolfwarm alpha

在我对代码思而无获,求而不得时,电光火石之间,我想到了传说的数学三大神器之一的Wolfwarm alpha

作为高等数学秘密武器,但我为了一道金融的题目在它身上跃跃欲试,不意外的,我撞了南墙,但我及时回了头,知道此路我已行不通。但是思路也就此停留,我迟迟无法动手开敲代码,直到两个PPT截图的到来。

拉格朗日乘子

这两张启发思维的PPT的到来,成为了今晚我们坚持不懈战胜这道题的转折点。


于是编程有了方向,灵机一动,我来抱一抱CSDN的腿,拉格朗日乘子相关内容很多,但我点开一看,不免有些失望,一来我点开几篇文章发现所讲内容重复度很高,二来都是文字理论叙述啰嗦,实战性不强,说白了,我就是想找一个实例展开并附参考代码的博文,可是没有。我想了一下可能是打开方式不对,我便直接在CSDN网页下载模块搜索拉格朗日算子线性约束,看了一下,大部分是论文级别或是课程设计级别的,并且是普遍评价都不高,浏览筛选一遍后我花15积分下载了一个资源

结果410页全是英文,并且浏览后并未发现有实例讲解,于是我开始从打开到放弃。
经历了长时间搜索我发觉这个数学题结构太简单,还没人专门编程解它,更妥当点可以说是还没人专门为他写了一篇文讲解,大概是我目前level太低,学术业务水平在淹死边缘。
就在我又一次陷入思路停留时,准备放弃时,我的友人发来了她列出的拉格朗日参数方程组,正式吹响了最后向这道题进攻的号角,此时我不得不感慨一下我的友人是一个妙人。

五元齐次线性方程


在这里,我再一次充当公式的“搬运工”

F(a,b,c,λ)=f(a,b,c)+λφ(a,b,c)+mt(a,b,c)=f(a,b,c)+λ(a+b+c−1)+m(0.34a+0.07b+0.2bc−0.3)F(a, b, c, \lambda)=f(a, b, c)+\lambda \varphi(a, b, c)+mt(a, b, c)=f(a, b, c)+\lambda(a+b+c-1)+m(0.34 a+0.07 b+0.2 b c-0.3)F(a,b,c,λ)=f(a,b,c)+λφ(a,b,c)+mt(a,b,c)=f(a,b,c)+λ(a+b+c−1)+m(0.34a+0.07b+0.2bc−0.3)

∂F∂a=0.216a+0.02b+0.043c+λ+0.34m=0\frac{\partial F}{\partial a}=0.216 a+0.02 b+0.043 c+\lambda+0.34 m=0∂a∂F​=0.216a+0.02b+0.043c+λ+0.34m=0

2F∂b=0.148b+0.02a+0.0444c+λ+0.07m=0\frac{2 F}{\partial b}=0.148 b+0.02 a+0.0444 c+\lambda+0.07 m=0∂b2F​=0.148b+0.02a+0.0444c+λ+0.07m=0

∂F∂r=0.11c+0.043a+0.044b+λ+0.26m=0\frac{\partial F}{\partial r}=0.11 c+0.043 a+0.044 b+\lambda+0.26 m=0∂r∂F​=0.11c+0.043a+0.044b+λ+0.26m=0

∂E∂xλ=a+b+c−1=0\frac{\partial E}{\partial x^{\lambda}}=a+b+c-1=0∂xλ∂E​=a+b+c−1=0

∂f∂m=0.34a+0.07b+0.2bc−0.3=0\frac{\partial f}{\partial m}=0.34 a+0.07 b+0.2 b c-0.3=0∂m∂f​=0.34a+0.07b+0.2bc−0.3=0

过了一会儿,妙人说已经解出了3个未知数,此时我也有了最后编程思路,于是发起了最后进攻。

看过了这样的代码

Ar=rank(A); Br=rank(B);
B=rref(B);
if (Ar<Br)flag=0; S=0;
elseif (Ar==Br && Ar==Alie)flag=1; S=B(:,Alie+1);
else%将能构成单位矩阵的列号存储在行向量I中,即存储了极大线性无关向量的编号%将剩余列号存入行向量C中for i=1:Arfor j=1:Alieif(B(i,j)==1)I(i)=j;breakendendendC=setdiff(1:Alie,I);%由线性代数知识可得基础解系ILim=length(I); CLim=length(C);S(Alie,CLim)=0;%初始化S,S行数为A列数,S列数为C的维度for i=1:CLimS(C(i),i)=-1;for j=1:ILimS(I(j),i)=B(j,C(i));endendif(nargin==1)flag=2;elseflag=3;S(Alie,CLim+1)=0;for i=1:ArS(I(i),CLim+1)=B(i,Alie+1);endend
end

但最后代码很简单.

A=[0.216 0.02 0.043 1 0.34;0.02 0.148 0.044 1 0.07;0.043 0.044 0.11 1 0.26;1 1 1 0 0;0.34 0.07 0.26 0 0]
Z=[0 0 0 1 0.3]'
X=inv(A)*Z

但我比较不争气,在我这里又出现了出现了连续三连错误。

自坑三连——被伤的体无完肤

错误都比较弱智,在我们充斥着学术味道的聊天中,我们不断填我挖坑的过程,被完成记录下来,为读者更有身临其境之感,我将直接放图。

第一坑
(白框为挖坑者我)

在这里,我不禁害羞的低下了头,但还好,只是断了腿,我还有手和脑。

第二坑

写到这里,我觉得手已断,心已碎,只剩下脑细胞还在呼吸,于是我停下手中的工作开始做思想反思。

第三坑
在我进行深刻反思时,我的妙友找到了我的第三个也是最后一个坑,助我赢得了这场战争的胜利。

没错,我把0.26敲成0.026,结果验算结果自然失败。

此时,我不禁想要一瓶酒,一支烟,麻痹一下仅剩的神经细胞。

Win the final victory

在我纠完错误,再次运行代码得到了最终正确答案和友人手算结果相同,(没想到机算的慢一步)。在这次我要再次讲一下我的友人是一个妙人,立图为证,关于她的运算能力及准确度我要在这里夸奖一下。

今晚奇遇关于我与那位友人部分大致如上,下面放出正确结果,以示纪念意义。

番外

为故事情节的完整性,我在下面放出那位素未谋面的友人与我这位妙友之间进行的学术对话,灵魂交谈。

(注:以上部分言论是在严肃紧张中の低端学术讨论中,自我调侃语句,我们对学术是充满敬畏的)

友人说,这题是她朋友帮一位国际生写论文需要的,大概,四舍五入,我这也是为了促进国际友谊做了贡献了吧。

从拉格朗日乘子--约束优化到五元齐次线性方程求解相关推荐

  1. 拉格朗日乘子法(Lagrange Multiplier)和KKT条件

    拉格朗日乘子法(Lagrange Multiplier)和KKT条件 一:前言 如果我们现实生活中的多元值求最优化的问题,我们会遇到一下三种场景: 无条件约束的优化问题 有等式约束的优化问题 有不等式 ...

  2. 机器学习之拉格朗日乘子法和 KKT

    有约束的最优化问题 最优化问题一般是指对于某一个函数而言,求解在其指定作用域上的全局最小值问题,一般分为以下三种情况(备注:以下几种方式求出来的解都有可能是局部极小值,只有当函数是凸函数的时候,才可以 ...

  3. SVM支持向量机-拉格朗日乘子与对偶问题(1)

    对于支持向量机,我们首先要关注的几个点就是间隔,超平面,支持向量,再深入的话就是对偶问题,拉格朗日对偶问题,凸优化,和 KKT条件,我们先从基本的间隔,超平面,支持向量说起. 1.SVM基础模型 给定 ...

  4. 拉格朗日乘子法、KKT条件、拉格朗日对偶性

    拉格朗日乘子法.KKT条件.拉格朗日对偶性 转载于http://blog.csdn.net/sinat_17496535/article/details/52103852 笔记主要来源于维基百科和&l ...

  5. 一文详解从拉格朗日乘子法、KKT条件、对偶上升法到罚函数与增广Lagrangian乘子法再到ADMM算法(交替方向乘子法)

    最近看了ADMM算法,发现这个算法需要用到许多不少前备知识,在搜索补齐这些知识的过程中感觉网上的资料与总结在零散的同时又不够清晰,在此本文对这一块的内容进行汇总,同时表达自己的一些理解. 目录 拉格朗 ...

  6. 最优化之凸集、凸函数、上确界、Jensen不等式、共轭函数、Fenchel不等式、拉格朗日乘子法、KKT条件

    最优化之凸集.凸函数.上确界.Jensen不等式.共轭函数.Fenchel不等式.拉格朗日乘子法.KKT条件.拉格朗日对偶 1.直线的向量表达 1.1 共线定理 对于任意两个向量a⃗,b⃗\vec{a ...

  7. 拉格朗日乘子法(自己总结一些要点)

    主要是研究SVM算法的时候涉及到了拉格朗日乘子法,由于是大学数学的内容,开始看懂,也不高兴认真去看.后来发现绕不开,于是打算认真去研究下.主要还是百度百科(https://baike.baidu.co ...

  8. 拉格朗日乘子法及浅谈Svm

    拉格朗日乘子法是干啥的 简单点来说给你一个z=ƒ(x,y),求这个函数的极值点(x0,y0),但是我有个约束条件,这个约束条件是φ(x,y)=0.就是说你找到的极值点必须同时满足φ(x0,y0)=0. ...

  9. 约束优化方法之拉格朗日乘子法与KKT条件

    来源:https://www.cnblogs.com/ooon/p/5721119.html 引言 本篇文章将详解带有约束条件的最优化问题,约束条件分为等式约束与不等式约束,对于等式约束的优化问题,可 ...

最新文章

  1. C语言基础(12)-输入和输出
  2. 探索JAVA并发 - 线程池详解
  3. zabbix全网监控介绍
  4. CSAPP第五章就在“扯淡”!
  5. ORM框架之------Dapper,Net下无敌的ORM
  6. Nature子刊:是穷是富与基因有关?大数据分析发现149个与收入相关基因位点
  7. Linux 不小心删除了 root,root目录不小心删除了怎么办……
  8. springboot引入外部yml配置文件
  9. java reduce 分组_使用JAVA8 stream中三个参数的reduce方法对List进行分组统计
  10. 数据库 软件实施 工程师
  11. Java多窗口编程示例
  12. 【lvgl 学习】怎么让LVGL支持GBK编码
  13. ROS学习笔记(一)#ROS系统及RoboWare的安装
  14. 带农历日期的html代码,很全的显示阴历(农历)日期的js代码
  15. Horizon 桌面用户会话10h后超时断开
  16. SQL Server DMVs in Action 学习笔记
  17. CSS3常用功能的写法
  18. CUDA学习:Windows下的CUDA环境配置
  19. 十大实用网站推荐(1)
  20. SecureCRT显示乱码的解决办法(centos)

热门文章

  1. 烤羊肉串“好巴郎”阿里木回乡代言民族团结
  2. 教你如何发现潜水的家伙
  3. 哪个牌子的电视盒子好用?测评60天整理目前最强的电视盒子
  4. NFT 内卷战争与创造正外部性
  5. Cannot find JRE '1.8'. You can specify JRE to run maven goals in Settings
  6. 6.S081「Xv6 and Unix utilities」
  7. 计算机在围棋面前一筹莫展
  8. PCB表面处理工艺常见六大分类
  9. 绝对值在python中怎么打出来_python中取绝对值简单方法总结
  10. 上海交通大学安泰经济与管理学院:大疫当前谈供应链思维