2016-08-25 3 views
2

Я пытаюсь создать контурный график с фокусом вокруг определенного конечного диапазона от 1 до 1.05. В то же время, мне нужно очень высокое разрешение ближе к 1. Я думал, что я мог бы использовать что-то вроде следующие, но расстояние до сих пор выглядит линейнымКак создать нелинейный разнесенный вектор в Matlab?

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

Что является лучшим способом для повышения нелинейности расстояния, когда границы настолько плотные? Опять же, мне нужно поддерживать высокую плотность около 1 с разрешающей способностью нелинейным образом. У меня есть несколько идей, но я думал, что у кого-то может быть быстрый 2 лайнер или что-то в этом роде.

ответ

3

вместо применения функции п (х) = е х, чтобы получить 'крутой' нелинейность, а применить п (х) = е топор

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