如何用Matlab画出z=tanx/(tanx-tany)的向量场?
我尝试了如下代码:[X,Y]=meshgrid(-80:2:80,-80:2:80);Z=tand(X)./(tand(X)-tan(Y));[DX,DY]=gradie...
我尝试了如下代码:
[X,Y] = meshgrid(-80:2:80,-80:2:80);
Z =tand(X)./(tand(X)-tan(Y));
[DX,DY] = gradient(Z,2,2); %梯度
% contour(X,Y,Z) %等高线
hold on
quiver(X,Y,DX,DY) %向量场
xlabel('x');
ylabel('y');
colormap hsv
hold off
但结果不对,正确的结果应该如图,求帮忙。 展开
[X,Y] = meshgrid(-80:2:80,-80:2:80);
Z =tand(X)./(tand(X)-tan(Y));
[DX,DY] = gradient(Z,2,2); %梯度
% contour(X,Y,Z) %等高线
hold on
quiver(X,Y,DX,DY) %向量场
xlabel('x');
ylabel('y');
colormap hsv
hold off
但结果不对,正确的结果应该如图,求帮忙。 展开
1个回答
展开全部
主要问题是某些点的梯度是发散的,结果算出来DX,DY里面有一堆Inf。画图的时候,Inf的箭头很长,所以把其它地方的箭头都变成一个点了。解决方法是把Inf都替换成NaN,代码如下(缩进的地方是修改过的代码):
[X,Y] = meshgrid(-80:2:80,-80:2:80);
Z =tand(X)./(tand(X)-tand(Y));
[DX,DY] = gradient(Z,2,2); %梯度
DX(abs(DX)==Inf)=NaN;
DY(abs(DY)==Inf)=NaN;
% contour(X,Y,Z) %等高线
hold on
quiver(X,Y,DX,DY,10) %向量场
xlabel('x');
ylabel('y');
colormap hsv
hold off
[X,Y] = meshgrid(-80:2:80,-80:2:80);
Z =tand(X)./(tand(X)-tand(Y));
[DX,DY] = gradient(Z,2,2); %梯度
DX(abs(DX)==Inf)=NaN;
DY(abs(DY)==Inf)=NaN;
% contour(X,Y,Z) %等高线
hold on
quiver(X,Y,DX,DY,10) %向量场
xlabel('x');
ylabel('y');
colormap hsv
hold off
东莞大凡
2024-08-07 广告
2024-08-07 广告
OpenCV标定板是东莞市大凡光学科技有限公司在相机标定中常用的工具。它通常由黑白格点按一定规则排列在平面上组成,如棋盘格或圆形格等。在相机标定时,将标定板置于不同位置和姿态下拍摄图像,利用OpenCV库中的函数检测标定板上的角点或圆心,进...
点击进入详情页
本回答由东莞大凡提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询