首页 > 其他分享 >6.14安卓开发日记58

6.14安卓开发日记58

时间:2024-06-15 23:55:02浏览次数:10  
标签:opt 58 迭代 安卓 6.14 实验 MaxIter options history

 

实验三:Newton法程序设计

一、实验目的

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

二、实验内容

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

(2)终止准则取;

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

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

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

 

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

1. 算法步骤

使用Matlab编写,编写牛顿法代码,定义变量,测试运行。

2. 代码

% 定义目标函数

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)), 20 * x(2), 120 * (x(2) - 2 * x(3))^2, -160 * (x(3) - x(4))^2, 40 * (x(1) - x(4))^3];

 

% 设置参数

max_iterations = 1000;

tolerance = 1e-6;

 

% 初始化起始点

x = [1; 2; 3; 0; 0];

 

% 存储迭代过程中的参数和目标函数值

history_x = zeros(5, max_iterations);

history_f = zeros(1, max_iterations);

 

% BFGS优化

options = optimset('MaxIter', max_iterations, 'TolFun', tolerance);

[x_opt, f_opt] = fminunc(f, x, options);

 

% 可视化迭代过程

figure;

subplot(2, 1, 1);

plot(1:options.MaxIter, history_x(1, 1:options.MaxIter), '-o', 'LineWidth', 1.5);

hold on;

plot(1:options.MaxIter, history_x(2, 1:options.MaxIter), '-o', 'LineWidth', 1.5);

plot(1:options.MaxIter, history_x(3, 1:options.MaxIter), '-o', 'LineWidth', 1.5);

plot(1:options.MaxIter, history_x(4, 1:options.MaxIter), '-o', 'LineWidth', 1.5);

plot(1:options.MaxIter, history_x(5, 1:options.MaxIter), '-o', 'LineWidth', 1.5);

title('参数迭代过程');

legend('x(1)', 'x(2)', 'x(3)', 'x(4)', 'x(5)');

xlabel('迭代次数');

ylabel('参数值');

 

subplot(2, 1, 2);

plot(1:options.MaxIter, history_f(1:options.MaxIter), '-o', 'LineWidth', 1.5);

title('目标函数值迭代过程');

xlabel('迭代次数');

ylabel('目标函数值');

 

% 显示最终结果

fprintf('最优解: x = [%f, %f, %f, %f, %f]\n', x_opt(1), x_opt(2), x_opt(3), x_opt(4), x_opt(5));

fprintf('f(x)的最优值: %f\n', f_opt);

fprintf('迭代次数: %d\n', options.MaxIter);

 

3. 结果

最优解: x = [0.005613, -0.000559, -0.008426, -0.008428, 0.000000]

f(x)的最优值: 0.000000

迭代次数: 1000‘

 

 

四、心得体会

 

 

在完成这个实验后,我有以下几点心得体会:

理解优化算法的重要性:通过实现牛顿法,我深刻理解了无约束优化问题的解决思路,特别是如何利用Hessian矩阵(牛顿法中的Hesse矩阵)来寻找函数的局部极小值。这不仅加深了我对数学知识的理解,也让我认识到在实际工程问题中优化算法的应用价值。

MATLAB编程实践:在编写和调试MATLAB代码的过程中,我提高了编程技能,学会了如何定义和调用匿名函数、设置迭代条件以及使用optimset函数来定制优化选项。此外,我还学会了如何存储和可视化迭代过程,这对于理解和分析结果非常有帮助。

终止准则的设定:实验中采用的终止准则是当迭代次数达到最大值或目标函数值的改变小于一个很小的阈值时停止。这让我意识到在实际应用中,选择合适的终止准则对于算法的效率和精度至关重要。

对比不同初始点的影响:通过选取与实验二相同的初始点进行比较,我观察到初始条件对算法收敛速度和最终结果的影响。这提醒我在实际问题中需要谨慎选择初始值,以确保算法的稳定性和有效性。

实验报告的撰写:撰写实验报告使我学会了如何系统地整理和呈现实验数据,包括最优解、最优值和迭代次数等关键信息。同时,我也学会了如何分析和解释实验结果,提升了解决问题的逻辑思维能力。

反思与改进:虽然实验成功实现了牛顿法,但看到迭代次数达到了1000次,我意识到可能需要优化算法的收敛性,例如引入线性搜索或者使用拟牛顿法等更高效的变种。这为我未来的学习和研究提供了新的方向。

总的来说,这次实验是一次宝贵的实践学习经验,不仅巩固了理论知识,也提升了我的编程和问题解决能力。

标签:opt,58,迭代,安卓,6.14,实验,MaxIter,options,history
From: https://www.cnblogs.com/lml66/p/18250054

相关文章

  • ABC358
    A.WelcometoAtCoderLand模拟B.TicketCounter模拟代码实现#include<bits/stdc++.h>#definerep(i,n)for(inti=0;i<(n);++i)usingnamespacestd;intmain(){intn,a;cin>>n>>a;vector<int>t(n);......
  • 5.30安卓开发日记47
    ① 、实现的功能为对错题信息的增删改查Ⅰ、主页面 Ⅱ、错题录入 Ⅲ、错题查询(可根据题目搜索) Ⅳ、错题修改 Ⅴ、错题删除(选中行后右键选择删除) Ⅵ、显示详细信息 ......
  • 5.31安卓开发日记48
    Ⅶ、代码main.pyimporttkinterastkfromtkinterimportttk,messageboxfromPILimportImage,ImageTkimportmysql.connectorimportselect#数据库连接函数defcreate_connection():returnmysql.connector.connect(host='localhost',user='......
  • 5.11安卓开发日记32
    今天上数据库原理,实验二是给出数据后对数据进行多方面的查询。4、在数据库test1中进行下列查询操作,将查询语句与结果写入实验报告。(1)查询所有供应商情况,先按城市升序排列,城市相同按供应商名称降序排列。select*fromsorderbycityasc,snamedesc;(2)查询所有零件情况,先按......
  • 5.9安卓开发日记31
    今天继续进行python实验,学习到了python与java在类的定义、继承、多态等方面的异同。Python和Java都是面向对象的编程语言,它们在类的定义、继承、多态等方面有相似之处,但也存在一些显著差异。下面通过具体例子来比较这两种语言在面向对象编程上的异同,并总结Python面向对象编程的一......
  • 5.8安卓开发日记30
    今天学习python实验,本次的实验为python中的实体类,随着实验的进行,让我发现它的实体类和cc++java的实体类大同小异,只需要记住相关写法,着重记一点区别,就能很快适应python实体类的书写。【题目描述】定义一个人员类People,其属性有:姓名、性别、年龄;基于People实现学生类Student,添加......
  • [atcoder 358] 【动态规划】
    dp[i][j]表示前i个和为j的个数。那么就有递推式dp[i][j]+=dp[i][j-x]*c(j,j-x);其中x满足从0到c[i],并且x满足<=j组合数递推公式c(n,k)=c(n,k-1)+c(n,k);importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;impor......
  • ATcoder ABC 358 补题记录(A~D,G)
    A直接模拟即可。#pragmaGCCoptimize(3)#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintN=1000100,mod=998244353;inta[N];signedmain(){strings,t;cin>>s>>t;if(s=="AtCoder"&&t==&qu......
  • 安卓签名文件打包错误 Invalid keystore format
    1.错误java.io.IOException:Invalidkeystoreformat...2.解决方案        方案1:                找到debug.keystore并删除                 路径 User\用户名\android\debug.keystore                 ......
  • Spring (58)什么是Spring Kafka
    SpringKafka是一个基于Spring框架的项目,它提供了对ApacheKafka的集成支持。Kafka是一个分布式流媒体平台,专门用于构建实时数据管道和流应用程序。SpringKafka提供了一种简单的抽象来发送和接收消息,使得与Kafka交云进行通讯变得容易。核心概念SpringKafka主......