1、
实 验 报 告
实验名称: 梯度法
院 (系): 机电学院
专业班级: 机械制造及其自动化
姓 名:
学 号:
2013年5 月13 日
实验一: 梯度法 实验日期:2013年 5 月 13 日
一、 实验目的
了解MATLAB的基本运用
了解MATLB在优化中的使用
二、 实验原理
优化设计的目标是使函数值f(x)最小,函数在某点的
2、梯度方向是函数在该点增长最快的方向,反之,其负梯度方向及为函数在该点附近趋于下降最快的方向。因此,可以利用函数在该点的负梯度方向作为迭代搜索方向寻找下一点,并按此规律不断进行搜索,寻找函数的最小值。
三、 实验内容
梯度法程序:
x0=[3;3];
xk=x0;
ie=10^(-7);
ae=1;
k=0;
MLN=2;
%迭代求解
while(kie)
syms x1
syms x2
xk1=xk;
%求函数梯度
fun=fun(x1,x2);
fx1=diff(f
3、un,'x1');
fx2=diff(fun,'x2');
%计算函数值及梯度值
fun=inline(fun);
fx1=inline(fx1);
fx2=inline(fx2);
funval=feval(fun,xk1(1),xk1(2));
gradx1=feval(fx1,xk1(1));
gradx2=feval(fx2,xk1(2));
grad=zeros(2,1);
grad(1)=gradx1;
grad(2)=gradx2;
%最速下降发迭代,求下一步
4、
syms a;
syms x1;
syms x2;
x=xk1-a*grad;
x1=x(1);
x2=x(2);
%确定一位搜索最佳步长
fun1=fun(x1,x2);
fxa=diff(fun1,'a');
a=solve(fxa);
x=inline(x);
x=feval(x,a);
ae=eval((sqrt((xk1-x)'*(xk1-x)))) ; %计算实际误差
%更新迭代点,继续下次迭代
xk(1)=eval(x(1));
xk(2)=eval(x(2));
k=k+1;
end
x=xk
函数程序:
function f=fun(x1,x2)
f=2*x1^2+3*x2^2
执行结果:
x =
0.1029
0.1029
四、 实验小结
通过本实验了解了了matlab的基本操作方法,了解梯度法的原理与基本运用