Code Matlab

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 4

syms x y c z % khai báo biến

f = input('f(x, y) = '); % nhập hàm


disp('Nhap toa do diem P(x0;y0)'); % nhập tọa độ điểm
disp('x0 = ');
x0 = input('');
disp('y0 = ');
y0 = input('');
disp('z0 = ');
z0 = input('');
g = diff(f, x); % tính đạo hàm riêng theo x
k = diff(f, y); % tính đạo hàm riêng theo y
df_dx = subs(g, [x, y], [x0, y0]); % đạo hàm riêng theo x tại điểm P
df_dy = subs(k, [x, y], [x0, y0]); % đạo hàm riêng theo y tại điểm P
gradient = [df_dx, df_dy]; % vector gradient
disp('Vector gradient tại điểm M:');
disp(gradient);
n=(int(1/g)==int(1/k)+c); %lay tich phan 2 ve cua dao ham rieng
c=solve(subs(subs(n,x,x0),y,y0),c); %tim gia tri c
m=(int(1/g)==int(1/k)+c);
m=solve(m,y);
disp('Duong di co phuong trinh la: y = '); % in ra phương trình
disp(m);

% Vẽ bản đồ đường mức với 20 đường mức quanh điểm P


x_vals = x0 - 5:0.2:x0 + 5; % khoảng x
y_vals = y0 - 5:0.2:y0 + 5; % khoảng y
[X, Y] = meshgrid(x_vals, y_vals); % lưới tọa độ x và y
Z = eval(subs(f, [x, y], {X, Y})); % tính giá trị của hàm f trên lưới
figure;
contour(X, Y, Z, 20); % vẽ 20 đường mức
axis equal; % tỉ lệ x và y bằng nhau
hold on;
plot(x0, y0, 'ro', 'MarkerSize', 2); % vẽ điểm
% Vẽ đường đi vừa tìm được bắt đầu từ điểm P
if df_dx > 0 && df_dy > 0
x_vals = linspace(x0, x0 + 5, 100);
y_vals = subs(m, x, x_vals);
y_vals = y_vals(y_vals >= y0 & y_vals <= y0 + 5);
x_vals = x_vals(1:length(y_vals));
elseif df_dx < 0 && df_dy < 0
x_vals = linspace(max(0, x0 - 5), x0, 100);
y_vals = subs(m, x, x_vals);
y_vals = y_vals(y_vals >= max(0, y0 - 5) & y_vals <= y0);
x_vals = x_vals(1:length(y_vals));
end
plot(x_vals, y_vals, 'b', 'LineWidth', 2); % vẽ đường đi

colorbar;
xlabel('x');
ylabel('y');
legend('Bản đồ đường mức', 'Điểm P', 'Đường đi');
grid on;
% Vẽ mặt cong xung quanh điểm P

figure;
surf(X, Y, Z); % Vẽ mặt cong
hold on;
plot3(x0, y0, z0, 'ro', 'MarkerSize', 6); % Đánh dấu điểm P
xlabel('x');
ylabel('y');
zlabel('f(x, y)');
title('Mặt cong xung quanh điểm P');

% Vẽ đường đi trên mặt cong


if df_dx > 0 && df_dy > 0
x_vals = linspace(x0, x0 + 5, 100);
y_vals = subs(m, x, x_vals);
y_vals = y_vals(y_vals >= y0 & y_vals <= y0 + 5);
x_vals = x_vals(1:length(y_vals));
elseif df_dx < 0 && df_dy < 0
x_vals = linspace(max(0, x0 - 5), x0, 100);
y_vals = subs(m, x, x_vals);
y_vals = y_vals(y_vals >= max(0, y0 - 5) & y_vals <= y0);
x_vals = x_vals(1:length(y_vals));
end
z_vals = eval(subs(f, [x, y], {x_vals, y_vals})); % tính z tương ứng với đường đi
plot3(x_vals, y_vals, z_vals, 'r', 'LineWidth', 2); % vẽ đường đi trên mặt cong
plot3(x0, y0, z0, 'ro', 'MarkerSize', 5); % vẽ điểm P trên mặt cong

xlabel('x');
ylabel('y');
zlabel('z');
title('Mặt cong và đường đi');
legend('Mặt cong', 'Đường đi', 'Điểm P');
grid on;

You might also like