2016-08-25 209 views
2

我正在尝试创建一个围绕特定有限范围(从1到1.05)的等高线图。同时,我需要非常高的分辨率接近1,我想我可以使用类似以下,但间距看起来还是直线如何在Matlab中创建非线性间隔矢量?

out=exp(linspace(log(1),log(1.05),100)) 
plot(diff(out)) 

什么是增强间距的非线性的最佳途径时,边界如此紧张?再次,我需要保持高密度接近1,分辨率以非线性方式逐渐减小。我有一些想法,但我认为有人可能会有一个快速的班轮或类似的东西。的

回答

3

代替将函数F(X)= E X,以获得一个 '更陡的' 非线性,而申请F(X)= E

n = 20; 
a = 100; 
lower = 1; 
upper = 1.05; 
temp = exp(linspace(log(1)*a,log(1.05)*a,n)) 
% re-scale to be between 0 and 1 
temp_01 = temp/max(temp) - min(temp)/max(temp) 
% re-scale to be between your limits (i.e. 1 and 1.05) 
out = temp_01*(upper-lower) + lower 

现在plot(diff(out),diff(out),'o')产生

enter image description here

注意,您可以用logspace使用上面完全相同的缩放方案因此就使用

temp = logspace(...) 

,然后剩下的就是同

1

可以生成之间的对数分布,例如,1和1000,然后缩放回[1,1.05]:

out = logspace(0, 3, 100); 
out = ((out-min(out(:)))*(1.05-1))/(max(out(:))-min(out(:))) + 1; 

结果:

plot(diff(out)); 

enter image description here