首页 > 其他分享 >工程数学上机实验(四)

工程数学上机实验(四)

时间:2023-05-15 10:57:53浏览次数:26  
标签:FR 1.2 上机 梯度 实验 new fun 数学 x0

共轭梯度法程序设计

1、实验目的

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

2、实验内容

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

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

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

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

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

3、操作要点

(1)通过编程实现 FR 共轭梯度法;

(2)使用 MTALAB 调试程序,并将实验结果保存到文件中;

(3)撰写实验报告。

4、主要仪器设备

微机及 Matlab 软件

代码:

FR_CG.m

function [x, fval, k] = FR_CG(fun, x0, max_iter, tol)
% FR 共轭梯度法求解非线性方程组
% fun: 目标函数
% x0: 初始点
% max_iter: 最大迭代次数
% tol: 容许误差
% x: 最优解
% fval: 目标函数的最小值
% k: 迭代次数

% 初始化
k = 0;
x = x0;
g = gradient(fun, x);
d = -g;
fval = feval(fun, x);

while (k < max_iter) && (norm(g) > tol)
    % 确定步长
    alpha = fminbnd(@(alpha) feval(fun, x+alpha*d), 0, 1);
    % 更新解和梯度
    x_new = x + alpha*d;
    g_new = gradient(fun, x_new);
    % 更新 FR 共轭方向
    beta = (g_new'*(g_new - g)) / norm(g)^2;
    d_new = -g_new + beta*d;
    % 更新变量
    x = x_new;
    g = g_new;
    d = d_new;
    fval = feval(fun, x);
    k = k + 1;
end
end

function g = gradient(fun, x)
% 计算梯度
h = 1e-8;
n = length(x);
g = zeros(n, 1);
for i = 1:n
    x1 = x;
    x1(i) = x1(i) + h;
    g(i) = (feval(fun, x1) - feval(fun, x)) / h;
end
end

main.m

% 定义目标函数
f = @(x) 100*(x(2)-x(1)^2)^2 + (1-x(1))^2;

% 设置不同的初始点并调用 FR 共轭梯度法求解
x0_list = [1.2, 1.2; -1.2, 1.2; -1.2, -1.2; 1.2, -1.2; 0, 0];
max_iter = 1000; % 设置最大迭代次数
tol = 1e-5; % 设置容许误差

for i = 1:size(x0_list, 1)
    x0 = x0_list(i,:)'; % 设置当前初始点
    [x, fval, k] = FR_CG(f, x0, max_iter, tol); % 调用 FR_CG 函数求解

    % 输出结果
    fprintf('初始点 (%.1f, %.1f):\n', x0(1), x0(2));
    fprintf('最优解为:(%.2f, %.2f)\n', x(1), x(2));
    fprintf('迭代次数为:%d\n\n', k);
end

运行结果:

标签:FR,1.2,上机,梯度,实验,new,fun,数学,x0
From: https://www.cnblogs.com/ysk0904/p/17401198.html

相关文章

  • 软件构造实验一
    任务一:幻方幻方是一个行和、列和、对角线和均相等的方阵。要求一是编写一个程序读入文本文件,判断是否为幻方。publicstaticbooleanisLegalMagicSquare(StringfileName)throwsFileNotFoundException{FileReaderf=newFileReader(fileName);Scannerin=newSca......
  • MSTP-VRRP-DHCP-OSPF-BFD实验(二)
    所有交换机需启用MSTP服务[JR_SW7]stpregion-configuration[JR_SW7-mst-region]region-nameaa[JR_SW7-mst-region]revision-level1[JR_SW7-mst-region]instance1vlan23200[JR_SW7-mst-region]instance2vlan456[JR_SW7-mst-region]activeregion-configuration......
  • 电机控制器,BLDC无刷直流电机Simulink模型(数学方法搭建) 版本:m
    电机控制器,BLDC无刷直流电机Simulink模型(数学方法搭建)版本:marlab2018a,可生成低版本包括:模型,设计文档,电机参数m文件仿真时在第三秒加入3Nm的负载,图中为模型和仿真结果(输出扭矩,转速,转子位置,机械角度)模型优点:纯数学方法搭建,可生成代码刷进控制器做SIL测试(simscape搭建的模型无法生......
  • 首先阐述了光伏电池的工作原理及其数学模型,根据数学模型在 MATLAB仿真软件中搭建了光
    首先阐述了光伏电池的工作原理及其数学模型,根据数学模型在MATLAB仿真软件中搭建了光伏电池的工程通用仿真模型。同时,根据生产厂家提供的参数,分析了光伏电池的输出特性曲线,研究了光照强度和环境温度对光伏电池的影响。其次介绍了?mppt?控制算法的工作原理,比较了4种常用控制算法......
  • IIR卡尔曼滤波器:使用IIR滤波器(使用二阶形式的陷波滤波器)和非时不变卡尔曼滤波器进行实
    IIR卡尔曼滤波器:使用IIR滤波器(使用二阶形式的陷波滤波器)和非时不变卡尔曼滤波器进行实验ID:92200672832644749......
  • pta python实验3-6
    python实验4循环结构 1importmath23defestimate_pi(n):4total=05ret=06foriinrange(n+1):7ifi%2==0:8sign=19else:10sign=-111term=sign/((2*i+1)*mat......
  • 基于EKF滤波的二阶RC电池模型的Soc估计仿真,附带实验数据(MATLAB仿真)
    基于EKF滤波的二阶RC电池模型的Soc估计仿真,附带实验数据(MATLAB仿真)ID:92200669861200737......
  • 20.马克思手稿中的数学题
       #include<stdio.h>intmain(){intx,y,z,number=0;printf("MenWomenChildren\n");for(x=0;x<=10;x++){y=20-2*x;z=30-x-y;if(3*x+2*y+z==50)printf("%2d:%4d%5d%6d\n",++number,x,y,z);}return0;}......
  • 2.10 马克思手稿中的数学题
    马克思手稿中有一道趣味数学问题:有30个人,其中有男人、女人和小孩,他们在同一家饭馆吃饭,总共花了50先令。已知每个男人吃饭需要花3先令,每个女人吃饭需要花2先令,每个小孩吃饭需要花1先令,请编程求出男人、女人和小孩各有几人。解答#include<stdio.h>intmain(){intx,y,z,n......
  • 记录路由和源站路由实验(GNS3 + wireshark)
    实验目标1.认识IP记录路由的过程。2.抓包分析严格源站路由3.抓包分析宽松源站路由实验任务1.配置三台路由器,给每个路由器端口配置IP,在路由器R3上配置一个环回口3.3.3.3,使用扩展ping让R1ping3.3.3.3,抓包分析IP记录路由过程。2.配置5台路由器,让其中有环路,配置好OSPF路由协议。......