上机实验四:共轭梯度法程序设计
1、基本要求
掌握共轭梯度法的基本思想及其迭代步骤;学会运用MATLAB编程实现常用优化算法;能够正确处理实验数据和分析实验结果及调试程序。
2、主要内容
(1)求解无约束优化问题:
(2)终止准则取;
(3)完成FR共轭梯度法的MATLAB编程、调试;
(4)选取几个与实验二实验三中相同的初始点,并给出相关实验结果的对比及分析(从最优解、最优值、收敛速度(迭代次数)等方面进行比较);
(5)按照模板撰写实验报告,要求规范整洁。
3、操作要点
(1)通过编程实现FR共轭梯度法;
(2)使用MTALAB调试程序,并将实验结果保存到文件中;
(3)撰写实验报告。
4、主要仪器设备
微机及Matlab软件
FR:
function [x, iter] = FR(func, x0, tol, max_iter)
% func - Ŀ�꺯�����ַ�����ʾ���� 'x1^2 + 10*x2^2'
% x0 - ��ʼ�㣬������
% tol - ����Ҫ���ݶȵ�ģ��
% max_iter - ����������
n = length(x0);
vars = sym('x', [1 n]); % ��̬�������ű�������
% ����Ŀ�꺯��
funf_sym = str2sym(func);
% �����ݶȺ�Hessian����
gradf_sym = gradient(funf_sym, vars);
hessf_sym = hessian(funf_sym, vars);
% �����ű���ʽת��Ϊ�������
funf = matlabFunction(funf_sym, 'Vars', {vars.'});
gradf = matlabFunction(gradf_sym, 'Vars', {vars.'});
hessf = matlabFunction(hessf_sym, 'Vars', {vars.'});
x = x0;
g = gradf(x);
d = -g;
k = 0;
while norm(g) > tol && k < max_iter
% ʹ�� Hessian ���� * d
Hd = hessf(x) * d;
alpha = -(g' * d) / (d' * Hd);
% ���� x
x = x + alpha * d;
% �����µ��ݶ�
g_new = gradf(x);
% Fletcher-Reeves ��ʽ
beta = (g_new' * g_new) / (g' * g);
% ���� d
d = -g_new + beta * d;
% ���¾ɵ��ݶ�
g = g_new;
k = k + 1;
end
iter = k;
end
FR_run:
% ����Ŀ�꺯��
func = '(x1 + 10*x2)^2 + 5*(x3 - x4)^2 + (x2 - 2*x3)^4 + 10*(x1 - x4)^4';
% ��ʼ��
x0 = [2; 2; 2; 2];
% ����
tol = 1e-6;
% ����������
max_iter = 1000;
% �����Ż�����
[x, iter] = FR(func, x0, tol, max_iter);
% ������
disp('Optimal solution x:');
disp(x);
disp(['Number of iterations: ', num2str(iter)]);
标签:FR,工程,vars,max,sym,实验,iter,数学,x0 From: https://www.cnblogs.com/yuanxinglan/p/18245677