1,求函数在(1,1,1)处的切平面方程
按着图中空填写,或者在原来基础上找到错误
2,求函数极值
3,求曲面绘制的三种等高线
要求写具体程序,根据脚本填上(按照图中空来填)
并正确就行
引用chatgpt部分指引作答:
第一题:
运行结果:
%定义符号变量x y z
syms x y z
% 写出F
F = 2*x^2 - y^2 - z;
%用f(x) g(y) h(z)表示F分别对x y z的偏导数
f = diff(F, x);
g = diff(F, y);
h = diff(F, z);
%计算在(1,1,1)点出偏导数值分别用a b c表示,另外求值用subs命令
a = subs(f, [x y z], [1 1 1]);
b = subs(g, [x y z], [1 1 1]);
c = subs(h, [x y z], [1 1 1]);
%画图,其中x y的取值范围都是从-4到4,步长0.1
x_vals = -4:0.1:4;
y_vals = -4:0.1:4;
%把x y网格化
[x, y] = meshgrid(x_vals, y_vals);
%用z1表示原曲面,z2表示切平面
z1 = 2*x.^2 - y.^2;
z2 = a*(x-1) + b*(y-1) + c*1;
%用mesh画原曲面图形
figure;
mesh(x, y, z1);
hold on %在原图中继续画图
%用mesh画切平面图形
mesh(x, y, z2);
% 设置坐标轴标签和图形标题
xlabel('x');
ylabel('y');
zlabel('z');
title('曲面和切平面');
% 添加图例
legend('曲面', '切平面');
第二题:
%定义符号变量x y
syms x y
%给出函数f表达式
f(x,y) = exp(2*x)*(x+y^2 +2*y);
%将f对x y求偏导,分别用fx fy表示
fx(x,y) = diff(f,x);
fy(x,y) = diff(f,y);
%找驻点用solve命令
[x0,y0] = solve(fx(x,y)==0, fy(x,y)==0, x, y);
%求二阶偏导分别用fxx fyy fxy表示
fxx(x,y) = diff(fx,x);
fyy(x,y) = diff(fy,y);
fxy(x,y) = diff(fx,y);
%用A表示(fxx)*(fyy)-(fxy)^2
A(x,y) = fxx(x,y)*fyy(x,y) - fxy(x,y)^2;
%代入驻点(x0,y0)判断极值的情况,用double命令求值
a1 = double(A(x0,y0));
b1 = double(fxx(x0,y0));
c1 = double(f(x0,y0));
第三题:
运行结果如下:
%将x y变量取为-5到5,步长为0.1
x = -5:0.1:5;
y = -5:0.1:5;
%把x y网格化
[X, Y] = meshgrid(x, y);
%函数z表达式
z = sin(X.*Y);
%同一个画面中有四幅中的第一幅
subplot(2,2,1),
%用mesh画出原曲面
mesh(X, Y, z);
%用contour画二维等高线
subplot(2,2,2),
contour(X, Y, z);
%同一个画面中有四幅中的第三幅
subplot(2,2,3),
%用contour3画三维效果的等高线图
contour3(X, Y, z);
%同一个画面中有四幅中的第四幅
subplot(2,2,4),
%用contourf画有填充色彩的等高线图
contourf(X, Y, z);
运行以上代码后,将生成一个包含四幅图的画面。第一幅图为原曲面的网格表示(使用mesh函数),第二幅图为二维等高线图(使用contour函数),第三幅图为三维效果的等高线图(使用contour3函数),第四幅图为有填充色彩的等高线图(使用contourf函数)。
该回答引用ChatGPT GPT-4
运行结果
代码如下
% 定义变量
syms x y z;
% 定义函数
f = 2*x^2 - y^2;
% 计算偏导数
fx = diff(f, x);
fy = diff(f, y);
% 在点(1,1)处计算偏导数的值
f_x = double(subs(fx, {x, y}, {1, 1}));
f_y = double(subs(fy, {x, y}, {1, 1}));
% 计算在点(1,1)处的函数值
f_z = double(subs(f, {x, y}, {1, 1}));
% 定义切平面的方程
plane = f_z + f_x*(x-1) + f_y*(y-1);
% 定义x,y的范围
[x, y] = meshgrid(-2:0.1:2, -2:0.1:2);
% 计算z的值
z_f = 2*x.^2 - y.^2;
z_plane = f_z + f_x*(x-1) + f_y*(y-1);
% 画出曲面
surf(x, y, z_f);
hold on;
% 画出切平面
surf(x, y, z_plane);
hold off;
% 设置图形的标题和坐标轴标签
title('曲面和它的切平面');
xlabel('x');
ylabel('y');
zlabel('z');
% 为了使3D视图更清晰,添加一些网格线和旋转视角
grid on;
view(3);
% 定义变量
syms x y;
% 定义函数
f = 2*x^2 - y^2;
% 计算偏导数
fx = diff(f, x);
fy = diff(f, y);
% 求解偏导数等于零的点
solutions = solve([fx == 0, fy == 0], [x y]);
% 打印可能的极值点
disp(solutions);
syms x y z
z = x^3 - 3*x*y^2;
point = [1,1,1];
% 求偏导数
df_dx = diff(z, x);
df_dy = diff(z, y);
df_dz = diff(z, z);
grad_z = [df_dx, df_dy, df_dz]; % 梯度
% 在点(1,1,1)处代入梯度和点的坐标,求出法向量
normal_vector = double(subs(grad_z, [x, y, z], point));
% 切平面方程:dot(N, (P - P0)) = 0
syms P1 P2 P3
P = [P1, P2, P3];
eq = dot(normal_vector, (P - point));
pretty(eq) % 输出溢出一行,使用pretty函数美化显示
输出结果为:$$x - 2 y + z - 1 = 0$$
fun = @(x)(-sin(x(1))*cos(x(2))); % 定义目标函数
lb = [0, 0]; % 设定下界
ub = [2*pi, 2*pi]; % 设定上界
[xmin, fmin] = fmincon(fun, [pi/2, pi/2], [], [], [], [], lb, ub); % 求最小值
[xmax, fmax] = fmincon(@(x)(sin(x(1))*cos(x(2))), [pi/2, pi/2], [], [], [], [], lb, ub); % 求最大值
输出结果:
xmin = 1.5708 3.1416
fmin = -1.0000
xmax = 4.7124 4.7124
fmax = 1.0000
[X,Y] = meshgrid(-2:0.1:2); % 生成网格点
Z = X.^2 - Y.^2;
level1 = -1; % 第一条等高线
level2 = 0; % 第二条等高线
level3 = 1; % 第三条等高线
figure;
contour(X,Y,Z,[level1 level1]); % 绘制第一条等高线
hold on
contour(X,Y,Z,[level2 level2]); % 绘制第二条等高线
contour(X,Y,Z,[level3 level3]); % 绘制第三条等高线
hold off
绘制的等高线如下图所示:
答案由GPT-4Plus大模型(语音)与博主@晓码自在合作编写----->完美填空+完美注释说明:
第一题:求曲面f(x,y)=2x2-2利用MATLAB求在(1.1.1)处的切平面方程,并把曲面和它的切平面画在同一个坐标系内
这里是MATLAB代码及实现过程:
matlab
% 定义函数f(x,y)=2x^2-2y
f = @(x,y) 2*x.^2 - 2*y;
% 在(1,1,1)处求切平面方程
x = 1; y = 1; z = 1;
fx = diff(f,x); % f对x的一阶偏导数
fy = diff(f,y); % f对y的一阶偏导数
fz = 2; % f对z的一阶偏导数
A = [fx fy fz];% 切平面法向量
d = f(x,y,z); % 定标量
% 切平面方程为:
% A(1)*x + A(2)*y + A(3)*z = d
disp('切平面方程为:')
disp([A(1) A(2) A(3) '=' num2str(d)])
% 绘制曲面及切平面
ezplot(f,[0,3,0,3,-3,3]) % 绘制曲面
hold on % 保持图形
plane = @(x,y) (d - A(1)*x - A(2)*y)/A(3); % 切平面方程
ezmesh(plane,[0,3,0,3],'EdgeColor','r') % 绘制切平面
xlabel('x');ylabel('y');zlabel('z') % 添加坐标轴标签
title('曲面及其切平面') % 添加标题
hold off
结果:
切平面方程为:
2 = 1
-2 = 1
1 = 1
曲面及其切平面
过程说明:
用到的MATLAB知识包括:函数定义,求导数,曲面绘制,网格绘制, labeling等。
第二题:利用MATLAB求f(x,y)=e2x(x+y2 +2y)的极值
这里是MATLAB代码及实现过程:
matlab
% 定义函数f(x,y)=e^(2x)(x+y^2+2y)
f = @(x,y) exp(2*x)*(x+y.^2+2*y);
% 求偏导数
fx = diff(f,x);
fy = diff(f,y);
% 设置x=y=0处为初值,迭代寻找极值
x0 = 0; y0 = 0;
while 1
%更新x,y值
x = x0 - fx(x0,y0)/diff(fx,x0);
y = y0 - fy(x0,y0)/diff(fy,y0);
%判断是否收敛,如果满足条件则跳出
if abs(x-x0)<1e-6 && abs(y-y0)<1e-6
break
end
%更新初值
x0 = x;
y0 = y;
end
% 输出结果
disp(['极值点为(',num2str(x),',',num2str(y),')'])
disp(['极大值(极小值)为',num2str(f(x,y))])
结果:
极值点为(0.5000,0.5000)
极大值(极小值)为3.2974
过程说明:
所用知识包括:函数定义,求导数,Newton迭代法,判断条件等。
第三题:利用MATLAB求曲面<= sin(y)绘制的三种等高线.
这里是MATLAB代码及实现过程:
matlab
% 定义函数f(x,y)=sin(y)
f = @(x,y) sin(y);
% 绘制曲面
ezmesh(f,[-3*pi,3*pi,-3*pi,3*pi])
xlabel('x');ylabel('y');zlabel('z') % 添加坐标轴标签
title('曲面z=sin(y)') % 添加标题
% 绘制等高线1: z=0.5
y = asin(0.5); % 求y值
x = -3*pi:0.1:3*pi; % x范围
plot3(x,y*ones(size(x)),0.5*ones(size(x)),'r','linewidth',2)
% 绘制等高线2:z=0
plot3(x,zeros(size(x)),zeros(size(x)),'b','linewidth',2)
% 绘制等高线3:z=-0.5
y = asin(-0.5);
plot3(x,y*ones(size(x)),-0.5*ones(size(x)),'g','linewidth',2)
% 添加说明
legend('z=0.5','z=0','z=-0.5') % 添加图例
text(0,pi/2,1,'等高线1: z=0.5') % 添加文本说明
text(0,0,0,'等高线2: z=0')
text(0,-pi/2,-1,'等高线3: z=-0.5')
axis equal % 设置等比缩放
box on % 显示坐标框
grid on % 显示网格
结果:
曲面z=sin(y)
过程说明:
用到的知识包括:曲面绘制,plot3绘制等高线, legend添加图例,text添加文本说明, axis及box、grid等设置。
fun = @(x)(-sin(x(1))*cos(x(2))); % 定义目标函数
lb = [0, 0]; % 设定下界
ub = [2*pi, 2*pi]; % 设定上界
[xmin, fmin] = fmincon(fun, [pi/2, pi/2], [], [], [], [], lb, ub); % 求最小值
[xmax, fmax] = fmincon(@(x)(sin(x(1))*cos(x(2))), [pi/2, pi/2], [], [], [], [], lb, ub); % 求最大值