MATLAB用梯度法求解目标函数,机械优化设计作业——梯度法求解

本文介绍了学生李刚如何使用梯度法求解目标函数121222125.05.1)的无约束最优解,从初始点(-2, 4)开始,通过Matlab编程实现的Stair(e).m函数进行迭代,精确到e=0.002。代码展示了梯度计算、搜索方向确定和迭代过程。
摘要由CSDN通过智能技术生成

梯 度 法 求 最 优 解 问 题

姓 名:李刚 学号:2016210309

1、所求问题

用梯度法求目标函数121222125.05.1)(x x x x x x F --+=的无约束最优解,已知初始点

T X ]4,2[)0(-=,02.0=ε或002.0=ε

2、Matlab 编程实现

建立了一个Stair(e).m 的子函数来求解,e 为函数的输入变量,即问题中的ε。只需要在Matlab “命令行窗口”去调用此函数即可,用02.0=ε或002.0=ε去代替Stair(e).m 函数中的输入变量e 即可。

程序源码:

function z =Stair(e)

%输入变量e 来代替求解精度问题,方便求解不同静精度问题

syms x1 x2 a

f=1.5*x1^2+0.5*x2^2-x1*x2-2*x1; %目标函数

dx1=diff(f,x1); %对x1求偏导

dx2=diff(f,x2); %对x2求偏导

g=[dx1,dx2]; %梯度

X=[x1,x2]; %建立坐标变量

X0=[-2,4]; %初始点坐标

g0=subs(g,X,X0); %subs 函数,用X0代替g 函数中的X G=norm(g0); %梯度的模

k=0; %迭代次数变量

F=subs(f,X,X0); %subs 函数,用X0代替f 函数中的X F=double(F); %数据类型转换

fprintf('迭代次数k=%d ;',k);

fprintf('坐标值x1=%5.7f ',X0(1));

fprintf('x2=%5.7f ;',X0(2));

%fprintf('坐标值 X=%d %d\n',X0);

fprintf('函数值F=%5.7f\n\n',F)

for i=1:20 %迭代求解

if (G>e) %判断是否满足精度要求 k=k+1;

d=-g0/G; %确定搜索方向

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值