本人自编了一个用牛顿法求解函数最小值的程序:
global f
global dfx
global dfy
f='exp(x^2+y^2-x*y)*cos(x+y)';
X=input('请输入初始值[x,y]:');
r=grad(X);
s=hesse(X);
k=1;
epsilon=0.01;
while sqrt(sum(r.^2))>=epsilon
d=-inv(s)*r;
X=X+d;
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)));
其中函数grad为:
function r=grad(X)
global f
global dfx
global dfy
dfx=diff(f,X(1));dfy=diff(f,X(2));
r=[dfx;dfy];
函数hesse为:
function s=hesse(X)
global f
global dfx
global dfy
dfxx=diff(dfx,X(1));dfxy=