首页 > 其他分享 >6.5

6.5

时间:2024-06-05 22:25:32浏览次数:27  
标签:10 %. initial results 6.5 points 2f

实验三:Newton法程序设计

一、实验目的

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

 

 

二、实验内容

(1)求解无约束优化问题:f(x)=(x1+10x2)^2+5(x3-x4)^2+(x2-2x3)^4+10(x1-x4)^4;

(2)终止准则取||眩f(x^k)|| 10^-6;

(3)完成Newton法(牛顿法)的MATLAB编程、调试;

(4)选取几个与实验二中相同的初始点,并给出相关实验结果的对比及分析(从最优解、最优值、收敛速度(迭代次数)等方面进行比较);

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

 

 

 

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

 

function newton_unconstrained_optimization

% 定义目标函数 f 及其梯度 grad_f 和 Hessian 矩阵 hessian_f

f = @(x) (x(1) + 10*x(2))^2 + 5*(x(3) - x(4))^2 + (x(2) - 2*x(3))^4 + 10*(x(1) - x(4))^4;

grad_f = @(x) [

2*(x(1) + 10*x(2)) + 40*(x(1) - x(4))^3;

20*(x(1) + 10*x(2)) + 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

];

hessian_f = @(x) [

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

];

 

% 参数设置

epsilon = 1e-6; % 终止准则的阈值

max_iter = 1000; % 最大迭代次数

initial_points = [

1, 1, 1, 1;

-1, 2, -3, 4;

0.5, -0.5, 0.5, -0.5

]; % 多个初始点

 

% 记录每个初始点的结果

results = cell(size(initial_points, 1), 1);

 

for i = 1:size(initial_points, 1)

x = initial_points(i, :)';

iter = 0;

f_values = [];

 

while norm(grad_f(x)) > epsilon && iter < max_iter

iter = iter + 1;

hessian = hessian_f(x);

gradient = grad_f(x);

% 求解线性系统 H * p = -grad 以得到搜索方向 p

p = -hessian \ gradient;

alpha = line_search(f, grad_f, x, p); % 线搜索确定步长

x = x + alpha * p;

f_values(end+1) = f(x); % 记录函数值

end

results{i} = struct('x', x, 'f_value', f(x), 'iterations', iter, 'f_values', f_values);

end

% 打印结果

for i = 1:length(results)

fprintf('Initial point: (%.2f, %.2f, %.2f, %.2f)\n', initial_points(i, 1), initial_points(i, 2), initial_points(i, 3), initial_points(i, 4));

fprintf('Optimal solution: (%.6f, %.6f, %.6f, %.6f)\n', results{i}.x);

fprintf('Optimal function value: %.6f\n', results{i}.f_value);

fprintf('Iterations: %d\n\n', results{i}.iterations);

end

 

% 画出最优值随迭代次数变化的曲线图

for i = 1:length(results)

figure;

plot(results{i}.f_values);

title(sprintf('Initial point: (%.2f, %.2f, %.2f, %.2f)', initial_points(i, 1), initial_points(i, 2), initial_points(i, 3), initial_points(i, 4)));

xlabel('Iterations');

ylabel('Function Value');

end

end

 

% 线搜索函数

function alpha = line_search(f, grad_f, x, p)

alpha = 1;

c = 1e-4;

rho = 0.9;

while f(x + alpha * p) > f(x) + c * alpha * grad_f(x)' * p

alpha = rho * alpha;

end

end

标签:10,%.,initial,results,6.5,points,2f
From: https://www.cnblogs.com/xuan-2004/p/18234016

相关文章

  • 6.5
    这次放假,第一要义就是“莫谈国事”。以下大概记叙一下火车上的见闻与感想。(这里应该有张图片,大家可以yy一下)“景翳翳以将入?未入,隐于云后,正泛着粼粼波光。”原始的不再原始,现代的更加现代。原始的镰刀逐渐被割草机取代,有些地方的麦田也增添了太阳能电池板。不过鸟儿依旧会在......
  • 6.5数组--模拟、偏移量-螺旋矩阵
    M:59.螺旋矩阵II题意描述给你一个正整数n,生成一个包含1到n^2所有元素,且元素按顺时针顺序螺旋排列的nxn正方形矩阵matrix。示例1:输入:n=3输出:[[1,2,3],[8,9,4],[7,6,5]]示例2:输入:n=1输出:[[1]]提示:1<=n<=20思路这道题目可以说在面试中出现......
  • 6.5
    活了又死了这学期Really和班主任在看小说的上面斗争了一学期(md,被制裁了)起因是有一天借了一本《齐马蓝》(大小参考算法竞赛)周六晚三我拿出了小说开始读xxw(你们知道我说的是谁,司马截),在监控里把我抓了一个正着,下来就把我抓了然后我用最后十分钟写了一个检讨拍尽了她的马屁最......
  • Studio One6.5最新版本软件功能介绍及用户使用步骤教程S及安装激活使用方法
     StudioOne做为新生代音乐工作站,凭借更低的价格和完备的功能,获得了音乐人和直播行业工作者的青睐,尤其是对硬件声卡的适配支持更好,特别适合用来配合线上教学和电商带货。最近网上出现不少关于StudioOne不能用或者StudioOne掉激活的问题讨论,其原因是使用了非正版软件,下面让我......
  • MIT 6.5830 simpleDB Lab2
    Exercise1需要完成的是:src/java/simpledb/execution/Predicate.javasrc/java/simpledb/execution/JoinPredicate.javasrc/java/simpledb/execution/Filter.javasrc/java/simpledb/execution/Join.java这里主要实现两个功能:Filter:通过Predicate过滤一部分满足条件的Tupl......
  • centos6.5重启docker容器死机问题
      概述近期在整理服务问题,使用docker容器重新部署服务。过程中有不少坑,主要是系统配置和系统版本的问题。环境CentOSrelease6.5(Final)dockerversion1.7.1问题现象使用restart命令重启docker容器,系统突然卡死,并不断重启,重启3次后恢复。检查系统日志“/var/log/......
  • Qt 6.5.5 链接和QML与C++交互的若干问题
    需求描述QtQuick开发桌面组件,使用讯飞API(提供头文件、静态库、动态库),希望部署到Windows平台,在QtCreator开发。QML与C++交互主要参考:QML与CPP,https://blog.csdn.net/gongjianbo1992/article/details/87965925另有参考:信号与槽,https://blog.csdn.net/ifeng12358/article/detai......
  • MIT 6.5830 simpleDB Lab1
    Exercise1需要完成的代码有:src/java/simpledb/storage/TupleDesc.javasrc/java/simpledb/storage/Tuple.javaTuple是simpleDB的元组,由多个Field(字段)组成,TupleDesc负责描述Tuple中各个Field对应的schema。Tuple.java代码:packagesimpledb.storage;importjava.io.Serial......
  • centos6.5安装python3.6.9
    下载python:https://www.python.org/ftp/python/3.6.9/Python-3.6.9.tgz安装tar-zxvfPython-3.6.9.tgzcdPython-3.6.9./configure--prefix=/opt/python3.6makemakeinstallecho"/opt/python3.6/lib">/etc/ld.so.conf.d/python3.6.9.confsudoldconf......
  • Proxmox VE 8.1 Kernel 6.5.13-5-pve ,无法支持核显 SR-IOV 的问题
    我的之前的博客《利用显卡的SR-IOV虚拟GPU技术,实现一台电脑当七台用》介绍了ProxmoxVE7.x上启用核显虚拟化的方法。并给出了两个脚本,快速启用核显的SR-IOV。该脚本在PromoxVE7.x和8.x都做了测试。近期重新在ProxmoxVE8.1上部署,发现无法正常工作。 经过检查发现......