求高手帮我看看最速下降法的程序
题目要求用最速下降法求解函数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=;
=input('请输入初始值:');
X=';
df=subs(df,,);
k=1;
lamda=1;
epsilon=0.001;
while sqrt(sum(df.^2))>=epsilon
lamda=fminsearch('fungetlamda',lamda);
X=X+lamda*df;
df=subs(df,,);
k=k+1;
end
disp('=');disp();
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)));
运行主程序后,命令窗口中出现“请输入初始值:”的字样,可当我随意输入一个初始值(比如)之后,就会报错:??? Too many output arguments.
请问应该怎样修正?谢谢! 额,好像把=input('请输入初始值:');
X=';
改成:
X=input('请输入初始值:');
X=X';
就不会报这个错了。 不过输入初始值后还是会报错:
??? 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);
错在哪儿呢?求帮助!
页:
[1]