马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
一. 手算梯度
1.盘算下列函数的梯度,并写明过程。
理论依据是前面两文学习过的:
链式法则:复合函数的导数可以用构成复合函数的各个函数的导数的乘积体现。
偏导数是多元函数时:将某一个变量定为目标变量,并将其他变量固定为某个值。
根据上述理论,我们先看动手写数学盘算过程:
F(x1,x2)对x1的偏导数为:
F(x1,x2)对x2的偏导数为:
将x1=2,x2=3带入上式:
该函数在点(2,3)处的梯度向量为:
故:以上二元函数在点(2,3)处的梯度向量为(108,144)。
二.绘制梯度3D图
从差别的视角来看梯度:
view(2) 设置默认二维视图 :
view(3) 设置默认三维视图:
附上matlab脚本:- [X1, X2] = meshgrid(-5:0.1:5, -5:0.1:5);
- F = (3*X1 + 4*X2).^2;
- [GX, GY] = gradient(F);
- figure;
- surf(X1, X2, F);
- hold on;
- % 为了绘制梯度场箭头,我们需要遍历网格点
- % 但由于梯度箭头可能会非常密集且难以看清,我们可以选择性地绘制一些箭头
- step = 5; % 设置步长
- for i = 1:step:size(X1,1)
- for j = 1:step:size(X1,2)
- % 提取当前网格点的坐标和梯度值
- x = X1(i,j);
- y = X2(i,j);
- z = F(i,j);
- ux = GX(i,j);
- uy = GY(i,j);
- % 归一化梯度向量(可选步骤,用于控制箭头长度)
- norm_factor = sqrt(ux^2 + uy^2);
- if norm_factor ~= 0
- ux = ux / norm_factor;
- uy = uy / norm_factor;
- end
- % 设置箭头长度(可以根据需要调整)
- arrow_length = 0.5;
- % 绘制梯度箭头
- quiver3(x, y, z, arrow_length * ux, arrow_length * uy, 0, 'r', 'LineWidth', 0.5);
- end
- end
- xlabel('x1');
- ylabel('x2');
- zlabel('f(x1, x2)');
- title('3D Plot of f(x1, x2) = (3x1 + 4x2)^2 and its Gradient Field');
- grid on;
- axis tight;
- view(3); % 设置视角
- hold off;
复制代码 本文仅为个人学习使用所写。
|