Тема: Численное вычисление градиента функции и матрицы Гэсса в конкретной точке x(k) Необходимо в среде Matlab: 1. Написать подпрограмму численного вычисления градиента функции f(x1,X2) протестировать 2. Написать подпрограмму численного вычисления матрицы Гэсса в заданной точке x(k) f(x1,x2) и протестировать ее.
Ответы
Ответ:
Для численного вычисления градиента функции f(x1,x2) в точке x(k) можно использовать метод конечных разностей. Этот метод основан на приближенном вычислении производных функции в заданной точке путем разделения изменения функции на малые приращения аргументов.
Пусть требуется вычислить градиент функции f(x1,x2) в точке (x1(k),x2(k)). Для этого можно использовать следующую формулу:
grad_f(k) = [f(x1(k)+h,x2(k)) - f(x1(k),x2(k))] / h * [1 0] + [f(x1(k),x2(k)+h) - f(x1(k),x2(k))] / h * [0 1]
где h - малое приращение аргументов, [1 0] и [0 1] - векторы, соответствующие изменению только первого или второго аргумента соответственно.
Для численного вычисления матрицы Гессе в заданной точке x(k) можно использовать следующую формулу:
H_f(k) = [f(x1(k)+h,x2(k)) - 2f(x1(k),x2(k)) + f(x1(k)-h,x2(k))] / h^2 * [1 0; 0 0] + [f(x1(k),x2(k)+h) - 2f(x1(k),x2(k)) + f(x1(k),x2(k)-h)] / h^2 * [0 0; 0 1] + [f(x1(k)+h,x2(k)+h) - f(x1(k)+h,x2(k)-h) - f(x1(k)-h,x2(k)+h) + f(x1(k)-h,x2(k)-h)] / (4*h^2) * [1 1; 1 1]
где [1 0; 0 0], [0 0; 0 1] и [1 1; 1 1] - матрицы, соответствующие изменению только первого, только второго и обоих аргументов соответственно.
Примеры реализации подпрограмм на языке MATLAB:
1. Подпрограмма численного вычисления градиента функции f(x1,x2) в точке x(k)
function grad_f = num_grad_f(f,x1k,x2k,h)
grad_f = zeros(1,2);
grad_f(1) = (f(x1k+h,x2k) - f(x1k,x2k)) / h;
grad_f(2) = (f(x1k,x2k+h) - f(x1k,x2k)) / h;
end
2. Написать подпрограмму численного вычисления матрицы Гессе в заданной точке x(k) для функции f(x1,x2) и протестировать ее.
Для вычисления матрицы Гессе необходимо вычислить все вторые производные функции f(x1,x2) по каждой из переменных x1 и x2. Для этого можно воспользоваться формулами численного дифференцирования, аналогичными тем, что использовались для вычисления градиента.
Таким образом, для точки x(k) матрица Гессе вычисляется следующим образом:
Вычисляем значение функции f(x(k)) в заданной точке.
Вычисляем частные производные первого порядка функции f(x(k)) по переменным x1 и x2, используя формулы численного дифференцирования.
Вычисляем частные производные второго порядка функции f(x(k)) по переменным x1 и x2, используя аналогичные формулы численного дифференцирования.
Составляем матрицу Гессе, используя найденные значения производных.
Пример кода для вычисления матрицы Гессе в точке (1, 2) для функции f(x1,x2) = x1^2 + 2x1x2 + 3x2^2:
% Определение функции f(x1,x2)
f = @(x1,x2) x1^2 + 2*x1*x2 + 3*x2^2;
% Определение точки x(k)
xk = [1; 2];
% Вычисление матрицы Гессе в точке x(k)
h11 = (f(xk(1)+h,xk(2))-f(xk(1),xk(2)))/h;
h12 = (f(xk(1),xk(2)+h)-f(xk(1),xk(2)))/h;
h21 = h12;
h22 = (f(xk(1),xk(2)+h)-f(xk(1),xk(2)))/h;
H = [h11 h12; h21 h22];
После выполнения данного кода в переменной H будет содержаться матрица Гессе для заданной функции в заданной точке.