【最优化方法】实验四 约束最优化方法的MATLAB实现

实验的目的和要求:通过本次实验使学生较为熟练使用MATLAB软件,并能利用该软件进行约束最优化方法的计算。

实验内容:

1、罚函数法的MATLAB实现

2、可行方向法的MATLAB实现

学习建议:

本次实验就是要通过对一些具体问题的分析进一步熟悉软件的操作并加深对理论知识的理解。

重点和难点:

可行点和辅助函数选取。

一 罚函数法

用罚函数法解min f(x)=(x1-1)2+x22

​ S.T. g(x)=x2-1>=0

编写下面m文件

fahanshu.msyms x1 x2 f=(x1-1)^2+x2^2;g=x2-1;x=[x1;x2];x0=[0;0];e=0.0001;M=1;while abs(subs(g,x,x0))>eif subs(g,x,x0)<0​    Q=f+M*g^2;else ​    Q=f;endx0=xzNewton(Q,x,x0,0.0001);M=10*M;endx0

运行得:fahanshu

x0 =

1.0000

0.9999

与理论值x=[1;1]很接近。

二 投影梯度法

1.梯度投影法基本原理和步骤

思想:当迭代点是可行域的内点时,将目标函数负梯度作为搜索方向,当迭代点在可行域边界上时,将目标函数负梯度在可行域边界上的投影作为搜索方向。无论何种情况,所构造的方向都是可行下降方向。然后在可行域内沿该方向进行最优一维搜索得到新的迭代点。

img

img

MATLAB实现:

2.代码及数值算例:

(1) 程序源代码:

function [ X,FMIN,K ] = tidutouying( f,A,b,x1,x,e )%  [ X,FMIN,K ] = tidutouying( f,A,b,x1,e ) 梯度投影法%  f  目标函数%  A  约束矩阵  b 右端项%  x1 初始点 x 自由变量%  e  精度要求%  X  极小点%  FMIN 极小值%  K  迭代次数%  张超编写与2014/5/3count=1;n=length(x1);tf=jacobian(f,x)';while 1[A1,A2,b1,b2,k]=fenjie(A,b,x1);while 1M=A1;if isempty(M)​    P=eye(n);else​    P=eye(n)-M'*(M*M')^(-1)*M;endPk=-P*subs(tf,x,x1);if norm(Pk)<=e​    if isempty(M)​      x1;break;else​      W=(M*M')^(-1)*M*subs(tf,x,x1);​      u=W;if min(u)<0for i=1:length(u)if u(i)==min(u)j=i;endendA1(j,:)=[];else ​        x1;break;endendelse​    b_=b2-A2*x1;​    P_=A2*Pk;for i=1:length(P_)if P_(i)<0r(i)=b_(i)/P_(i);elser(i)=10000;endend​    rmax=min(r);​    syms t​    y=x1+t*Pk;ft(t)=subs(f,x,y);[r1]=find0618(ft,0,double(rmax),0.00001);​    x1=x1+r1*Pk;break;endendcount=count+1;if isempty(M)    break;endif min(u)>=0break;endendX=x1;FMIN=subs(f,x,X);K=count;endfunction [A1,A2,b1,b2,k ] = fenjie( A,b,x )% 分解起作用约束A=A;b=b;x0=x;k=0;q=0;s=size(A);A1=zeros(s(1),s(2));A2=zeros(s(1),s(2));b1=zeros(s(1),1);b2=zeros(s(1),1);for i=1:s(1)gi=A(i,:)*x0-b(i);if abs(gi)<0.0000001 ​    k=k+1;A1(k,:)=A(i,:);b1(k,1)=b(i);else ​    q=q+1;A2(q,:)=A(i,:);b2(q,1)=b(i);endendif k>0A1=A1(1:k,:);b1=b1(1:k,:);elseA1=[];endif q>0A2=A2(1:q,:);b2=b2(1:q,:);end end

(2) 数值算例:

Min f(x)= 2*x1^2+2*x2^22*x1*x2 – 4*x1 – 6*x2S.T. –x1 – x2>=2–x1 – 5*x2>=5x1>=0x2>=0初值x0=[0;0]在matlab command window里输入syms x1 x2 f=2*x1^2+2*x2^2-2*x1*x2-4*x1-6*x2;A=[-1 -1;-1 -5;1 0;0 1];b=[-2;-5;0;0];x1=[0;0];x=[x1;x2];e=0.01;[X,FMIN,K]=tidutouying(f,A,b,x1,x,e)X =1.12920.7742FMIN =-7.1613N =16

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/844075.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

递归/递归函数

不明白为什么很多学校要从“汉诺塔”讲起&#xff0c;这玩意是真的绕。 递归&#xff08;函数&#xff09;的概念&#xff1a; 调用自身来求解问题 不要过多考虑递归细节&#xff0c;宏观层面上的理解递归就行 ps:总不能一直调用下去吧&#xff1f;必须要有一个边界 递归的…

国际标准引脚,宽范围工作温度–40℃ 到 105℃,3W 1.5KVDC 隔离单输出 DC/DC 电源模块 ——TPL-3W系列

TPL-3W系列是一款额定功率为3W的隔离产品&#xff0c;国际标准引脚&#xff0c;宽范围工作温度–40℃ 到 105℃&#xff0c;在此温度范围内都可以稳定输出3W&#xff0c;并且效率非常高&#xff0c;高达88%&#xff0c;同时负载调整率非常低&#xff0c;对于有输出电压精度有要…

失落的方舟台服封号的解决方法 怎么避免封号?

失落的方舟台服封号的解决方法 怎么避免封号&#xff1f; 失落的方舟这款游戏是由Smile Gate研发的MMORPG游戏&#xff0c;这款游戏将于5月30日正式开服。游戏采用虚幻3引擎&#xff0c;为玩家们提供了丰富的游戏玩法与精美的游戏画面。游戏的背景是在中世纪&#xff0c;玩家们…

JS将小数转化为整数

在JavaScript中,有多种方法可以将一个值转化为整数。以下是一些常用的方法: Number.parseInt() 或 parseInt()parseInt() 函数解析一个字符串参数,并返回一个指定基数的整数(基数介于2和36之间)。如果第一个字符不能被转换为数字,parseInt() 会返回 NaN。 let numString…

网络原理-------TCP协议

文章目录 TCP协议TCP协议段格式TCP原理确认应答机制 (安全机制)超时重传机制 (安全机制)连接管理机制 (安全机制)滑动窗口 (效率机制)流量控制 (安全机制)拥塞控制 (安全机制)延迟应答 (效率机制)捎带应答 (效率机制) 基于TCP的应用层协议 TCP协议 TCP, 即 Transmission Contr…

TypeScript 枚举

什么是 TypeScript 枚举&#xff1f; 简单来说&#xff0c;枚举是一种用于命名一组常量的数据类型。在 TypeScript 中&#xff0c;枚举允许我们定义一个命名的常量集合&#xff0c;并为这些常量分配相关的数值。通过枚举&#xff0c;我们可以为一组相关的值提供一个友好的名字…

运维开发之Linux机器码

一、介绍 Linux机器码指的是在Linux操作系统上运行的程序的二进制代码,也称为机器码或目标代码。Linux机器码是对源代码进行编译或汇编后得到的结果,它是一系列由0和1组成的指令,用于直接在计算机硬件上执行。 在Linux中,机器码可以是由C、C++、汇编语言或其他编程语言编…

基于 LLM 的群聊知识助手:茴香豆简介

茴香豆是一个基于大型语言模型&#xff08;LLM&#xff09;的群聊知识助手&#xff0c;旨在为用户提供智能化的对话体验和问题解答。它通过精心设计的三阶段处理流程&#xff08;预处理、拒答、响应&#xff09;来应对群聊场景的复杂性&#xff0c;确保既能提供有用的信息&…

java解压缩ZIP文件

封装了一个类&#xff0c;类的代码如下 public class Decompress {//String zipFilePath "/sdcard/archive.zip";//String destinationPath "/sdcard/extracted_files";//ZipUtils.unzip(zipFilePath, destinationPath);public static void unzip(Strin…

Go 语言中程序是怎么编译的?

在当今快速发展的软件开发领域&#xff0c;Go 语言&#xff08;又称 Golang&#xff09;已经成为了开发高性能应用程序的热门选择。由 Google 开发并在 2009 年公开发布&#xff0c;Go 语言因其简洁的语法、出色的并发支持以及优秀的性能而受到广泛欢迎。尽管 Go 的语法相对简单…

C# TcpClient

TcpClient 自己封装的话&#xff0c;还是比较麻烦的&#xff0c;可以基于线程&#xff0c;也可以基于异步写&#xff0c;最好的办法是网上找个插件&#xff0c;我发现一个插件还是非常好用的&#xff1a;STTech.BytesIO.Tcp 下面是这个插件作者的帖子&#xff0c;有兴趣的可以…

Mac连接虚拟机(Linux系统)

1.确定虚拟机的IP地址 ifconfig //终端命令&#xff0c;查询ip地址 sudo apt install net-tools 安装完成后再次执行 ifconfig&#xff1a; 2.安装SSH&#xff08;加密远程登录协议&#xff09; (1).安装OpenSSH服务器软件包&#xff1a; sudo apt-get install openssh-ser…

监控易助力实现智能工厂数字化升级项目案例

随着工业4.0和智能制造的浪潮席卷全球&#xff0c;包头铝业&#xff08;以下简称“包铝”&#xff09;积极响应行业变革&#xff0c;启动了智能工厂升级项目。该项目旨在通过数字化转型&#xff0c;实现IT基础设施、动环设施以及物联网设施的互联互通&#xff0c;进而提升生产效…

小心审核失败,网上申请流量卡千万要注意这些!

最近有朋友私信小编&#xff1a;在网上申请的流量卡&#xff0c;信息填写完成提交审核呢&#xff0c;是不是就能发卡呢&#xff1f; 答案&#xff1a;不一定。 网上申请流量卡时&#xff0c;填写申请信息并提交审核这只是网报程序成功&#xff0c;接下来还要运营商审核&#…

python面向对象编程OOP

面向对象编程&#xff08;Object-Oriented Programming&#xff0c;简称OOP&#xff09;是Python编程中一种重要的编程范式。OOP通过使用类和对象来组织代码&#xff0c;使代码更易于管理和维护。下面是一些Python面向对象编程的关键概念和示例&#xff1a; 1. 类和对象 **类…

【惊艳视界】Perfectly Clear Workbench:让您的图像瞬间焕发生机!

在数字化时代&#xff0c;图像已成为我们生活中不可或缺的一部分。无论是摄影爱好者&#xff0c;还是专业设计师&#xff0c;都渴望拥有一款能够轻松提升图像质量的神奇工具。今天&#xff0c;我们为您带来了一款图像清晰处理软件的佼佼者——Perfectly Clear Workbench&#x…

最新!!2024上半年软考【高级】系统分析师 综合知识真题解析

2024上半年软考考试已经结束了&#xff0c;为大家整理了网友回忆版的系统分析师选择题真题及答案&#xff0c;总共30道题。 上半年考试的宝子们可以对答案预估分数&#xff01;准备下半年考的宝子可以提前把握考试知识点和出题方向&#xff0c;说不定会遇到相同考点的题目&…

【全开源】知识付费问答社区(FastAdmin+ThinkPHP)

此系统是一款基于FastAdmin和ThinkPHP开发的知识付费问答社区系统&#xff0c;提供全部前后台无加密源代码&#xff0c;拥有强大的付费提问、付费阅读、付费查看、付费邀请、全文搜索等功能模块&#xff0c;其整合了强大的标签模块和专区模块&#xff0c;让问题和文章更好的归类…

【WP|2】WordPress 高级函数和方法解析

在之前的文章中&#xff0c;我们讨论了 WordPress 的一些常用函数和方法。这篇文章将进一步探讨一些高级函数和方法&#xff0c;这些函数和方法能够帮助开发者更加精细地控制和定制 WordPress 网站&#xff0c;以实现更复杂和高级的功能。 一、高级主题函数 1. add_theme_supp…

python办公自动化——(三)替换PPT文档中图形数据-折线图

数据替换前 数据替换后 代码实现 # 单折线 pathE:\\13 python 下侧双x轴折线图\\ prs Presentation(path双x轴测试-01.pptx) data_timepd.read_excel(path"数据.xlsx",sheet_name单折线)ppt_9prs.slides…