首页 > 其他分享 >工程数学上机2

工程数学上机2

时间:2023-06-11 09:44:23浏览次数:37  
标签:最优 上机 工程 gfun 最速 funf 数学 x0 迭代

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

一、实验目的

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

 

二、实验内容

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

(2) 终止准则取;


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

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

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

 

  

 

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

   1. 算法步骤

步骤1:给出初始点x 0,置k=0,最大迭代次数maxk=5000,精度e=1e-5,目标 函数funf及其梯度gfun

步骤2:若终止条件满足(| | gfun | | < e),则迭代停止

步骤3:计算d k = −gfun

步骤4:在d k方向上利用一维精确线性搜索Amrijo搜索求步长ak

步骤5:x k + 1 = x k + α k d k , k = k + 1,转步骤2

  

2. 代码

grad.m

function [x,val,k] = grad(funf,gfun,x0)

%功能:用最速下降法求解无约束问题

%输入:funf,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(funf,x0+rho^m*d)<feval(funf,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(funf,x0);

end

 

funf.m

function f= funf(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. 结果

x0=[-1.2 1]';

>> [x,val,k]=grad('funf','gfun',x0);

>> disp(['最优解:x = '])

disp(x)

disp(['此时: f(x) = ',num2str(val)])

最优解:x =

    1.0000

    1.0000

 

此时: f(x) = 1.1985e-10

disp(['迭代次数:k = ', k])

迭代次数:k = ֛

>> disp(k)

        1435

 

 

四,心得体会

可以发现,与实验一中的结果相比,最速下降法的迭代次数更多,但在这个问题上仍旧表现不错。同时,我们也发现,步长alpha的选取在最优值的求解过程中极其关键,在实现中需要仔细调整。最终,我们得到了代表最优解的点,以及该点对应的最优值。

标签:最优,上机,工程,gfun,最速,funf,数学,x0,迭代
From: https://www.cnblogs.com/zyzyzrp/p/17472519.html

相关文章

  • 工程数学上机3
    实验三:Newton法程序设计一、实验目的掌握Hesse 矩阵的计算方法和Newton法的基本思想及其迭代步骤;学会运用MATLAB编程实现 常用优化算法; 能够正确处理实验数据和分析实验结果及调试程序。  二、实验内容(1)求解无约束优化问题:;(2)终止准则取;(3)完成Newton 法......
  • 工程数学上机4
    实验四:共轭梯度法程序设计一、实验目的掌握共轭梯度法的基本思想及其迭代步骤;学会运用MATLAB编程实现常用优化算法;能够正 确处理实验数据和分析实验结果及调试程序。 二、实验内容(1)求解无约束优化问题:;(2)终止准则取,搜索方法采用非精确搜索 Armijo;(3)完成FR共......
  • 数学公式:点到直线的距离
    求点到直线的距离,点P(a,b),直线l为Ax+By+C=0过P点作垂直于l的直线m\[l的点斜式为\\y=-\frac{A}{B}x-\frac{C}{B}\\x=-\frac{B}{A}y-\frac{C}{A}\\求垂直斜率,通过斜率相乘得-1求得。k=\frac{B}{A}\\则m的点斜式方程为\\y=\frac{B}{A}(x-a)+b......
  • 现代软件工程--基础知识
    现代软件工程期末复习--基础知识1.软件工程师及软件团队讲解了一些软件工程师的规范和团队规范没啥看的,暂时忽略2.软件及其过程什么是软件?计算机软件指计算机系统中的程序、数据及其相关文档程序:按照特定顺序组织的计算机数据和指令的集合数据:使程序能正常执行的......
  • 数学考研高效率速通计划
    绝大多数院校的数学考研初试科目是数学分析和高等代数。根据院校的难度,数学分析和高等代数各选择一本合适的教辅书。按照考试大纲(各院校略有差异),把不需要的章节删去。第一轮复习的时候,数学分析安排两个月,高等代数安排一个月。数学分析把教材内容进行拆分成60天的任务,高等代数3......
  • 数学老师从没这么教过,乘法竖式中进位可以是多位(附Python实现与测试源码)...
    大概十五年前,曾经写过一个C语言版本的类似代码。核心思想是:在乘法竖式计算过程中,每次的进位实际上是可以超过一位的,虽然老师从来没有这么教过。这样的操作在Python中是没有必要的,因为Python中的数字没有大小限制。但在C语言或其他静态类型语言中,由于整型变量能够表示的范围有限,所以......
  • 数学 多元函数的微分
    <h4>一,二元函数的偏导数与全微分</h4>1.偏导数的定义和几何意义2.全微分的定义/性质 ......
  • 五.特征工程之特征降维
    1.什么是特征降维降低的对象为二维数组此处的降维为降低特征的个数降维是指在某些限定条件下,降低随机变量(特征)个数,得到一组“不相关”主变量的过程降维的效果就是使得特征和特征之间不相关如果相关的特征太多的话会造成数据的冗余的正是因为在进行训练的时候,我们都是使......
  • 【数学荟萃】第10期:考研数学常用泰勒公式汇总
    泰勒公式是考研数学中同学必须掌握的一系列公式,在求极限、解答题的中值定理问题上面大有用武之地。但是它的公式太多太杂,为了方便学生学习,下面总结了这些公式。为了方便排版,这里直接发图片。由于比较匆忙,如存在小错误请批评指正。 需要pdf文件的同学,扫描下面二维码关注公众号【......
  • 日报 数学
     工程数学实验 1.算法步骤   黄金分割法也叫0.618法,是一种基于区间收缩的极小值搜索算法。比如以[a,b][a,b][a,b]为区间,产生两个内点x1=a+0.382∗(b−a)x2=a+0.618∗(b−a)x_1=a+0.382*(b-a)\\x_2=a+0.618*(b-a)x1​ =a+......