工程数学实验四

上机实验四:共轭梯度法程序设计

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)]);

 

posted @   不会JAVA的小袁  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示