如何将矢量场重新缩放到其他网格上?

时间:2019-07-04 09:22:00

标签: matlab

我目前有一个矢量场,它看起来像这样,它是用以下基本结构生成的,其中Z是一些矩阵:

[X,Y] = meshgrid(x,y)

[grad_x, grad_y] = gradient(Z)

quiver(X,Y,grad_x,grad_y)

enter image description here

我希望此图重新缩放,以使x轴的范围从1.5到3.8,y轴的范围从100到250,但是箭头本身看起来相同。图中唯一的区别应该是轴标签。

我尝试过:

grad_x_rescaled = [(grad_x - min(grad_x))./(max(grad_x)-min(grad_x))].*(3.8-1.5);
grad_y_rescaled = [(grad_y - min(grad_y))./(max(grad_y)-min(grad_y))].*(250-100);

但是,这样做的问题是,尽管grad_x和grad_y总体上已重新缩放,但箭头本身相对于彼此的缩放比例却未守恒,结果如下所示(请注意,黑色粗线可能是箭头,但重要的是问题是箭头的方向和相对大小与第一种情况并不完全相同。 enter image description here

是否存在一个matlab函数或表达式来将数据重新归一化到一个新的范围,但是使重新归一化的数据相对于自身缩放(例如,箭头应相对于彼此缩放相同)?

1 个答案:

答案 0 :(得分:1)

要简单地更改轴刻度标签,可以使用Matlab的功能to specify tick marks and tick labels。基本上,您只需要告诉Matlab这样的刻度线和标签应该怎么说:

xticks(linspace(0,1,6))
xticklabels(linspace(1.5,3.8,6))
yticks(linspace(0,1,6))
yticklabels(linspace(100,250,6))