Ответ rahnema1 оказал мне огромную помощь, но остались еще две проблемы: 1 - первый элемент нового me sh не идентичен первому элементу оригинальной сетки 2 - в случае, если градиент равен нулю в какой-то момент функция interp1 выдаст ошибку [«Векторы сетки не являются строго монотонными c увеличивается.»]
Для 1-й точки я заменил две строки, определяющие eq_smpl, следующей строкой:
eq_smpl = linspace(CDF(1), CDF(end), numel(CDF))';
[беря столько элементов, сколько в CDF, и не центрируя точки]
Для 2-й точки я добавил строку после вычисления rho, чтобы заменить возможный 0 на маленький не нулевые значения:
rho(rho==0)=1e-12;
Последний код, который делает то, что я хочу, следующий:
% % % Initial fixed-step 1D mesh
X=(0:.01:2)';
% % % Values of a function at each mesh node [in this example, f(x)=5*sin(2*pi*x)*x ]
Y=5*sin(2*pi*X).*X;
% % % Calculate density of mesh points based on the Y function gradient
rho=[0; abs(diff(Y)./abs(diff(X)))];
% % % Replace eventual 0 with small non-zero values
rho(rho==0)=1e-12;
CDF = cumsum(rho);
eq_smpl = linspace(CDF(1), CDF(end), numel(CDF))';
% % % Calculate new mesh
X3 = interp1(CDF, X, eq_smpl);
% % % Interpolate the function Y at the new positions
Y3 = interp1(X, Y, X3);
% % % Plot
figure
subplot(2,1,1)
hold on
plot(X,Y,'ko-')
plot(X3,Y3,'r.-')
xlabel('x')
ylabel('y')
subplot(2,1,2)
plot(X,rho,'ko-')
xlabel('x')
ylabel('rho')
Еще раз спасибо rahnema1 за предоставление 90% ответа [вероятно, я не сделал ' очень хорошо объясняет исходный запрос]!