数学建模社区-数学中国

标题: 求高手帮我看看最速下降法的程序 [打印本页]

作者: tiansifei1    时间: 2012-2-11 18:57
标题: 求高手帮我看看最速下降法的程序
题目要求用最速下降法求解函数f(x,y)=exp(x^2+y^2-x*y)*cos(x+y)的最小值,我用matlab编程如下:
syms x y;
f=exp(x^2+y^2-x*y)*cos(x+y);
dfx=diff(f,x);dfy=diff(f,y);
df=[dfx;dfy];
[x,y]=input('请输入初始值[x,y]:');
X=[x,y]';
df=subs(df,[x,y],[X(1),X(2)]);
k=1;
lamda=1;
epsilon=0.001;
while sqrt(sum(df.^2))>=epsilon
    lamda=fminsearch('fungetlamda',lamda);
    X=X+lamda*df;
    df=subs(df,[X(1),X(2)],[X(1),X(2)]);
    k=k+1;
end
disp('[x,y]=');disp([X(1),X(2)]);
disp('k=');disp(k);
disp('fobj=');disp(exp(X(1)^2+X(2)^2-X(1)*X(2))*cos(X(1)+X(2)));
其中函数fungetlamda为:
function r=fungetlamda(lamda)
r=exp((X(1)-lamda*df(1))^2+(X(2)-lamda*df(2))^2-(X(1)-lamda*df(1))*(X(2)-lamda*df(2)))*cos((X(1)-lamda*df(1))+(X(2)-lamda*df(2)));
运行主程序后,命令窗口中出现“请输入初始值[x,y]:”的字样,可当我随意输入一个初始值(比如[0,0])之后,就会报错:??? Too many output arguments.
请问应该怎样修正?谢谢!
作者: tiansifei1    时间: 2012-2-12 16:57
额,好像把[x,y]=input('请输入初始值[x,y]:');
X=[x,y]';
改成:
X=input('请输入初始值[x,y]:');
X=X';
就不会报这个错了。
作者: tiansifei1    时间: 2012-2-12 17:09
不过输入初始值后还是会报错:
??? Undefined command/function 'X'.

Error in ==> fungetlamda at 2
r=exp((X(1)-lamda*df(1))^2+(X(2)-lamda*df(2))^2-(X(1)-lamda*df(1))*(X(2)-lamda*df(2)))*cos((X(1)-lamda*df(1))+(X(2)-lamda*df(2)));
Error in ==> fminsearch at 175
fv(:,1) = funfcn(x,varargin{:});

Error in ==> steepest_descend_method at 12
    lamda=fminsearch('fungetlamda',lamda);
错在哪儿呢?求帮助!




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5