2016-08-25 65 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