大学matlab的一些问题

1,求函数在(1,1,1)处的切平面方程
按着图中空填写,或者在原来基础上找到错误

img

2,求函数极值
3,求曲面绘制的三种等高线
要求写具体程序,根据脚本填上(按照图中空来填)
并正确就行

img

img

img

引用chatgpt部分指引作答:
第一题:
运行结果:

img

%定义符号变量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));

第三题:
运行结果如下:

img

%将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

运行结果

img

代码如下

% 定义变量
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);


  1. 求函数z=x^3-3xy^2在点(1,1,1)处的切平面方程:
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$$

  1. 求函数z=sin(x)*cos(y)在区间[0,2π]上的极值:
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
  1. 绘制函数z=x^2-y^2的三种等高线:
[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

曲面及其切平面

过程说明:

  1. 定义函数f(x,y)=2x^2-2y
  2. 在(1,1,1)处求一阶偏导数,得到切平面法向量A和定标量d
  3. 输出切平面方程:A(1)*x + A(2)*y + A(3)*z = d
  4. 使用ezplot绘制曲面,ezmesh绘制切平面
  5. 添加标题,标签,坐标轴等
  6. 清除hold on保持的图形

用到的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

过程说明:

  1. 定义函数f(x,y)=e^(2x)(x+y^2+2y)
  2. 求偏导数fx,fy
  3. 选择(0,0)为初始点,迭代寻找极值
  4. 使用Newton法更新x,y的值
  5. 判断是否收敛,若满足条件则跳出
  6. 输出结果:极值点及极值

所用知识包括:函数定义,求导数,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)

过程说明:

  1. 定义函数f(x,y)=sin(y)并绘制曲面
  2. 根据等高线方程z的值,求出y的值。x的值在一定范围内改变,y保持不变。
  3. plot3绘制等高线,并设置线宽,颜色等。
  4. 添加图例,说明等高线信息
  5. 设置坐标轴等比例,显示框架与网格

用到的知识包括:曲面绘制,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); % 求最大值