posts - 296,comments - 1,views - 2995

一.所花时间

0.5h

二.代码量

30行

三.博客量

1篇

四.了解到的知识点

实验三:Newton法程序设计
一、实验目的
掌握Hesse矩阵的计算方法和Newton法的基本思想及其迭代步骤;学会运用MATLAB编程实现常用优化算法;能够正确处理实验数据和分析实验结果及调试程序。
二、实验内容
(1)求解无约束优化问题: ;
(2)终止准则取 ;
(3)完成Newton法(牛顿法)的MATLAB编程、调试;
(4)选取几个与实验二中相同的初始点,并给出相关实验结果的对比及分析(从最优解、最优值、收敛速度(迭代次数)等方面进行比较);
(5)按照模板撰写实验报告,要求规范整洁。
三、算法步骤、代码、及结果
1. 算法步骤
(1)给定初始点 x0,及精度e
(2)若梯度的范数<e ,停止,极小点为xk ,否则转(3);
(3)计算负梯度,海森矩阵,令 dk=负梯度*海森矩阵的逆
(4)令 xk+1 = xk + dk,k=k+1,转(2)。
2. 代码

% 定义目标函数及其梯度和海森矩阵

%新建fun.m脚本文件
function f=fun(x)
f= (x(1)+10*x(2))^2+5*(x(3)-x(4))^2+(x(2)-2*x(3))^4+10*(x(1)-x(4))^4;

%新建gfun.m脚本文件
function gf=gfun(x)
gf = [2*(x(1)+10*x(2))+40*(x(1)-x(4))^3;  20*(10*x(2)+x(1))+4*(x(2)-2*x(3))^3;  10*(x(3)-x(4))-8*(x(2)-2*x(3))^3;  -10*(x(3)-x(4))-40*(x(1)-x(4))^3];

%新建Hess.m脚本文件
function He = Hess(x)
He = [2+120*(x(1)-x(4))^2,  20,  0,  -120*(x(1)-x(4))^2;
      20,  200+12*(x(2)-2*x(3))^2,  -24*(x(2)-2*x(3))^2,  0;  
      0,  -24*(x(2)-2*x(3))^2,  10+48*(x(2)-2*x(3))^2,  -10;
      120*(x(1)-x(4))^2,  0,  -10,  10+120*(x(1)-x(4))^2];

%新建dampnm.m脚本文件
function [k,x,val] = dampnm(fun,gfun,Hess,x0_list,epsilon)
maxk = 10000;
for i = 1:length(x0_list)-1
    x0 = x0_list(:,i);

    beta=0.5;  sigma=0.4;  k=0;

    fprintf('初始点 (%g; %g; %g; %g)\n', x0(1), x0(2), x0(3), x0(4));
    while (k<maxk)
        gk=feval(gfun,x0); %计算梯度
        Gk=feval(Hess,x0);%计算Hess
        dk=-Gk\gk;
        if(norm(gk)<epsilon), break; end
        m=0;  mk=0;
        %用Amrijo搜索技术确定步长
        while(m<20) %最大迭代次数
           if(feval(fun,x0+beta^m*dk)<=feval(fun,x0)+sigma*beta^m*gk'*dk)
               mk=m;  break;
           end
           m=m+1;
        end
        x0=x0+beta^mk*dk;  k=k+1;
    end
    x=x0;
    val=feval(fun,x);
    fprintf('迭代次数: %d\n', k);
    fprintf('最优点: (%g; %g; %g; %g)\n', x(1), x(2), x(3), x(4));
    fprintf('最优函数值: %g\n', val);
    fprintf('\n');
end


% 命令行输入
% x0=[-1,-2,3;  1,7,10;  3,-4,5;  3,6,4];
% dampnm('fun','gfun','Hess',x0,1e-6);

3.结果

posted on   leapss  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示