changyl01 发表于 2006-11-6 16:28

求一个最优化算法的问题

小弟初学matlab
想验证一下袁亚湘提出的最速下降法的新步长
所以要写一个函数: y=(X-X*)A(X-X*)'
要求这个X是1*10000的
A是10000*10000的
因为要用最速下降法
所以要求上面函数的梯度函数(在作步长的时候用)
我不知道怎么写梯度函数
跪求各位大侠帮忙!

[ 本帖最后由 eight 于 2007-1-24 18:48 编辑 ]

happy 发表于 2006-11-6 16:56

最速下下降法程序,其中梯度函数你可以用diff获得

function y=F(x)
y=(x(1)-15)^2+(x(2)-45)^4;

function y=D_F(x)
%D_F Summary of this function goes here
%Detailed explanation goes here
y=;
y1=2*(x(1)-15),y2=4*((x(2)-45)^3);
y=;


format long
x=;
x=input('请输入初始值=',);
s=input('请输入初始精度s=',0.1);
g=D_F(x);
g=g.';%转置为列向量;
while(norm(g)>s)
    s_k=-g,   r=min_F(x,s_k),   x=x+r.*s_k.';
    g=D_F(x);
    g=g.';
fprintf('The result is %8.5f\n', x);
    fprintf('The daosu is %8.5f\n', g);   
end
axis normal;
hold on;
view();
for i=-100:100
   for j=-100:100
z=,z=F(z);
plot3(i,j,z);
end
end
hold off;

changyl01 发表于 2006-11-6 19:11

太感谢了
页: [1]
查看完整版本: 求一个最优化算法的问题