【最優化方法】實驗三 無約束最優化方法的MATLAB實現

實驗的目的和要求:通過本次實驗使學生進一步熟悉掌握使用MATLAB軟件,并能利用該軟件進行無約束最優化方法的計算。

實驗內容:

1、最速下降法的MATLAB實現

2、牛頓法的MATLAB實現

3、共軛梯度法的MATLAB實現

學習建議:

本次實驗就是要通過對一些具體問題的分析進一步熟悉軟件的操作并加深對理論知識的理解。

重點和難點:

通過同一個具體問題用不同的方法解決的比較,加深理解恰當選用優化問題解決方法的重要性。

一 最速下降法

1.最速下降法基本原理和步驟

img 思想:尋求最速下降方向即負梯度方向

img

MATLAB實現:

2.代碼及數值算例:

(1) 程序源代碼:

function [ X,FMIN,K ] = zuisuxiajiang( f,x,x0,e )%  [ X,FMIN,N ] =zuisuxiajiang()法求解無約束問題%  X     極小點%  FMIN   極小值%  K     迭代次數%  f     問題函數%  x     變量%  x0    初始點%  e     終止誤差%  張超編寫于2014/04/15 count=0;td=jacobian(f,x)';while norm(subs(td,x,x0))>eP=-subs(td,x,x0);syms ry=x0+r*P;ft(r)=subs(f,x,y);    [r0]=fibonacci(ft,0,100,0.01);x0=x0+r0*P;count=count+1;endX=x0;FMIN=subs(f,x,x0);K=count;end

二 牛頓法

1.牛頓法基本原理和步驟

思想:在第k次迭代的迭代點x(k)鄰域內,用一個二次函數(如二階泰勒多項式)去近似代替原目標函數f(x),然后求出該二次函數的極小點作為對原目標函數求優的下一個迭代點,依次類推,通過多次重復迭代,使迭代點逐步逼近原目標函數的極小點。

設*f(x)*二次連續可微,在點 x(k) 處的Hesse矩陣正定。

img

MATLAB實現:

2.代碼及數值算例:

(2) 程序源代碼:

function [ X,FMIN,K ] = ysNewton( f,x,x0,e )%  [ X,FMIN,N ] =ysNewton()原始牛頓法求解無約束問題%  X     極小點%  FMIN   極小值%  K     迭代次數%  f     問題函數%  x     變量%  x0    初始點%  e     終止誤差%  張超編寫于2014/04/15count=0;td=jacobian(f,x)';H=jacobian(td',x);while norm(subs(td,x,x0))>eP=-subs(H,x,x0)^(-1)*subs(td,x,x0);x0=x0+P;count=count+1;endX=x0;FMIN=subs(f,x,x0);K=count;end

牛頓法對于二次正定函數只需做一次迭代就得到最優解。特別在極小點附近,收斂性很好速度也很快。

但牛頓法也有缺點,它要求初始點離最優解不遠,若初始點選的離最優解太遠時,牛頓法并不能保證其收斂,甚至也不是下降方向。

為了克服牛頓法的缺點,人們保留了從牛頓法中選取牛頓方向作為搜索方向,摒棄其步長恒取1的作法,而用一維搜索確定最優步長來構造算法。

img

(3) 程序源代碼:

function [ X,FMIN,K ] = xzNewton( f,x,x0,e )%  [ X,FMIN,N ] =xzNewton()帶步長牛頓法求解無約束問題%  X     極小點%  FMIN   極小值%  K     迭代次數%  f     問題函數%  x     變量%  x0    初始點%  e     終止誤差%  張超編寫于2014/04/15count=0;td=jacobian(f,x)';H=jacobian(td',x);while norm(subs(td,x,x0))>eP=-subs(H,x,x0)^(-1)*subs(td,x,x0);syms ry=x0+r*P;ft(r)=subs(f,x,y);    [r0]=fibonacci(ft,0,100,0.01);x0=x0+r0*P;count=count+1;endX=x0;FMIN=subs(f,x,x0);K=count;end

三 共軛梯度法

1.共軛梯度法基本原理和步驟

思想:將共軛性和最速下降方向相結合,利用已知迭代點處的梯度方向構造一組共軛方向,并沿此方向進行搜索,求出函數的極小點。

img

MATLAB實現:

2.代碼及數值算例:

(1) 程序源代碼:

function [ X,FMIN,K ] = gongetidu( f,x,x0,e )%  [ X,FMIN,N ] =gongetidu()共軛梯度法求解無約束問題%  X     極小點%  FMIN   極小值%  K     迭代次數%  f     問題函數%  x     變量%  x0    初始點%  e     終止誤差%  張超編寫于2014/04/15count=1;td=jacobian(f,x)';H=jacobian(td',x);if norm(subs(td,x,x0))>eP=-subs(td,x,x0);r0=-subs(td,x,x0)'*P/(P'*H*P);x0=x0+r0*P;else x0;endwhile norm(double(subs(td,x,x0)))>eb0=subs(td,x,x0)'*subs(td,x,x0)/(P'*P);P=-subs(td,x,x0)+b0*P;r0=-subs(td,x,x0)'*P/(P'*H*P);x0=x0+r0*P;count=count+1;endX=x0;FMIN=subs(f,x,x0);K=count;end

四 一個算例

分別用上述三中方法計算下題,并比較各算法.

Min f(x)=(x1 - 2)^2 + (x1 – 2*x2)^2

初始點x0=(0,3)T

允許誤差e=0.1

鍵入命令并輸出結果:

syms x1 x2\>> f=(x1-2)^2+(x1-2*x2)^2;\>> x=[x1;x2];\>> x0=[0;3];\>> e=0.1;[X,FMIN,N]=zuisuxiajiang(f,x,x0,e)X =1.97630.9818FMIN =7.2076e-04N =10\>> [X,FMIN,N]=ysNewton(f,x,x0,e)X =21FMIN =0N =1[X,FMIN,N]=gongetidu(f,x,x0,e)X =21FMIN =0N =2

由上述結果我們發現:

對于二次正定函數newton法只需一次迭代就得到正確結果,共軛梯度法只需進行兩次(因為目標函數是二元函數)迭代就得出正確結果。但最速下降法卻迭代了10次,雖然一維搜索存在誤差,但實際上最速下降法也需迭代多次。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/18724.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/18724.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/18724.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

請簡述vue2和vue3的區別

Vue2和Vue3作為Vue.js框架的兩個主要版本,在多個方面存在顯著的差異。以下是它們之間主要區別的詳細概述: 生命周期函數鉤子: Vue2:包含了一系列的生命周期鉤子函數,如beforeCreate、created、beforeMount等&#xff0…

/lib、/lib64和/usr/local/lib的區別

在Linux系統中,/lib、/lib64 和 /usr/local/lib 這幾個目錄都用于存放庫文件(即共享庫或動態鏈接庫),但它們在用途和管理上有一些區別。 /lib 這個目錄通常包含了系統啟動和運行所必需的共享庫。這些庫通常是核心系統組件和關鍵工…

計量和測量的區別有哪些?兩者的關系是什么樣的?

計量和測量在行業內經常被混用,更不用說外行人對計量和測量的定義不夠清晰,無論是看字面還是定義,似乎兩者沒有什么太大的區別,但實際上,兩者還是有區別的,不過又存在千絲萬縷的聯系,那么計量和…

【數據結構】冒泡排序、直接插入排序、希爾排序詳解!

文章目錄 1. 冒泡排序🍎2. 直接插入排序🍎3. 希爾排序(縮小增量排序)🍎 1. 冒泡排序🍎 🐧 基本思想: 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。 大的數據…

在編程中百分號表示什么:深度解析其多重角色與應用

在編程中百分號表示什么:深度解析其多重角色與應用 在編程的廣闊領域中,百分號(%)這一看似簡單的符號,實則承載著多重含義與功能。它既是數學運算的得力助手,又是字符串格式化的關鍵工具,甚至在…

Midjourney繪畫關鍵詞參數匯總(一)

在數字藝術和創意設計領域,參數化繪畫技術正日益受到關注。Midjourney作為一家領先的藝術技術公司,推出了一系列繪畫關鍵詞參數,為藝術家和設計師們提供了全新的創作工具。本文將介紹Midjourney繪畫關鍵詞參數的匯總,探索其在數字…

適合能源企業的文檔安全外發系統應該是什么樣的?

能源企業是市場經濟中的重要組成,也是社會可持續長遠發展的關鍵組成之一,能源行業在開拓新能源業務線、提升產能的日常經營中,也需要與外部合作伙伴、客戶間進行密切的業務往來,文檔可能涉及多個領域多個類型。 能源供應合同&…

Vue3 之 動態組件和KeepAlive組件

一、動態組件 1、簡介 ? 在某些業務場景下,頁面的某模塊具有多個組件但在同一時間只顯示一個,需要在多個組件之間進行頻繁的切換,如:tab切換等場景。除了可以使用v-if、v-show根據不同條件顯示不同組件之外,還可以通…

深入理解模型驅動測試:優點、挑戰與應用場景

本文翻譯自:Understanding Model-Based Testing: Benefits, Challenges, and Use Cases 原文作者:Qt Group質量保證市場營銷主管Sebastian Polzin 審校:Jinjing Li 對于那些尋求系統化和條理化測試方法的測試工程師而言,模型驅動…

ROS2 Topics和Services

本文主要介紹ROS的Topics概念,如何創建Publisher和Subscriber,通過Topic在ROS程序間通信;介紹ROS的Services概念,如何創建Client和Server并建立通信。 更多內容,訪問專欄目錄獲取實時更新。 ROS Topics Topics可以被視…

做電商,錯過了2020年的抖音!那2024一定要選擇視頻號小店!

哈嘍~我是電商月月 電商老板們集合了,問大家一個問題: 如果能讓你回到三四年前,抖音才步入大眾視野,這時候讓你去做抖音小店,你愿意嗎? 我敢相信!很多,錯過當年抖音紅利的商家,一…

計算機三級 網絡技術

一、邊界網關協議BGP BGP是邊界網關協議,是外部而不是內部網關協議(是不同自治系統的路由器之間使用的協議)一個BGP發言人使用TCP(不是UDP)與其自治系統的BGP發言人交換路由信息。BGP協議交換路由由信息的節點數是以自…

Docker HTTPS api V2 Manifest V 2, Schema 2 下的免裝docker下載鏡像的方法

目錄 前言 下載鏡像代碼 使用方法 原代碼中無法適配 Schema 2 的原因淺析 如何解決 相對原代碼改動的東西 前言 本文提供代碼主要是基于 https://github.com/NotGlop/docker-drag 提供的代碼修改的。鏈接中提供的代碼應該是是基于HTTPS api V2 Manifest V 2, Schema 1實…

面試必備:應對 “為什么離職” 的萬能回答

使用PC端的朋友,請將頁面縮小到最小比例,閱讀最佳! 面試官問到你為什么從上一家公司離職時,你會怎么回答?這個問題我覺得很有意思,也很有必要去探討一下。 很多專業人士都會建議你,最好不要直接…

C++---迭代器介紹

迭代器的介紹 使用迭代器需要引用頭文件,但一般的容器都引用了這個頭文件。 這五種迭代器的聲明如下: struct output_iterator_tag { };//輸出迭代器 struct input_iterator_tag{ };//輸入迭代器 struct forward_iterator_tag : public input_iterator_tag {};//向前迭代器 …

基于序列深度學習模型的向量海岸線形狀分類方法 2024.05

本文中提出了一個數據驅動的方法來分類的形狀矢量海岸線,該方法利用基于序列的深度學習算法對海岸線矢量分段進行建模和分類。具體而言,首先將復雜的海岸線劃分為一系列彎曲,并進一步提出了一組不同的特征來描述每個彎曲的形態特征。然后&…

強化學習——學習筆記2

在上一篇文章中對強化學習進行了基本的概述,在此篇文章中將繼續深入強化學習的相關知識。 一、什么是DP、MC、TD? 動態規劃法(DP):動態規劃法離不開一個關鍵詞,拆分 ,就是把求解的問題分解成若…

【JavaScript腳本宇宙】點燃你的Web開發:數據綁定和MV*框架

逐一剖析:JavaScript框架和庫的概述、特點與應用 前言 在當今技術日新月異的時代,JavaScript庫和框架已成為前端開發的重要工具。這篇文章將詳細介紹六種不同的JavaScript庫和框架,幫助讀者了解他們的主要特性、使用示例和適用場景。 歡迎訂…

gif幀數修改怎么操作?一鍵掌握GIF幀數修改技巧!

gif幀數修改怎么操作?在數字化信息爆炸的時代,GIF動圖因其生動有趣的特性而備受廣大網友喜愛。然而,很多時候我們可能會遇到GIF動圖幀數過多或過少,導致動畫效果不盡如人意的情況。那么,如何對GIF動圖的幀數進行修改呢…

探索微軟Edge開發者工具:優化前端開發的藝術與科學

探索微軟Edge開發者工具:優化前端開發的藝術與科學 引言:Edge開發者工具概覽一、基礎操作:步入DevTools的大門1.1 啟動與界面布局1.2 快速導航與定制 二、元素審查與樣式調整2.1 精準元素選取2.2 實時CSS編輯2.3 自動完成與內聯文檔 三、Java…