Лабораторная работа №8
Лабораторная работа №8
Упражнение 1
Постройте линии уровня функции и найдите экстремумы функции.
function f = u_1(v)
x = v(1); y = v(2);
f = x*y + 50/x + 20/y;
end
[X, Y] = meshgrid((4 : 0.01 : 6), (1 : 0.01 : 3));
Z = X.*Y + 50./X + 20./Y;
[CMatr, h] = contour(X, Y, Z);
colormap(gray);
syms x y;
z = x * y + 50 / x + 20 / y;
[M, f] = fminsearch('u_1', [5, 2])
M = 5 2
f = 30
Упражнение 2
Создайте М-функцию, вычисляющую значения первых и вторых частных производных функции в точке и значения главных миноров матрицы, составленной из вторых производных.
function [D, E] = u_2(f, x0, y0)
syms x y;
dfdx = subs(diff(f, x), [x, y], [x0, y0]);
dfdy = subs(diff(f, y), [x, y], [x0, y0]);
d2fdx2 = subs(diff(f, x, 2), [x, y], [x0, y0]);
d2fdy2 = subs(diff(f, y, 2), [x, y], [x0, y0]);
d2fdxdy = subs(diff(diff(f, x), y), [x, y], [x0, y0]);
D = [dfdx, dfdy, d2fdx2, d2fdxdy, d2fdy2];
M = [d2fdx2, d2fdxdy; d2fdxdy, d2fdy2];
E(1) = M(1);
E(2) = det(M);
end
Упражнение 3
а) Найти экстремумы функции .
б) С помощью созданной в упр. 2 М-функции проверьте выполнение необходимого и достаточного условия экстремума.
function extremums(f)
syms x y;
disp(['f(x,y) = ', char(f)]);
disp('Первые производные:');
dfdx = diff(f,x);
disp(['df/dx = ', char(dfdx)]);
dfdy = diff(f,y);
disp(['df/dy = ', char(dfdy)]);
disp('Вторые производные:');
d2fdx2 = diff(f,x,2);
disp(['d2f/dx^2 = ', char(d2fdx2)]);
d2fdy2 = diff(f,y,2);
disp(['d2f/dy^2 = ', char(d2fdy2)]);
d2fdxdy = diff(dfdx,y);
disp(['d2f/dxdy = ', char(d2fdxdy)]);
disp('Метод отбора точек: D>0 - экстремум есть, D<0 - нет')
disp('D=A*C-B^2, где A=d2f/dx^2, B=d2f/dxdy, C=d2f/dy^2');
disp('Возможные точки экстремума:')
[X,Y] = solve(dfdx, dfdy);
for i = 1:length(X)
x0=X(i); y0=Y(i);
disp(['Точка №',num2str(i),'(',char(x0),';',char(y0),')']);
D=subs(d2fdx2*d2fdy2-d2fdxdy^2, [x,y],[x0,y0]);
disp(['D=',char(vpa(D))]);
if (double(D)>0)
disp('D>0 => Экстремум есть');
if (double(subs(d2fdx2, [x,y], [x0,y0]))>0)
disp('A>0 => Минимум');
else
disp('A<0 => Максимум');
end;
else
disp('D<0 => Экстремума нет');
end
end
end
>> syms x y;
>> z = x^2 + y^2 - 2 * log(x) - 18 * log(y);
>> extremums(z)
Точка №1 (1, 3)
Минимум
f(x) = 10-18*log(3)
Точка №2 (1, -3)
Минимум
f(x) = 10-18*log(3)-18* i*pi
Точка №3 (-1, 3)
Минимум
f(x) = 10-2* i*pi-18*log(3)
Точка №4 (-1, -3)
f(x) = 10-20* i*pi-18*log(3)
>> [D, E] = u_2(z, 1, 3)
D = [0, 0, 4, 0, 4]
E = [4, 16]
>> [D, E] = u_2(z, 1, -3)
D = [0, 0, 4, 0, 4]
E = [4, 16]
>> [D, E] = u_2(z, -1, 3)
D = 0, 0, 4, 0, 4]
E = [4, 16]
>> [D, E] = u_2(z, -1, -3)
D = [0, 0, 4, 0, 4]
E = [4, 16]
Упражнение 4
Создайте М-функцию, которая находит стационарные точки функции трёх переменных и проверяет выполнение достаточного условия экстремума по критерию Сильвестра.
function u_4(f)
syms x y z;
s = solve(diff(f, x), diff(f, y), diff(f, z), 'x, y, z');
for i = 1 : 4
x0 = s.x(i); y0 = s.y(i); z0 = s.z(i);
disp(['Точка №', int2str(i), '(',char(vpa(x0,5)),';',
char(vpa(y0,5)),';',char(vpa(z0,5)),')']);
A1 = subs(diff(f, x, 2), [x,y,z], [x0,y0,z0]);
d2fdx2 = diff(f, x, 2);
d2fdy2 = diff(f, y, 2);
d2fdz2 = diff(f, z, 2);
d2fdxdy = diff(diff(f, x), y);
d2fdydx = diff(diff(f, y), x);
d2fdxdz = diff(diff(f, x), z);
d2fdydz = diff(diff(f, y), z);
d2fdzdx = diff(diff(f, z), x);
d2fdzdy = diff(diff(f, z), y);
A2 = subs(d2fdx2*d2fdy2 - d2fdxdy * d2fdydx, ...
[x,y,z], [x0,y0,z0]);
A = [d2fdx2, d2fdxdy, d2fdxdz; ...
d2fdydx, d2fdy2, d2fdydz; ...
d2fdzdx, d2fdzdy, d2fdz2];
A3 = subs(det(A), [x,y,z], [x0,y0,z0]);
if ((double(A1)>0)&&(double(A2)>0)&&(double(A3)>0))
disp('Минимум');
elseif ((double(A1)<0)&&(double(A2)>0)&&(double(A3)<0))
disp('Максимум');
else
disp('Не определено');
end
end
end
Упражнение 5
Используя М-функцию из упр. 5, найдите точки экстремума функции
>> syms x y z;
>> u = x + y/x + z/y + 2/z;
>> u_4(u)
Точка №1(1.1892;1.4142;1.6818)
Минимум
Точка №2(-1.1892;1.4142;-1.6818)
Максимум
Точка №3(-1.1892*i;-1.4142;1.6818*i)
Не определено
Точка №4(1.1892*i;-1.4142;-1.6818*i)
Не определено
-