function [lam, newxk, fk, newfk] = Opt_Goldstein(xk, dk)
a = 0; % 搜索下界
b = 10; % 搜索上界
lam = 1; % 初始点
c1 = 0.25;
c2 = 0.75;
t = 2;
% 循环求解最佳的步长
while a < b
% 搜索步长满足 Goldstein 第一个准则
if fun(xk + lam*dk) <= fun(xk) + c1*lam*gfun(xk)'*dk
% 搜索步长满足 Goldstein 第二个准则
if fun(xk + lam*dk) >= fun(xk) + c2*lam*gfun(xk)'*dk
% 输出最佳的步长
newxk = xk + lam*dk;
fk = fun(xk);
newfk = fun(newxk);
break;
% 搜索步长不满足 Goldstein 准则,继续迭代
else
a = lam;
lam = 0.5*(a + b);
if b < inf
lam = 0.5*(a + b);
else
lam = t*lam;
end
end
else
b = lam;
lam = 0.5*(a + b);
end
if abs(a - b) < 1e-3
break;
end
end
%Rosenbrock函数
%函数 f(x)=100*(x(2)-x(1).^2).^2+(1-x(1)).^2
%梯度 g(x)=(-400*(x(2)-x(1)^2)*x(1)-2*(1-x(1)),200*(x(2)-x(1)^2))^(T)
function f=fun(x)
f = 100*(x(1)^2 - x(2))^2 + (x(1)-1)^2;
function gf=gfun(x)
gf = [400*x(1)*(x(1)^2 - x(2)) + 2*(x(1) - 1);
-200*(x(1)^2 - x(2))];
显示输入参数的数目不足,这是为什么啊?
A = [1, -2, 3; -2, 3, 1; 3, 1, -2]
B = [-1, 5, 0; -2, -4, 6]
A =
1 -2 3
-2 3 1
3 1 -2
B =
-1 5 0
-2 -4 6
这个问题可能是因为你在调用 Opt_Goldstein 函数时没有输入正确的参数数量。根据函数定义,该函数需要两个输入参数,即 xk 和 dk。请确保你在调用该函数时提供了这两个参数。例如:
xk = [1; 2];
dk = [0.5; -0.5];
[lam, newxk, fk, newfk] = Opt_Goldstein(xk, dk);
如果你已经提供了正确数量的参数并仍然遇到此错误,请检查函数定义中是否存在拼写错误或语法错误。