首页 > 编程语言 >实验二 最速下降法程序设计

实验二 最速下降法程序设计

时间:2023-06-07 21:55:54浏览次数:39  
标签:迭代 下降 次数 实验 程序设计 最优 最速

一、实验目的

通过最速下降法的程序设计,为今后的约束优化方法的学习和编程奠定基础;掌握负梯度方向的定义和最速下降法的迭代公式;通过此次实验,进一步巩固最速下降法的基本原理和思想。

二、实验内容

(1)求解无约束优化问题:

(2)终止准则取;

(3)完成最速下降法(负梯度法)的MATLAB编程、调试;

(4)要求选取多个不同的初始点,并给出迭代次数,最优函数值等相关信息,有能力的同学尝试画出最优值随迭代次数变化的曲线图;

(5)按照模板撰写实验报告,要求规范整洁。

三、算法步骤、代码、及结果

1. 算法步骤

(1)最速下降法Matlab的实现;
(2)学会分析实验结果;
(3)撰写实验报告;

2. 代码

Grad.m文件

   function [x,val,k] = grad(fun,gfun,x0)
       %功能:用最速下降法求解无约束问题 minif(x)
       %输入:fun,gfun分别是目标函数和梯度,x0是初始点
       %输出:x,val分别是近似最优值和最优值,k是迭代次数
       maxk=5000; %最大迭代次数
       rho=0.5;
       sigma=0.4;
       k=0;
       e=1e-5; %精度
       while(k<maxk) %在最大迭代次数范围内时
       g=feval(gfun,x0); %计算梯度
       d=-g;
       if(norm(d)<e),break;end % 在精度范围内--符合要求,迭代结束

       %用Amrijo搜索技术确定步长
       m=0;mk=0;
       while(m<20) %最大迭代次数
       if(feval(fun,x0+rho^m*d)<feval(fun,x0)+sigma*rho^m*g'*d)
       mk=m;
      break;
       else
       m=m+1;
       end
       end
       x0=x0+d*rho^mk;
       k=k+1;
       end
       x=x0;
       val=feval(fun,x0);
       disp(['迭代次数:k='])
       disp(k)
       end

Fun.m文件

    function f= fun(x)
       %目标函数
       f=100*(x(1)^2-x(2))^2+(x(1)-1)^2;
       end
Gfun.m文件
function g=gfun(x)
       %目标函数的梯度
       g=[400*x(1)*(x(1)^2-x(2))+2*(x(1)-1),-200*(x(1)^2-x(2))]';
       end

3. 结果

迭代次数:

        k=
       1435

       最优解:x =
       1.0000
       1.0000
   此时: f(x) = 1.1985e-10

标签:迭代,下降,次数,实验,程序设计,最优,最速
From: https://www.cnblogs.com/yzx-sir/p/17464679.html

相关文章

  • 实验6
    task1_1源码:fromturtleimport*defmove(x,y):'''画笔移动到坐标(x,y)处'''penup()goto(x,y)pendown()defdraw(n,size=100):'''绘制边长为size的正n变形'''foriinrange(n):......
  • 实验六 turtle绘图与Python库应用编程体验
    试验任务一实验源码 task1fromturtleimport*defmove(x,y):'''画笔移动到坐标(x,y)处'''penup()goto(x,y)pendown()defdraw(n,size=100):'''绘制边长为size的正n变形'''foriinrange(n):......
  • 实验七 面向对象编程与内置模块
    实验任务一实验源码 classAccount:'''一个模拟银行账户的简单类'''def__init__(self,name,account_number,initial_amount=10):'''构造新账户'''self._name=nameself._card_no=accoun......
  • 实验6
    task1_1.py实验源码:fromturtleimport*defmove(x,y):penup()goto(x,y)pendown()defdraw(n,size=100):foriinrange(n):fd(size)left(360/n)defmain():pensize(2)pencolor('red')move(-200,0)......
  • 恒电流间歇滴定法(GITT)测试锂离子电池的实验流程
    恒电流间歇滴定法(GITT)测试锂离子电池的实验流程锂电池作为现代电子设备中最常用的电源之一,其性能和安全性对于设备的正常运行至关重要。恒电流间歇滴定测试是一种常用的测试方法,用于评估锂电池的容量、循环寿命和内阻等关键参数。1、确定测试目的和参数:在进行恒电流间歇滴定测试之......
  • 实验7 面向对象编程与内置模块
    实验任务1classAccount:#一个模拟账户类def__init__(self,name,account_number,initial_amount=10):'''构造新账户'''self._name=nameself._card_no=account_numberself._balance=initial_amount......
  • 实验7 面向对象编程与内置模块
    实验任务1源代码1classAccount:2def__init__(self,name,account_number,initial_amount=10):3self._name=name4self._card_no=account_number5self._balance=initial_amount67defdeposit(self,amount):8sel......
  • 《大学物理实验上》期末笔记(二)有效数字特典
    《大学物理实验上》期末笔记(二)有效数字特典最头疼的一集有效数字测量值存在误差是不可避免的,因而测量值包含了准确数字和欠准数字。我们将准确数字和欠准数字总称为有效数字。在大学物理实验中,通常只取一位欠准数字,因此有效数字由若干位准确数字和一位欠准数字组成。有效数......
  • 【锐格】数据结构-实验-二叉树
    7075#include<iostream>#include<cstdio>usingnamespacestd;typedefstructTNode{chardata;structTNode*lchild,*rchild;}BiNode,*BiTree;BiTreeT;voidcreateTree(BiTree&T){charch;cin>>ch;if(ch==&#......
  • 【锐格】数据结构-实验-图
    7039#include<iostream>#include<cstdio>usingnamespacestd;constintMAX_NUM=100;intw;intmark[MAX_NUM];typedefintEdgeData;typedefstructNode{intdest;EdgeDataweight;//边权structNode*next;//nextroute}EdgeNode;......