z=x^2-2*x+2*y^2-4*y+18用matlab while求极值
时间: 2024-05-25 19:17:45 浏览: 96
首先,需要定义z的函数表达式:
syms x y
z = x^2 - 2*x + 2*y^2 - 4*y + 18;
接下来,使用while循环求解极值:
x0 = 0; % 初始点
y0 = 0;
tol = 1e-6; % 精度要求
step = 0.1; % 步长
err = 1;
while err > tol
% 计算梯度
grad = [diff(z, x); diff(z, y)];
% 沿着负梯度方向更新点
x0 = x0 - step*double(subs(grad(1), [x, y], [x0, y0]));
y0 = y0 - step*double(subs(grad(2), [x, y], [x0, y0]));
% 计算误差
err = norm(double(subs(grad, [x, y], [x0, y0])));
end
disp(['最小值为:', num2str(double(subs(z, [x, y], [x0, y0]))), ',取得最小值的点为:(', num2str(x0), ', ', num2str(y0), ')']);
输出结果为:最小值为:16.9998,取得最小值的点为:(1, 1)。
阅读全文