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

工程数学上机4

时间:2023-06-11 09:44:05浏览次数:43  
标签:xk 工程 g1 g0 上机 step 数学 pk 迭代

实验四:共轭梯度法程序设计

一、实验目的

掌握共轭梯度法的基本思想及其迭代步骤;学会运用 MATLAB 编程实现常用优化算法; 能够正 确处理实验数据和分析实验结果及调试程序。

 

二、实验内容

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

(2) 终止准则取,搜索方法采用非精确搜索 Armijo;

(3) 完成 FR 共轭梯度法的 MATLAB 编程、调试;

(4) 选取几个与实验二实验三中相同的初始点,并给出相关实验结果的对比及分析(从最优解、

最优值、收敛速度(迭代次数) 等方面进行比较);


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

  

 

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

   1. 算法步骤

步骤1:初始点x 0, 置k = 0,精度要求e为10^-5

步骤2:若∣∣pk∣∣ ≦ e ,停止迭代

步骤3:计算 b=(g1*g1')/(g0*g0'), pk=-g1+b*pk;

步骤4:Wolfe-Powell 非精确一维搜索得步长a

步骤5:x k+1 = x k + a*pk, k=k+1 ,转步骤 2

 

2. 代码

function [xk]=FR_Wolfe(e,x)

%step 1

g0=shuzhiweifenfa(x);

pk=-g0;

%没用到k,只存储当前迭代的值。

xk=x;

while 1

    %step 2

    %一维搜索求ak

    a=Wolfe_Powell(xk,pk);

    %step 3

    xk=xk+a*pk;

    g1=shuzhiweifenfa(xk);

    %step 4

    %范数用的是平方和开根号

    if sqrt(sum(g1.^2))<=e

        return;

    end

    %step 5

    b=(g1*g1')/(g0*g0');

    pk=-g1+b*pk;

    %step 6

    %没用到k,只存储当前迭代的值。

    g0=g1;

end

 

function g=shuzhiweifenfa(x)

for i = 1:length(x)

    m=zeros(1,length(x));

    m(i)=(10^-6)/2;

    g(i)=f(x+m)-f(x-m);

end

g=g/10^-6;

 

function a=Wolfe_Powell(x,pk)

%step 1

u=0.1;

b=0.5;

a=1;

n=0;

m=10^100;

%step 2

fx=f(x);

g=shuzhiweifenfa(x);

while 1

    xk=x+a*pk;

    fxk=f(xk);

    gk=shuzhiweifenfa(xk);

    if (fx-fxk)>=(-u*a*g*pk.')%(3-1)

        if (gk*pk.')>=(b*g*pk.')%(3-2)

            return;

        else

            %step 4

            n=a;

            a=min(2*a,(a+m)/2);

        end

    else

        %step 3

        m=a;

        a=(a+n)/2;

    end

end

 

3. 结果

n=10;

x=[-1.2 1];

>> [x_,k]=FR_Wolfe(10^-5,x);

>> fprintf('x=%f\t%f\n',x_(1),x_(2));

x=1.000199 1.000399

>> fprintf('迭代次数=%d',k);

迭代次数=124

 

 

四、心得体会

从实验结果可以看出,共轭梯度法在解决这个无约束优化问题时,与实验二和实验三中的梯度下降法和牛顿法相比,无论是最优解、最优值还是迭代次数都表现更好。尤其是在初始点较远离最优解的情况下,共轭梯度法的收敛速度更快。这说明了共轭梯度法的高效性和可靠性,这也是它在大规模优化问题中被广泛应用的原因之一

标签:xk,工程,g1,g0,上机,step,数学,pk,迭代
From: https://www.cnblogs.com/zyzyzrp/p/17472524.html

相关文章

  • 数学公式:点到直线的距离
    求点到直线的距离,点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+......
  • 潘毅 美国医学与生物工程院院士、欧洲科学与艺术院院士、乌克兰国家工程院外籍院士、
    美国医学与生物工程院院士、欧洲科学与艺术院院士、乌克兰国家工程院外籍院士、生物信息学领域专家 潘毅,1960年5月出生于江苏吴江,汉族,生物信息学领域专家,美国医学与生物工程院院士,欧洲科学与艺术院院士,乌克兰国家工程院外籍院士,英国皇家公共卫生学院院士,中国科学院深圳理工大......
  • [Week 20]每日一题(C++,图论,数学,搜索)
    目录T1[Daimayuan]Collision(C++,多源最短路)题目描述输入描述输出描述样例输入1样例输出1样例输入2样例输处2数据范围解题思路T2[Daimayuan]农田划分(C++,数学,BFS)题目描述题目输入题目输出样例输入1样例输出1样例输入2样例输出2数据范围解题思路T3[Daimayuan]三段式(C++,数组前缀......