如何在Matlab中创建非线性间隔矢量?

时间:2016-08-25 07:44:39

标签: matlab

我正在尝试创建一个轮廓图,其焦点围绕1到1.05的特定有限范围。与此同时,我需要非常高的分辨率接近1.我认为我可以使用类似下面的东西,但间距看起来仍然是线性的

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

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

2 个答案:

答案 0 :(得分:4)

而不是应用函数 f(x)= e x ,以获得更加苛刻的'非线性,而是应用 f(x)= e ax

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)

您可以在例如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